16 septembre 2010

SHAREPOINT : Export WebPart

Aujourd'hui petite astuce pour l'exportation d'une webpart SharePoint de liste d'un environnement à une autre (validation à production par exemple) sans passer par l'utilisation de SharePoint Designer.

Pour exporter la webpart, il suffit de cliquer dans le menu contextuel de la webpart sur le menu Exporter.
Il suffit de préciser le nom du fichier avec l'extension ".webpart".

Techniquement ce fichier ".webpart" n'est rien d'autre que du XML et peut être modifié avec un éditeur de texte. Pour que la webpart fonctionne sur le nouvel environnement, il faut modifier le GUID de la liste pour le remplacer par celui de la liste dans le nouvel environnement.

Une fois le fichier modifié, il faut à présent importer la webpart dans le nouvel environnement.
Pour cela suivre les étapes suivantes:
  • Insérer une nouvelle webpart dans la page du nouvel environnement,
  • Cliquer sur le lien "Galerie de webpart avancée" dans la liste des webpart disponible,
  • Remplacer "Parcourir" par "Importer dans le menu disponible en haut,
  • Télécharger le fichier "*.webpart" modifié précédemment,
  • Sélectionner une position dans la page et cliquer sur "Importer".
La webpart fonctionne à présent sur le nouvel environnement sans avoir à utiliser SharePoint designer pour réaliser des modifications.

31 août 2010

INFOPATH : Deploiement formulaire InfoPath Form Services

Voici un petit post qui permet de gagner du temps dans le déploiement de formulaire InfoPath form Services.

Ces actions souvent fastidieuses peuvent être regroupées dans un même fichier bat.
Les principales commandes à connaitre pour déployer un formulaire InfoPath Form Services sont les suivantes:

// Déplacement dans le répertoire BIN de SharePoint pour utiliser l'outil STSADM
c:\Program Files\common files\microsoft shared\web server extensions\12\bin

// Verification de la validité du formulaire pour le déployer sur l'administration centrale (phase non obligatoire):
stsadm.exe -o VerifyFormTemplate -filename "c:/Partage/FormulaireInfoPathFormServices.xsn"

// Téléchargement du formulaire dans l'administration centrale de SharePoint:
stsadm.exe -o UploadFormTemplate -filename "c:/Partage/FormulaireInfoPathFormServices.xsn"

// Activation du formulaire sur la collection de site souhaitée:
stsadm.exe -o ActivateFormTemplate -url "http://MaWebAppSharePoint/MaCollectionDeSite" -filename "c:/Partage/FormulaireInfoPathFormServices.xsn"

// Désactivation du formulaire d'une collection de site souhaitée:
stsadm.exe -o DeactivateFormTemplate -url "http://MaWebAppSharePoint/MaCollectionDeSite" -filename "c:/Partage/FormulaireInfoPathFormServices.xsn"

// Suppression d'un formulaire InfoPath de l'administration centrale:
stsadm.exe -o RemoveFormTemplate -filename "c:/Partage/FormulaireInfoPathFormServices.xsn"

Remarques importantes :
  • Il est possible d'activer un même formulaire sur plusieurs collections de sites en lançant X fois la ligne de commande de l'activation,
  • La publication du formulaire InfoPath form services nécessite que le service SharePoint Timer soit démarré.Le cas échéant, il est possible d'utiliser la commande suivante qui force le passage du timer: "stsadm.exe -o execadmsvcjobs"Cette opération doit être effectuée sur tous les serveurs de la ferme SharePoint.Le cas échéant, le formulaire restera en état "Installation" ("Installing") ou "Mise à jour" ("Upgrading").Un formulaire n'est disponible que lorsqu'il est dans l'état "Prêt" ("Ready"),
  • En phase de développement, lorsque le déploiement du formulaire commence à prendre plus de 5 minutes, il faut se déplacer dans le répertoire local "Features" de la machine SharePoint et supprimer les anciens dossiers de solutions qui restent dans le feature et ralentissent le déploiement.

SHAREPOINT : Hide column Title

Un nouveau petit post SharePoint gentillet pour le retour de vacances.
Ce post consiste en une astuce afin de cacher le noms des colonnes SharePoint dans une liste ou une webpart. En effet, lorsque le style d'affichage est modifié (par exemple avec le style "Encadré"), il n'est pas nécessaire d'avoir l'information du nom des colonnes de la liste (qui de plus fait scroller l'affichage si il y a beaucoup de colonnes dans la liste).

L'astuce pour cacher cette barre des colonnes est d'utiliser ce que l'on appelle la webpart Editeur de contenu dite CEWP (Content Editor Web Part).
Il faut ajouter cette webpart juste après l'endroit ou il faut supprimer la barre des colonnes.
Ensuite passer en mode édition de la webpart, cliquer sur "Editeur de code source" puis insérer le texte suivant: ".ms-viewheadertr { display: none;}" dans une balise "STYLE".

Ainsi vous ne verrez plus la barre des colonnes apparaitre dans la page.

8 juin 2010

INFOPATH : HTML to XHTML

Il est toujours très compliqué de passer du format HTML au XHTML!
Le soucis est qu'InfoPath possède un éditeur Rich text qui est au format XHTML 1.0...

Comment procéder pour insérer un contenu HTML dans du XHMTL?
Il y a la solution de l'expression régulière que j'ai abordé précédemment dans ce blog.
Mais cette solution reste quand même très basique et pas assez efficace pour une utilisation de tous les jours.

Un peu de recherche m'a permis de tomber sur le projet SGMLReader qui est une bien meilleure approche (avec un résultat plus convaincant).


Ce projet comprend une dll qui peut-être incorporée dans votre projet InfoPath (avec du code managé).
Il vous suffit ensuite d'utiliser cette fonction perso qui utilise la fameuse dll SGMLReader (voir ci-dessous):
public string Html2Xhtml(string strHTML)
{
      Sgml.SgmlReader XHTML = new Sgml.SgmlReader();
      StringWriter sw = new StringWriter();
      XmlTextWriter w = new XmlTextWriter(sw);
      XHTML.DocType = "HTML";
      XHTML.InputStream = new StringReader(strHTML);
      while (!XHTML.EOF)
     {
          w.WriteNode(XHTML, true);
     }
     w.Close();
     return sw.ToString();
}

Puis d'appeler votre fonction:


string strXHTML = Html2Xhtml(strInputHTML);
//Ensuite ajouter "http://www.w3.org/1999/xhtml/" dans la balise ouvrante HTML .
...
// Affectation du mail dans le rich text
nav.SelectSingleNode("//my:ChampXHTML",NamespaceManager).AppendChild(strXHTML);

Et le tour est joué!

6 juin 2010

SHAREPOINT : ListTemplateId

Un nouveau petit post suite à la recherche des listtemplateid dans SharePoint (2007,2010).
Ces id sont utilisés notamment lorsque l'on utilise des receivers sur les liste SharePoint et que l'on veut appliquer ce receiver à toutes les listes d'un certain type (bibliothèque de documents, bibliothèque d'images, bibliothèques de formulaires,...). 

Les templateid basiques se trouvent dans l'énumération SPListTemplateType.
De même la liste des id est disponible à l'adresse suivante:
http://msdn.microsoft.com/fr-fr/library/microsoft.sharepoint.splisttemplatetype(office.12).aspx


Seulement cette liste ne répertorie pas l'ensemble des listes présentes dans SharePoint.
Par exemple, l'id d'une bibliothèque de page n'est pas répertoriée...


Ceci provient du fait que les bibliothèques de pages sont issues du feature dit de "publishing". Il faut donc chercher du côté de l'énumération "PublishingTemplateType".
internal enum PublishingTemplateType
{
InvalidType = -1,
PagesListTemplateType = 850
}
Nous voyons donc que l'id d'une bibliothèque de page est 850.

Mais il existe aussi une méthode simple permettant de déterminer l'id d'un template de liste. Pour cela il faut s'appuyer sur le modèle objet SharePoint et utiliser la propriété "BaseTemplate" sur la bibliothèque ou la liste concernée.