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!

19 octobre 2009

INFOPATH : FormState

Lors de l'utilisation du code managé dans InfoPath 2007, vous pouvez être amené à déclarer une variable globale afin de simplifier votre code.

Seulement, en infopath, cela nécessite de passer par l'utilisation d'un FormState (sous peine d'avoir un joli message d'erreur à la publication).
Il existe d'ailleurs un exemple prédéfini et commenté dans chaque formcode d'InfoPath.


La syntaxe à suivre est la suivante:
public partial class FormCode
{
       //Variable globales
       private string _strConnectionString
       {
             get {return (string)FormState["_strConnectionString"];}
             set {FormState["_strConnectionString"] = value;}
       }
       ...
}


Cela permet de déclarer le formState grâce à un get,set.
Ensuite , cette variable s'utilise simplement de la manière suivante:
  • Affectation : FormState["_strConnectionString"] = "test";
  • Lecture: string strConnectionString = FormState["_strConnectionString"].ToString();

Avec ceci, les variables globales InfoPath n'ont plus aucun secret pour vous.

12 octobre 2009

SHAREPOINT : Eviter IISRESET

Problématique:
Réaliser un ISSRESET sur un environnement de prodution est très fortement déconseillé... Malheureusement dans la plupart des cas, le déploiements de certaines fonctionnalités utilise cette commande. L'interruption de service est globale à tous les sites présents sur le gestionnaire IIS. Ainsi quelqu'un travaillant sur la web application X est bloqué à cause du déploiement d'une fonctionnalité sur l'application Y...

Résolution:
Au lieu d'effectuer un iisreset, il est préférable de "recycler le pool d'application" lié à votre web application.
Ceci fait le même effet que le iisreset mais correspond à une frappe chirurgicale! Ceci permet d'éviter de perturber les autres applications hébergées par IIS sur d'autres pools d'applications (cela induit donc de disposer de pools différent pour chaque web application afin d'être propre).
La commande permettant de redémarrer un pool d'application précis pour éviter le iisreset est la suivante:
          cscript c:\windows\system32\iisapp.vbs /a "NomduPool" /r
En environnement de développement, il est possible de rajouter cette commande lors de la compilation du projet VS. Ainsi un petit F5 sur le projet et tout est déployé!

Autant dire qu'il vaut mieux privilégier le recyclage d'un pool ciblé plutôt que d'utiliser un ISSRESET qui est beaucoup plus lent et qui interrompt le service sur tous les sites hébergés...

10 octobre 2009

OFFICE 2010: Gamme complète

En naviguant un peu sur le net, je suis tombé sur ce petit tableau récapitulatif des diverses éditions et gammes d'Office 2010 (cliquer sur l'image pour l'agrandir):




Par contre aucune information de prix ne filtre pour l'instant.
Il n'y a que Outlook qui est à présent placé dès la version "Home and Business".
A noter aussi que sur les nouveaux PC, le fameux "Works" (qui était installé par défaut) sera remplacé par des versions bridées de Word et d'excel (il était temps). Ce pack sera nommé Office Starter 2010.

Par contre la version "Professional Plus" d'Ofice 2010 comprendra:
  • le logiciel "SharePoint Workspace" (digne successeur de groove)
  • Notre logiciel bien-aimé "InfoPath". Par contre, nous avions déja vu qu'InfoPath était à présent scindé en 2 logiciels : le Editor et le Designer...
Petit bemol : j'espère que ce tableau est incomplet puisqu'il parait troublant que le InfoPath Editor (qui permet uniquement de remplir un formulaire InfoPath, genre "filler") ne soit disponible que dans la version ultime "Professional Plus"!

Affaire à suivre...