# Dotnet > Gnral Dotnet > Dveloppement Office System > InfoPath >  Somme champ extensible

## Yurnero_

Bonjour petite question

Situation : formulaire de demande de congs. Chaque formulaire, une fois valid indique un nombre de jour de cong, qui est extrait dans SharePoint. 

Je rcupre dans le form via une connection ce "champ extensible" nb de Jour de SharePoint (qui comprend tout les nb dejours, par ex si on l'affiche au format liste droulante, on peut tous les voir)

J'ai besoin de la somme de ces chiffres pour afficher le nombre de jour de congs disponible.

J'ai essaiy avec Eval mais ca ne marche pas

Si quelqu'un  la solution  ::): 
Cordialement,
Frdric

----------


## virgul

*Pas de mp pour des question technique, y a pas de premire ou de dernire fois...*

Je ne comprends pas bien le calcul que tu veux faire dsol peux-tu rexpliquer:

C'est la diffrence entre deux date que tu veux calculer ?

ou c'est faire un total avec des nombres dans un tableau rptitif?

----------


## Yurnero_

Oui, dsol. Je dtaille.

Je pense que ca correspond effectivement  faire la somme des lements d'un tableau rptitif, puisque j'ai pu afficher les chiffres dans une section extensible, mme si je ne suis pas sur du terme.

Pour reformuler la situation, sous sharepoint, j'ai une bibiothque de formulaire qui extrait dudit formulaire un nombre de jours de cong. Et j'aimerais faire la somme de ces jours si ils sont valids (filtre aux niveau de la connection ca ok) pour indiquer combien il reste de jours disponibles.

Cordialement,
Frdric

----------


## virgul

Je crois qu'il faut que tu illustre car pour toi c'est claire mais ca ne l'est pas pour moi.

Comment tu sais si un jour a t accept?
C'est par rapport a la date du jour que tu calcul ton terme?

Je pense que tu trouveras sur ces trois liens comment faire:
http://blogs.msdn.com/infopath/archi...hout-code.aspx

http://blogs.msdn.com/infopath/archi...me-values.aspx

http://blogs.msdn.com/infopath/archi...ng-totals.aspx

----------


## Yurnero_

A partir de sharepoint je rcupre le nombre de jour, l'tat de la demande, le nom du demandeur. Je filtre si nom (connection)  = nom (Application... en cours). Je filtre si l'tat est "Valid". Et je veut faire la somme des jours.

Pour le calcul, et les convertions c'est bon j'ai dja rsolu mon problme.

J'avais dja tent d'utilis eval, mais ca renvoyait tout le temps NaN (vide?)

Je vais retravailler la formule avec eval
Merci quand mme.

J'ai un formulaire de demande de cong, publi sur sharepoint, avec des colonnes promues, comme nb de jour. Ce que j'aimerais c'est que dans ce mme formulaire, on puisse rcuprer le nombre de jour dja demands si il y en a.

Je peut pas faire plus clair :o
edit : 

Voil je t'ai prsent ma source d'information, mode apercu et cration, sachant que j'ai du directement afficher ca  partir des donnes secondaire. (impossible de faire une section extensible et de la remplir correctement pour avoir le mme resultat :o)

Si ca peut t'aider  ::):  malgr c je n'arrive pas  renvoyer quelque chose de correct avec eval (j'ai fait un test somme totale sans filtre, sans resultat)  ::(:

----------


## virgul

Bon j'ai plus ou moins compris maintenant ...

Regarde les liens que je t'ai donne surtout le dernier il t'auidera peut-tre a comprendre ton erreur.


Si j'ai bien compris c'est sum() que tu dois utiliser et pas eval().

----------


## Yurnero_

les deux ... mais ca ne marche pas (encore) ..
><
Je posterait le resultat si je trouve quand mme

edit : j'ai mit

somme( val(<source de connection secondaire>, "<Champ>"))

Mais ca me sort une erreur, j'ai test en remplacant source par champ et champ par "..", ca me met "NaN" vide.

j'ai aussi test 
somme( val(<source de connection secondaire>, '<Champ>'))
et infopath remplace <champ> automatiquement par son expression. Mais il refuse d'ouvrir le formulaire en aperu.

Est-ce que tu as une ide sur ce qui ne va pas ? Je suppose que j'utilise mal cet 'eval'

Qui plus est la syntaxe diffre entre infopath office en ligne etc
http://office.microsoft.com/en-us/in...391033.aspx#44
Si je copie  la lettre ca me sert une erreur logique, puisque la somme n'est pas une expression xpath valide.
..

----------


## Yurnero_

Je n'y arrive pas  !#fu<.

...
Je doit le faire mais l je sche, et cette mthode me semblait la seule possible pour arriver  traiter les compteur de jours restants.

help  ::(: 

comment on se sert de eval "en pratique", j'ai essay en fonction des ex mais ca les formules n'taient pas valides ...

----------


## cocosql

Regarde ici et aussi l

Il donne quelques explication en ce qui concerne les tableaux extensibles, ici il concatne les champs du tableau, ptet que ca marche avec sum ...  ::):

----------


## Yurnero_

Merci j'ai dja lu  peu prs 120 posts/tutaux dans le genre(yeah presque 2 jours que je fait  'happy stage'), ils disent tous la mme chose, et sur les versions anglaises j'ai pu trouver quelques infos concernant des problmes potentiels avec les sources secondaires mais rien d'impossible 'normalement'.

Sauf que dans mon form infopath refuse de s'ouvrir, avec la seule syntaxe qu'il accepte de prendre. Si j'enleve la fonction je peut faire l'affichage de la source secondaire sans problmes dans une repeating section/table
et si je fait un sum(champ) ca m'affiche 'NaN'@champ vide 

'dmon quand tu nous tient'


somme(val(Demandes_de_Congs; 'xdXDocument:GetDOM("Nb de jour pris")/dfs:myFields/dfs:dataFields/dfs ::D: emandes_de_Congs/@Nb_Jours'))

----------


## virgul

> Merci j'ai dja lu  peu prs 120 posts/tutaux dans le genre(yeah presque 2 jours que je fait  'happy stage'),


y a des jours ou on avance pas c'est un fait et c'est souvent  cause de "connerie". Et c'est pas que avec Infopath que tu auras ce genre d'os.

Pour ton problme moi je fait comme ca (voir pice jointe) qu'es-ce qui te convient pas la dedans? 

++

Thierry

----------


## Yurnero_

Ouais je sait bien, c'est pour ca que je regarde pour un autre formulaire avec un tableau dynamique (autre sujet  part).

Euh, le fait que ca vienne pas d'une source de donnes externes je dirait. 

Quand je fait comme toi, cd une somme simple ca me met NaN comme si il ne pouvait pas faire le calcul.

Merci quand mme  ::D:

----------


## virgul

encore une fois je vois pas ou est le problme dsol. pour une source de donnes secondaire c'est exactement la mme chose.

++

Thierry

----------


## Yurnero_

::arf:: 

Ouais sauf que chez moi ca fait NaN toujours, pourant tu fait  avec des string, j'ai pens sur le coup que c'tait une erreur de type mais non ...

Dcidment..

----------


## virgul

je sais pas si tu a remarqu mais moi j'utilise pas eval() pour faire mon expression.

----------


## Yurnero_

Si j'ai vu.
Ce qui me surprend c'est que chez toi ca marche avec des string, alors que je supposais que mon problme venait de l. Par contre j'abandonne videmment le eval(). Au moins c'est une avance. Merci

edit Je vient de republier mon formulaire, en ayant chang tous les formats.
et ca marche ...
Comme quoi je ne cherchait pas du bon cot, puisque je suivait les tutos ><

edit : je faisait mes test avec des dcimaux! Pour problme j'ai du traduire les demi-journes en 0,5.
Et je vient de faire le test sur le formulaire que tu m'avais envoy, ca ne marche plus  ::): 

Je vais devoir faire l'addition dcimale en code apparement

----------


## Yurnero_

Est-ce que quelqu'un sait s'il y a une possibilit pour faire la somme de dcimaux ? Ou s'il y a une solution quivalente, je me vois mal faire la fonction sum,  partir de node rptitives  ::(:  avec mon pauvre c#@form de deux semaines.

Cordialement

edit : conversion de sharepoint ><

----------


## virgul

C'est possible d'avoir un rcapitulatif car la je sais plus trop ou tu en es?

----------


## Yurnero_

Ha trs trs compliqu

Donc pour rsumer, j'ai un champ 'nbjour' rempli par calcul qui renvoie la diffrence de 2 date selector. Si je le met en double et que ma fonction renvoie un entier ou que j'entre n'importe quoi tout marche.

Mon problme c'est qu'il y a un cas ou elle renvoie 0.5 et l c n'est plus accept. (validation de type : string != double)
Par contre si je met le champ en string, ca accepte forcment mon 0.5 mais aprs publication la somme plante si il ya un 0.5 qui traine dans les calcul  faire.

Le vrai problme c'est insrer dans la node une valeur type double via fonction, ce que je ne sait pas faire.

je code en c#, j'ai d'ailleur post une fois que j'ai g ou tait le 'vrai' prob : http://www.developpez.net/forums/sho...d.php?t=559561




extrait concernant la partie 'rebelle'

double DateDif = 0.0;
            if (MainDataSource.CreateNavigator().SelectSingleNode("/my ::D: emandeConge/my:typeJourne", NamespaceManager).Value != "Journe entire")
                DateDif = 0.5;
            else
                DateDif = 1.0;

            XPathNavigator dd = MainDataSource.CreateNavigator().SelectSingleNode("/my ::D: emandeConge/my:dd",
                NamespaceManager);
            dd.SetValue(DateDif.ToString());

----------


## cocosql

Si ca peut t'aider, le C# est un langage qui peut s'introspecter.
Tu peux dclarer une variable de type object dont tu ne connais pas le type et tester le type avec 'GetType().Name', par exemple :



```

```



va t'afficher :



```

```


De mme tu peux tester une variable sur son type, sans forcment le connatre :



```

```



n'oublie pas que tu ne peux donner un type  un variable object sans passer par un transtypage comme suit :



```
TabObj[i] = (Int32) TabObj[i] + 1;
```

----------


## Yurnero_

y mais le problme c'est que dans mon c# j'utilise SelectSingleNode(...).SetValue(xx)

et SetValue ne prend que des chane de caractre mais ca ca fait planter les calcul de sum()  ::aie::

----------


## cocosql

Pourquoi veux tu passer par du XML

 ::arrow::  XML cay le male

nan srieusement, j'ai perdu 2 demi journes a essayer de trouver une solution en XML pour finalement me rabattre sur une solution directement sur InfoPath, y'a toujours un autre moyen ^^

ps: c'est le mme problme que ton tableau avec les 31 jours ?

----------


## Yurnero_

Non c'est diffrent.

Pourquoi ? Parce que , j'avais besoin de calculer un nombre de jours sachant (datepicker debut) 
(datepicker_fin) 
(typejourne (choice : journe entire, matine, aprs-midi))

et de calculer ce nombre si on modifie l'un ou l'autre de ces 3 controles
Et que infopath ne permet pas de faire joujou  ce point  ::(:

----------

