Frage

Ich habe eine Infopath 2007 -Form mit mehreren Ansichten, die in einem Browser verwendet werden sollen. Ich habe Probleme, ein Feld in einer Wiederholungstabelle vorzulegen, beginnend mit einem bestimmten Wert und dann mit einem aus Formel abgeleiteten Standardwert.

Auf der Summary View, ich bitte um das Projekt eines Projekts TotalCost und die prognostizierten Ausgaben des aktuellen Geschäftsjahres (CurrentFYSpend):

+------------------------------+
|  Project Summary             |
+------------------------------+
|  Total Cost:       $100,000  |  -- TotalCost
|  Current FY Spend: $ 25,000  |  -- CurrentFYSpend
+------------------------------+
Auf der nächsten (Detail) Ansicht, ich habe eine Wiederholungstabelle FYSpending wo der Benutzer das Projekt ausbrechen muss TotalCost über eine willkürliche Anzahl von Geschäftsjahren. Das FYSpending Tabelle hat a YearlyCost Feld, das die geschätzten Ausgaben dieses Jahres hält. Unter der sich wiederholenden Tabelle habe ich RunningTotal und Remaining Felder. RunningTotal hat einen Standardwert von sum(YearlyCost); Remaining hat einen Standardwert von TotalCost - sum(YearlyCost); Zusammen zeigen sie dem Benutzer, wie viel von der Gesamtsumme bereits berücksichtigt wurde und wie sehr er noch in ein Geschäftsjahr ausbrechen muss.

Wenn wir zum ersten Mal die eingeben Detail Sieh den YearlyCost Feld der ersten Reihe der FYSpending Wiederholungstabelle sollte mit dem besiedelt werden CurrentFYSpend Wert:

+--------------------------------+
|  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)
+--------------------------------+

Wenn der Benutzer eine neue Zeile für das Geschäftsjahr hinzufügt, möchte ich den Standardwert der neuen Zeile YearlyCost Feld zu berechnen als der verbleibende Betrag: 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   |
+--------------------------------+

Ich habe Probleme, weil die beiden vorpopulierenden Aktionen miteinander in Konflikt stehen und eine Rennbedingung zu schaffen scheinen. Ich habe versucht, eine Regel auf die zu setzen Summary's CurrentFYSpend Feld, um den Wert von festzulegen FYSpending's YearlyCost, Stellen Sie dann einen Standardwert auf die YearlyCost Feld zu setzen Value: TotalCost - sum(YearlyCost). Wenn ich das Formular speichere, erhalte ich den folgenden Fehler:

Ein Fehler trat im Code des Formulars auf. Die Anzahl der Aufrufe des geänderten Ereignisses für ein einzelnes Update in den Daten übertraf die maximale Grenze.

(Danke, Infopath, für eine solche spezifische Fehlermeldung! Wie viel muss ich bezahlen, um den Namen des Objekts zu erhalten, das das Ereignis abgefeuert hat, oder dass Sie versucht haben zu aktualisieren?)

Kann jemand eine Technik beschreiben, um dies zu erreichen? Zusammenfassend,

  1. Bevölkerungsgruppe First Rows YearlyCost Aus den vorherigen Ansichten CurrentFYSpend
  2. Lassen Sie die erste Zeile überschreiben YearlyCost, und anschließend Zeilen bevölkern ' YearlyCost Standardwert zu TotalCost - sum(YearlyCost)
War es hilfreich?

Lösung 2

Und eine andere Technik von Jimmy Riche auf dem Infopathdev.com -Foren:

CurrentFYSpend hat eine Regel, die festlegt YearlyCost = .

RunningTotal hat einen Standardwert von sum(YearlyCost), aktualisiert, wenn die Formel neu beruht.Remaining hat einen Standardwert von TotalCost - RunningTotal, aktualisiert, wenn die Formel neu beruht.

Endlich, das YearlyCost Das Feld in der Wiederholungstabelle hat einen Standardwert von

(Remaining) * (Remaining > 0), nicht Aktualisiert, wenn die Formel neu beruht. (ordentlicher Trick, oder?)

Dies funktioniert gut, obwohl die Formel für YearlyCost ist, ähm, nicht offensichtlich. Aber ich stelle fest, dass viel XPath so ist-man muss nicht offensichtliche Lösungen für Dinge finden, die in einer imperativen Sprache tot sein würden. Wie auch immer, das funktioniert, also implementiere ich es.

Andere Tipps

Ok, ich habe eine Antwort von Alec Pojidaev, wer ist der Infopath -Experte. Er sagt:

Sie haben ein paar Probleme, die ich bestimmen konnte. Das erste Kontrollkästchen "Aktualisieren Sie diesen Wert, wenn das Ergebnis der Formel neu berechnet wird" auf dem Jahrkreisfeld. Es ist eine einmalige Operation, sodass Sie es nicht neu berechnen möchten.

Das zweite Problem ist die Formel selbst. Das Ergebnis Ihrer Formel ../../../my:TotalCost - sum(.) ist absolut dasselbe wie ../../../my:TotalCost - .
Summe () -Funktion haben in diesem Zusammenhang keinen Sinn.

Wenn ich verstehe, dass Ihre Absicht korrekt ist, sollte die richtige Formel sein:../../../my:TotalCost - sum(../../my:FY/my:YearlyCost)

Nachdem ich diese Änderungen vorgenommen hatte, funktionierte das Formular wie gewünscht.

Das sum(.) in der Formel wurde automatisch generiert. Ich habe die Formel durch Point-and-Click erstellt, anstatt den XPath-Ausdruck zu schreiben. Als ich das hinzufügte sum() Funktion und wählte die aus YearlyCost Feld, der Formel -Editor ersetzt YearlyCost mit einer . Ich dachte, es wusste, was es tat, also ließ ich es allein. Ich sehe, ich muss genau darauf achten, was zugrunde liegende XPath generiert wird.

Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top