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.

SHAREPOINT : Champ multivalué

Aujourd'hui un micro post destiné à expliquer comment insérer plusieurs éléments dans un champ de type lookup (lien, groupes ou personnes,...).

Il suffit d'utiliser le code suivant:
SPFieldLookupValue val1 = new SPFieldLookupValue(1, "Group1");
SPFieldLookupValue val2 = new SPFieldLookupValue(3, "Group2");

SPFieldMultiChoiceValue multiChoice = new SPFieldMultiChoiceValue();
multiChoice.Add(val1.ToString());
multiChoice.Add(val2.ToString());

listItem["MultiValueLookup"] = multiChoice;
La classe SPFieldMultiChoice étant la prédestinée à insérer plusieurs valeurs dans un champ SharePoint de type lookup.

4 juin 2010

INFOPATH 2010 : Nouveautés, Tutoriels, Démo

Pour découvrir InfoPath 2010 ou tout simplement se faire une idée du large potentiel de ce magnifique outil, voici un petit lien utile qui pourra vous éclairer :

In english of course, but very well explain...
Petit plus non négligeable, ces vidéos sont téléchargables depuis le lecteur Windows média.