# Dotnet > Gnral Dotnet > Dveloppement Office System > InfoPath > [Dbutant] Rcupration des valeurs d'un champ dans une section extensible

## Catarssis

Bonjour s'il vous plait j'aimerais savoir comment faire pour rcuperer les valeurs dans champs "C1" dans une section extensible , j'ai essey le code suivant mais ca ne marche pas :

XPathNodeIterator nodes = MainDataSource.CreateNavigator().Select("/dfs:myFields", this.NamespaceManager);
string field1 = string.Empty;
foreach(XPathNavigator node in nodes)
{
  field1 = node.SelectSingleNode("/dfs:myFields/dfs:dataFields/d:SharePointListItem_RW/d:Valeur", this.NamespaceManager).Value;
}

le count de "nodes" est a 0 , alors que quand je met l'XPath d'un champ de la source de donnes principal je reois ce que je veux , et ma source de donnes viens d'une liste sharepoint ... 
aidez moi s'il vous plait !  ::roll::

----------


## billout rm

Bonjour, 

Dsol je suis en vacances donc je ne traite pas trop actuellement sur les forums. Je vous rponds directement sur le forum pour votre MP (a pourrait aider la communaut).

Pour votre problme, le XPathNodeIterator renvoie 0 lorsque l'expression  tudier n'est pas correcte. Si vous souhaitez utiliser une source de donnes secondaire, vous ne pouvez pas l'attaquer par le MainDataSource qui correspond comme son nom l'indique  la source de donnes principale.


En suivant ce post, vous arriverez  votre bonheur : http://www.infopathdev.com/forums/p/9471/33542.aspx

Bon dv!

----------


## Catarssis

Merci pour votre interet  ::): , en faite oui, c'tait un probleme de datasource , maintenant le gros soucis , c'est que je veux inserer les donnes que j'ai rcuper dans une liste SharePoint .. , vous avez une ide pour faire cela ^^ ?

----------


## billout rm

Bonjour,

Pour cela vous allez devoir utiliser du code manag.

Si vous utilisez InfoPath Forms Services (version Web), le formulaire est ouvert dans le contexte SharePoint et vous pouvez utiliser le modle objet de SharePoint en rfrenant la dll "Microsoft.SharePoint". Vous pouvez suivre ce genre tuto que vous trouverez partout sur Internet : http://www.mindfiresolutions.com/Add...epoint-372.php


Si vous ne pouvez pas utiliser le modle objet (si vous utilisez InfoPath en version cliente, le formulaire n'est pas ouvert dans le contexte SharePoint), vous pouvez utiliser les web services SharePoint pour rajouter un lment.

----------


## Catarssis

Bonjour ^^ ,

mon formulaire est ouvert sur Web effectivement , donc j'essai d'inserer les enregistrement de cette faon : 

using (SPSite oSPsite = new SPSite("http://website url/"))
{
using (SPWeb oSPWeb = oSPsite.OpenWeb())
      {
            oSPWeb.AllowUnsafeUpdates = true;

            // Fetch the List
            SPList list = oSPWeb.Lists["MyList"];

            //Add a new item in the List
            SPListItem itemToAdd = list.Items.Add();
            itemToAdd["Title"] = "Test Title";
            itemToAdd["Description"] = "Test Description";
            itemToAdd.Update();
}
} ...

Mais j'ai un souci pour ouvrir le site avec cette mthode : 
using (SPSite oSPsite = new SPSite("http://website url/"))
j'ai vrifi et revrifi mon URL  et rien , problme d'accs, alors que quand j'y accde depuis du code Visual Studio a marche .. , mais depuis InfoPath non ... sauriez-vous pourquoi ?

----------


## billout rm

Bonjour,

Attention il ne faut pas coder les URL en dur...
Vous pouvez utilisez les mthodes SPContext.Current.Site et SPContext.Current.Web pour rcuprer les SPSite et SPWeb du site sur leque vous tes connect.

Ensuite si vous tes en SharePoint 2010, il faut vrifier la cible de gnration 32 bits ou 64 bits. Un "SPSite" instanci en 32 bits vous renverra une erreur car le SharePoint est mont en 64 bits.

----------


## Catarssis

Bonjour,

Effectivement j'aimerai bien ne pas entrer l'URL brute comme a mais le :
-SPContext.Current.Site
-SPControl.GetContextSite(HttpContext.Current)
ne marchent pas. (sur Visual Studio(dv de workflow))

Cordialement

----------


## billout rm

Rebonjour,

Je n'ai pas suivi la fin de votre rponse : vous dveloppez un workflow ou un formulaire InfoPath avec code manag?

Si vous tes dans InfoPath, la mthode "SPContext.Current.Site" fonctionne correctement car j'utilise ce principe dans tous mes projets.
Par contre, pour que cela fonctionne, il faut dbugguer le formulaire directement depuis SharePoint. 

Si vous dveloppez un workflow avec workflow foundation, il faudra utiliser l'objet WorkflowProperties  qui comprend des proprits pour rcuprer le SPWeb et le SPSite.

Cordialement.

----------


## Catarssis

Bonjour, 

j'ai pu rcupr le site avec workflowProperites.SiteUrl.toString(); 
mais il me retourne "http://Site.com" alors que j'ai besoin de subsite qui est par exemple "http://Site.com/Proto" :S

Cordialement

----------


## billout rm

En effet,
Le "workflowProperties.SiteUrl.toString()" vous renvoie l'url de la racine de la collection de sites.

Vous devez donc utiliser "workflowProperties.Web.Url"

----------


## Catarssis

Bonjour  ::):  ,c'est bon j'ai pu avoir l'URL.
maintenant pour ouvrir le site depuis du code infopath
j'ai utilis la mthode 

 using (SPSite site = new SPSite(SPContext.Current.Web.ToString()))
            {
                using (SPWeb web = site.OpenWeb())
                {..

et mme pour manipuler la mthode de chargement du formulaire, il me sort l'erreur suivante : 

System.Security.SecurityException
Request for the permission of type 'Microsoft.SharePoint.Security.SharePointPermission, Microsoft.SharePoint.Security, Version=14.0.0.0, Culture=neutral, PublicKeyToken=71e9bce111e9429c' failed.
   at Planification_des_tches.FormCode.Groupe_Changed(Object sender, XmlEventArgs e)
   at Microsoft.Office.InfoPath.Internal.XmlEventHost.GenericProxy(Object genericDelegate, DataDOMEvent dataDOMEvent, InfoPathEvents type)
   at Microsoft.Office.Interop.InfoPath.SemiTrust._DataDOMEventSink_SinkHelper.OnAfterChange(DataDOMEvent pDataDOMEvent)

j'ai modifi les persmissions au niveau du webconfig a Medium au lieu de Minimal mais rien .. :S

Cordialement

----------


## billout rm

Bonjour, 
Est-ce que l'utilisateur avec lequel vous tes connect possde assez de droits sur le site SharePoint en question? Si ce n'est pas le cas, il faut utiliser ce que l'on appelle le RunWithElevatedPrivileges:

http://blogs.msdn.com/b/sowmyancs/ar...b-context.aspx

----------


## Catarssis

Bonjour  ::): , 
Comment savoir les droit de mon utilisateur sur le site SharePoint ? car je suis en session administrateur .. , normalement je devrais avoir tous les droits ..

Cordialement

----------


## billout rm

En effet, ce ne peut-tre a!
Du coup la seule explication est que vous n'avez pas modifi le niveau d'autorisation dans votre formulaire InfoPath...

Pour cela il faut :
- Ouvrir votre formulaire InfoPath en mode design,
- Aller dans option du formulaire
- Aller sur l'onglet Scurit et approbation".
- Dslectionner Dterminer automatiquement le niveau de scurit
- Cocher Confiance totale,
- Enregistrer pour publier le formulaire.

Et normalement aprs a, a rocks!

----------


## Catarssis

\O/ ca marche, merci beaucoup pour ton aide ^^ , 
mais ce qui est bizarre , c'est que ca marche en mode dbugge (j'ai entr l'url  la place du Context...) mais quand je publie et j'essai de le faire depuis le site , ca ne marche pas :S .

----------


## Catarssis

et j'ai un autre soucie, et je crois que c'est la meme erreur qui fait que ca ne marche pas cot web , c'est que quand j'ajoute du code a mon formulaire , je ne peux plus l'ouvrir en mode web , il s'ouvre en infopath ...  ::roll::

----------


## billout rm

Bonjour,

Il faut dans ce cas vrifi dans les "options du formulaire" dans l'onglet "Compatibilit" si votre formulaire est en mode "Formulaire Web".
Ensuite il faut vrifier dans votre bibliothque SharePoint si le mode d'ouverture est dfini  "Ouvrir dans le navigateur" (dans les paramtres avancs de la bibliothque).

Avec a, vous devrez tre bon.
Par contre, il faudrait recrer un post  chaque nouvelle question afin que les utilisateurs ne puissent s'y retrouver.

Cordialement.

----------

