mercredi 13 février 2008

Appel d'une assembly .net depuis une application VBA

tout est dans le titre, comment donc faire appel à une assembly .net depuis une application VBA (au hasard Excel) :
  1. Créer une ClassLibrary
  2. Dans le propriétés du projet > Application > Information de l’assembly > cocher "Rendre l’assembly visible par COM"
  3. Puis dans Générer > cocher "Inscription pour Com Interop"
  4. Signer le projet avec un fichier SNK
  5. Dans la classe elle même, créer les membres et les fonctions en public
  6. Créer un fichier Excel.exe.config contenant le code ciblant le framework à utiliser :
    <?xml version="1.0"?>
    <configuration>
    <startup>
    <supportedRuntime version="v2.0.50727"/>
    </startup>
    </configuration>
  7. Mettre ce fichier au niveau de l'exécutable Excel.exe
  8. Ensuite au niveau de l'application Excel, ouvrir le Visual Basic Editor > Outils > Références > cocher votre composant dans la liste
  9. Créer votre code VBA pour faire appel à votre assembly :
    Sub CallAssemblyTest()
    Dim MaClass As New MonAssemblyClass
    MsgBox MaClass.MaFonction
    Set MaClass = Nothing
    End Sub
Plus d'infos dans ce précieux article : http://richnewman.wordpress.com/2007/04/15/a-beginner’s-guide-to-calling-a-net-library-from-excel/

samedi 9 février 2008

Création d’une thème personnalisé SharePoint

On trouve cette astuce un peu partout, mais au moins je saurais où trouver le chemin du fichier SPTHEMES.XML sans galèrer :)
Ainsi donc, voici un récapitulatif des étapes nécessaires à la création d'un thème personnalisé dans SharePoint :

  1. Naviguez dans le répertoire c:\Program Files\Common Files\Microsoft Shared\web server extensions\12\TEMPLATE\Themes et faites une copie du dossier du thème qui vous semble le plus proche de ce que vous souhaitez.
    Renommez le dossier (MonTheme)

  2. Dans le dossier MonTheme renommez le fichier theme.inf en MonTheme.inf et éditez celui-ci pour remplacer toutes les occurences de theme par MonTheme

  3. Naviguez dans le répertoire C:\Program Files\Common Files\Microsoft Shared\Web Server Extensions\60\TEMPLATE\LAYOUTS\1036\ et éditez le fichier SPTHEMES.XML pour y ajouter une section pour votre thème

  4. Ajoutez une image d'aperçu de votre thème dans le dossier C:\Program Files\Common Files\Microsoft Shared\Web Server Extensions\12\TEMPLATE\IMAGES

  5. IISRESET, le thème est désormais disponible dans la liste

Trucs et astuces SharePoint (v1)

Voici pêle mêle quelques astuces concernant le développement SharePoint (MOSS ou WSS) bien pratiques à avoir sous la main :

  1. Redémarrage du pool d’application au lieu de IISreset
    cscript.exe c:\windows\system32\iisapp.vbs /a "SharePoint - 80" /r
  2. Affichage des erreurs ASP.NET depuis un site SharePoint
    Dans le web.config :
    ...CallStack="true" et <customErrors mode="Off" /> 
    pour réactiver la prise en charge par SharePoint
    ...CallStack="false" et <customErrors mode="On" /> 


  3. Recréer l'index du moteur de recherche SharePoint :
    stsadm -o spsearch -action fullcrawlstart
    Plus d'infos : http://blogs.developpeur.org/fabrice69/archive/2007/12/12/wss-v3-recr-er-l-index-du-search-de-wss-v3.aspx

  4. Créer une liste d'après un template qui ne s'affiche pas dans la liste des templates :

    Parfois lorsqu'une liste SharePoint a été sauvegardée en tant que modèle de liste, celui-ci n'apparait pas dans la liste des modèles. Vous pouvez tout de même créer une liste en tapant le lien suivant (les valeurs comprises entre {} sont à renseigner par vos propres valeurs) :
    http://{SharePoint Server}/_layouts/{LanguageID – ex : 1036}/new.aspx?NewPageFilename={template.stp}&ListTemplate=100&ListBaseType=0

lundi 4 février 2008

Personnaliser la recherche WSS 3.0 et MOSS 2007

Le système de recherche des Windows SharePoint Services peut-être personnalisé pour correspondre à la charte graphique du site. Si cela est plutôt facile lorsque l'on utilise MOSS (comme nous le verrons plus loin), cela demande un peu plus de gymnastique sous WSS...

SOUS WSS

Création du controle

Tout d'abord nous devons créer un contrôle ascx (appelons le 'MySearchArea.ascx') qui prendra la place du 'SearchArea.ascx' situé dans C:\Program Files\Common Files\Microsoft Shared\web server extensions\12\TEMPLATE\CONTROLTEMPLATES

Copiez le contenu de 'SearchArea.ascx' dans votre contrôle et modifiez les lignes suivantes :
<SELECT id='idSearchScope' name='MySearchScope' class='ms-searchbox' title=<%SPHttpUtility.AddQuote(SPHttpUtility.HtmlEncode(SearchScopeToolTip),Response.Output);%>>

<INPUT Type=TEXT id='idSearchString' size=25 name='MySearchString' display='inline' maxlength=255 ACCESSKEY=S class='ms-searchbox' onKeyDown="return MySearchKeyDown(event, <%=strEncodedUrl%>);" title=<%SPHttpUtility.AddQuote(SPHttpUtility.HtmlEncode(SearchTextToolTip),Response.Output);%>>
</td>
<td>
<div class="ms-searchimage"><a target='_self' href='javascript:' onClick="javascript:MySubmitSearchRedirect(<%=strEncodedUrl%>);javascript:return false;" title=<%SPHttpUtility.AddQuote(SPHttpUtility.HtmlEncode(SearchImageToolTip),Response.Output);%> ID=onetIDGoSearch><img border='0' src="/images/mon_image.gif" alt=<%SPHttpUtility.AddQuote(SPHttpUtility.HtmlEncode(SearchImageToolTip),Response.Output);%>></a></div>
Laissez le dans le même répertoire que son grand frère ;)



Edition de Core.js

Ensuite éditez le fichier C:\Program Files\Common Files\Microsoft Shared\web server extensions\12\TEMPLATE\LAYOUTS\1033\Core.js

Insérer deux nouvelles fonctions Javascript avec le code suivant :
function MySubmitSearchRedirect(strUrl)
{
var frm=document.forms["frmSiteSearch"];
frm=document.forms[MSOWebPartPageFormName];
var searchText=frm.elements["MySearchString"].value;
var searchScope=frm.elements["MySearchScope"].value;
strUrl=strUrl+"?k="+escapeProperly(searchText)+"&u="+escapeProperly(searchScope);
window.location = strUrl;
}

function MySearchKeyDown(event, strUrl)
{
if (IsKeyDownSubmit(event))
{
MySubmitSearchRedirect(strUrl);
return false;
}
return true;
}


Editer la MasterPage

Editez votre masterpage et ajouter votre nouveau contrôle :
<%@ Register tagprefix="uc1" tagname="customsearch" src="~/_controltemplates/MySearchArea.ascx" >

Répérez le div 'SearchArea' et remplacez le par le code suivant (n'oubliez de mettre à false la propriété Visible du contrôle SharePoint) :
<div id="SearchArea"><uc1:customsearch id="customsearch1" runat="server"/><asp:ContentPlaceHolder id="PlaceHolderSearchArea" runat="server" Visible="false" ><SharePoint:DelegateControl runat="server" ControlId="SmallSearchInputBox"/></asp:ContentPlaceHolder></div>


Page de résultat

Créez une nouvelle page 'searchresults.aspx' dans une bibliothèque de documents de votre site qui hérite de votre charte graphique (masterpage) et faite un copier coller du code de la page SharePoint pour son contenu C:\Program Files\Fichiers communs\Microsoft Shared\web server extensions\12\TEMPLATE\LAYOUTS\searchresults.aspx



Web.config

Enfin, modifiez le 'Web.config' de votre application web :

Section PageParserPaths
<PageParserPath VirtualPath="/Pages/searchresults.aspx" CompilationMode="Always" AllowServerSideScript="true" />
Section SafeControls
<SafeControl Assembly="Microsoft.SharePoint.ApplicationPages, Version=12.0.0.0, Culture=neutral, PublicKeyToken=71e9bce111e9429c" Namespace="Microsoft.SharePoint.ApplicationPages" TypeName="*" Safe="True" AllowRemoteDesigner="True" />

Faites un IISRESET... c'est prêt! :)

Un grand merci à cet article pour m'avoir mâché le boulot http://www.cnblogs.com/sky-tcff/archive/2007/10/22/930818.html



Sous MOSS


Pour ce qui est de MOSS, il suffit d'éditer les fichiers 'SearchArea.xml' présents dans les répertoires
C:\Program Files\Common Files\Microsoft Shared\web server extensions\12\TEMPLATE\FEATURES\OSearchBasicFeature
et
C:\Program Files\Common Files\Microsoft Shared\web server extensions\12\TEMPLATE\FEATURES\OSearchEnhancedFeature

pour modifier l'image par exemple cela donne :

<?xml version="1.0" encoding="utf-8"?>
<Elements xmlns="http://schemas.microsoft.com/sharepoint/">
<Control Id="SmallSearchInputBox" Sequence="50" ControlClass="Microsoft.SharePoint.Portal.WebControls.SearchBoxEx" ControlAssembly="Microsoft.SharePoint.Portal, Version=12.0.0.0, Culture=neutral, PublicKeyToken=71e9bce111e9429c">
<Property Name="GoImageUrl">/images/mon_image.gif</Property>
<Property Name="GoImageUrlRTL">/_layouts/images/goRTL.gif</Property>
<Property Name="GoImageActiveUrl">/images/mon_image.gif</Property>
<Property Name="GoImageActiveUrlRTL">/_layouts/images/goRTL.gif</Property>
<Property Name="DropDownMode">ShowDD</Property>
<Property Name="SearchResultPageURL">/_layouts/osssearchresults.aspx</Property>
<Property Name="ScopeDisplayGroupName"></Property>
<Property Name="FrameType">None</Property>
</Control>
</Elements>


Pour plus d'infos :
http://clintcherry.spaces.live.com/blog/cns!AEC0DCBC460E45B9!421.entry
http://msdn2.microsoft.com/en-us/library/microsoft.sharepoint.portal.webcontrols.searchboxex_members.aspx



Voili, voilou... bon courage :)

vendredi 1 février 2008

Boulatek qu'est-ce que c'est ?

Le Boulatin vous souhaite la bienvenue sur son blog :)

Celui-ci a pour objet de centraliser toutes les infos techniques glanées ici et là au fil des développements. Une sorte de pense bête technique (PBT) ou mémento idiot techno (MIT) comme vous préférez :)

Du .net (C# et consorts), MOSS, WSS etc...

Voilà, en espérant que cela vous soit utile comme à moi

++