14 novembre 2009

INFOPATH : LINQ et section extensible

Habituellement, la construction par le code d’une section extensible (ou tableau extensible) d’InfoPath nécessitait l’utilisation d’un document temporaire que l’on ajoutait ensuite à la source de données. Cette opération s’avérait souvent fastidieuse et n’était pas des plus claires niveau code.

Une nouvelle méthode apparu avec le Framework .Net 3.5 est l’utilisation du LINQ (Language-Integrited Query) qui permet de requêter du XML , du SQL, des objets, de l’ADO.Net.

Pour l’utiliser dans un formulaire InfoPath, il faut faire monter la référence suivante: “System.Xml.Linq”.

Et ensuite le code est le suivant:

XNamespace xmlns = (XNamespace)PERSONNES.GetNamespace("my");
XNamespace xsi = “http://www.w3.org/2001/XMLSchema-instance”;
XElement PERSONNE = new XElement(new XElement(xmlns + "PERSONNE",
                                  new XElement(xmlns + "NOM", strNom),
                                  new XElement(xmlns + "PRENOM", strPrenom),
                                  new XElement(xmlns + "AGE", 
                                                new XAttribute (xsi + "nil", true)),
                                  new XElement(xmlns + "DATE_NAISSANCE", strDateNaissance)));
Puis, il suffit d’ajouter notre élément à notre source de données:
PERSONNES.AppendChild(PERSONNE.CreateNavigator());

Seul bémol, LINQ nécessite le Framework 3.5 installé sur la machine (ou sur le serveur dans le cas d'un formulaire Form Services).

Mots clés Technorati :

13 novembre 2009

SHAREPOINT : Champ TODAY



Les listes et bibliothèques sharePoint permettent d'utiliser des champs calculés, ce qui peut-être parfois pratique pour afficher une information calculée simplement.
Le hic est qu'il n'est en théorie pas possible d'utiliser la fonction de date du jour pour comparer deux dates. En effet, la fonction TODAY étant considérée comme une fonction "volatile", l'éditeur n'accepte pas que l'on utilise cette fonction!!!

Et pourtant, il existe une solution de contournement simple qui fonctionne.
La marche à suivre est la suivante:
  1. Créer une colonne nommée "TODAY" de type "Une seule ligne de texte".
  2. Créer un champ calculé prenant pour formule "=[TODAY]" (on référence donc ici la colonne que l'on a créé précédemment).
  3. On supprime ensuite la colonne "TODAY" créée au point 1.
Et comme par magie, la date du jour apparait dans la colonne calculée...
En fait il considère à présent TODAY comme la date du jour dans le champ calculé.

Par contre si vous voulez modifier la colonne calculée, il faudra auparavant recréer cette colonne sinon il serait impossible d'enregistrer le changement!