lundi 8 septembre 2008

Informations d'une source de données secondaires en .NET

Comment utiliser les sources de données secondaires (ItemMetaData.xml par exemple) d'Infopath 2007 avec du code managé (.NET 3.0).

Cas d'exemple : récupération de commentaires issus d'une source de donnée secondaire, par exemple un colonne d'une liste Sharepoint.

Ma source secondaire est un fichier xml, ItemMetaData.xml (je crois que la casse est importante) :

[xml]
<z:row xmlns:z="#RowsetSchema"
ows_commentaires=""
/>

Je veux par exemple afficher mes commentaires issus de ma liste Sharepoint dans un champ normal (pour les champs de texte riche, ça viendra dans un billet rapidement :)) s'appelant remarques et étant situé dans le groupe MesChamps (racine de la source de données principale). Je veux que ça apparaisse dès l'ouverture de ce formulaire. Voici la démarche à suivre :

  • je définie dans les options du formulaire le langage de programmation (j'utilise C# mais ça marche aussi avec VB) en code managé.

  • j'édite le code de l'évenemment d'ouverture du formulaire (Outils / Programmation / Loading)

  • je place le code suivant dans la méthode Loading :
[csharp]
try
{
// Ma source secondaire s'appelle ItemMetaData
XPathNavigator source_sec =
this.DataSources["ItemMetaData"].CreateNavigator();
// on descend vers le seul et unique fils du fichier : row
// (voir ItemMetaData.xml)
source_sec.MoveToFirstChild();
// on cherche l'attribut qui nous convient :
// ows_commentaires (pas besoin de namespaceURI)
string commentaires =
source_sec.GetAttribute("ows_commentaires", "");
XPathNavigator champ =
this.MainDataSource.CreateNavigator();
champ.SelectSingleNode(
"/my:mesChamps/my:remarques",
NameSpaceManager
);
// Note : le champ doit être de type string
champ.SetValue(commentaires);
}
catch (Exception exception)
{
string erreur =
"*** ERREUR ***\n" +
"Erreur lors de la récupération des données :\n" +
exception.ToString();
XPathNavigator champ =
this.MainDataSource.CreateNavigator();
champ.SelectSingleNode(
"/my:mesChamps/my:remarques",
NameSpaceManager
);
champ.SetValue(erreur);
}

Note : ce billet est un clean de ceux que j'ai posté sur le forum infopathdev

Aucun commentaire: