Question

J'ai un formulaire InfoPath 2007 avec plusieurs points de vue, destinés à être utilisés dans un navigateur. Je rencontre des difficultés de pré-remplissage d'un champ d'une table de répétition, en commençant par une valeur donnée, puis en utilisant une valeur par défaut dérivé de formule.

Dans la vue Summary, je demande la TotalCost d'un projet et les dépenses de l'exercice en cours projetée (CurrentFYSpend):

+------------------------------+
|  Project Summary             |
+------------------------------+
|  Total Cost:       $100,000  |  -- TotalCost
|  Current FY Spend: $ 25,000  |  -- CurrentFYSpend
+------------------------------+
Sur la page suivante (Detail) vue, j'ai un FYSpending de table répétitive où l'utilisateur a besoin de sortir le TotalCost du projet sur un nombre arbitraire d'exercices. Le tableau de FYSpending a un champ de YearlyCost qui détient les dépenses estimées de cette année. Sous la table de répétition je champs RunningTotal et Remaining. RunningTotal a une valeur par défaut de sum(YearlyCost); Remaining a une valeur par défaut de TotalCost - sum(YearlyCost); ensemble, ils montrent à l'utilisateur combien du total a déjà été pris en compte, et combien ils ont encore besoin de sortir dans une ligne exercice.

Lorsque nous entrons d'abord la vue Detail, le champ YearlyCost de la première ligne de la table répéter FYSpending doit être rempli avec la valeur CurrentFYSpend:

+--------------------------------+
|  Project Detail                |
+--------------------------------+
|  Total Cost:        $100,000   |  <- TotalCost
|                                |
|  Fiscal Year Spending:         |
|  +---------------------------+ |  <- FYSpending repeating table
|  |  FY  |        Yearly Cost | 
|  +---------------------------+ |  <- FYSpending repeating table
|  | 2009 |           $ 25,000 | |  <- YearlyCost[1], from Summary CurrentFYSpend
|  +---------------------------+ |
|  | Add Fiscal Year |           |
|  +-----------------+           |
|                                |
|  Running Total:     $ 25,000   |
|  Remaining:         $ 75,000   |  <- TotalCost - sum(YearlyCost)
+--------------------------------+

Lorsque l'utilisateur ajoute une nouvelle ligne budgétaire année, je veux la valeur par défaut du nouveau champ YearlyCost de ligne à calculer comme le montant restant: YearlyCost[n] = TotalCost - sum(YearlyCost):

+--------------------------------+
|  Project Detail                |
+--------------------------------+
|  Total Cost:        $100,000   |
|                                |
|  Fiscal Year Spending:         |
|  +---------------------------+ | 
|  |  FY  |        Yearly Cost | |
|  +---------------------------+ |
|  | 2009 |           $ 25,000 | |
|  | 2010 |           $ 50,000 | |  -- YearlyCost[2], calc'd by rule on Add Row  
|  +---------------------------+ |
|  | Add Fiscal Year |           |
|  +-----------------+           |
|                                |
|  Running Total:     $ 75,000   |
|  Remaining:         $ 25,000   |
+--------------------------------+

Je vais avoir du mal parce que les deux actions Préremplissage conflit entre eux et semblent créer une condition de course. J'ai essayé de définir un champ sur la règle de Summary du CurrentFYSpend pour définir la valeur de FYSpending de YearlyCost, puis définissez une valeur par défaut sur le champ YearlyCost pour définir Value: TotalCost - sum(YearlyCost). Quand je sauve la forme, je reçois l'erreur suivante:

  

Une erreur dans le code de la forme.   Le nombre d'appels au Changement   événement pour une mise à jour unique dans les données   dépassé la limite maximale.

(Merci, InfoPath, pour un tel message d'erreur spécifique! Combien dois-je payer pour obtenir le nom de l'objet qui a déclenché l'événement, ou que vous avez essayé de mettre à jour?)

Quoi qu'il en soit, peut-on décrire une technique pour y parvenir? En résumé,

  1. remplir la YearlyCost de première ligne de la CurrentFYSpend de la vue précédente
  2. permet redéfinissant la première de YearlyCost de ligne et remplir la valeur par défaut de YearlyCost de lignes par la suite ajoutée à TotalCost - sum(YearlyCost)
Était-ce utile?

La solution 2

Et une autre technique de Jimmy à le Riche forums infopathdev.com :

CurrentFYSpend a une règle qui définit YearlyCost = .

RunningTotal a une valeur par défaut de sum(YearlyCost), mis à jour lorsque la formule est recalc'd. Remaining a une valeur par défaut de TotalCost - RunningTotal, mis à jour lorsque la formule est recalc'd.

Enfin, le champ YearlyCost dans le tableau de répétition a une valeur par défaut de

(Remaining) * (Remaining > 0), pas mis à jour lorsque la formule est recalc'd. (Astuce, hein?)

Cela fonctionne bien, même si la formule pour YearlyCost est, euh, non évidente. Mais, je trouve que beaucoup de XPath est comme ça - il faut trouver des solutions non évidentes à des choses qui seraient morts simple dans un langage impératif. Quoi qu'il en soit, cela fonctionne, donc je suis mise en œuvre.

Autres conseils

OK, je suis une réponse Alec Pojidaev , qui est tout à fait l'expert InfoPath. Il dit:

Vous avez des problèmes ou deux, j'ai pu localiser avec précision. La première est vous avez coché la case « Mettre à jour cette valeur quand le résultat de la formule est recalculé » sur YearlyCost terrain. Son une opération de temps afin que vous ne voulez pas le recalculer.

Le deuxième problème est la formule elle-même. Le résultat de votre formule ../../../my:TotalCost - sum(.) est tout à fait le même que ../../../my:TotalCost - .
fonction sum () ont aucun sens dans ce contexte.

Si je comprends votre intention de corriger la bonne formule devrait être: ../../../my:TotalCost - sum(../../my:FY/my:YearlyCost)

Après avoir fait ces changements, la forme a travaillé comme souhaité.

Le sum(.) dans la formule a été généré automatiquement. J'ai construit la formule à travers le point-and-click plutôt que d'écrire l'expression XPath. Quand j'ai ajouté la fonction sum() et choisi le champ YearlyCost, l'éditeur de formule remplacé YearlyCost avec un . je me suis dit qu'il savait ce qu'il faisait, donc je l'ai laissé seul. Je vois que je dois porter une attention particulière à ce que XPath sous-jacente est généré.

Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top