/ / in eine Instanz in einem Repeat einfügen - orbeon

Einfügen in Instanz in einer Wiederholung - Orbeon

meine Lage ist das Folgende:

  1. Ich habe ein Knotenset, über das ich eine Tabelle iteriere und mit einigen Daten auffülle
  2. Eines der Felder möchte ich zusammenfassen

Das Problem: Leider kann ich die Summenmethode nicht für die Berechnung verwenden, da das Nodeset eine benutzerdefinierte Funktion ist, die auf Daten aus anderen Formularen zugreift. Und das scheint die Dinge durcheinander zu bringen.

Meine Idee einer Lösung: Ich dachte, ich könnte eine Instanz erstellen und in jeder Iteration den Wert hinzufügen. Dann konnte ich einfach auf diese Daten zugreifen und alle erforderlichen Berechnungen durchführen. Die xforms: insert kann ich aber nicht zum Laufen bringen.

Eine vereinfachte Version sieht so aus:

            <xforms:repeat nodeset="(xxforms:si-source-forms("other_form"))">
<!-- table here -->
<xforms:insert
nodeset="instance("fr-form-instance")//positionen/position"
origin="instance("neue-position")"/>
</xforms:repeat>

Die Instanz "neue-position" enthält Bindungen zu den Werten im Quellformular:

  <xforms:bind id="neue-position-binds" nodeset="instance("neue-position")">
<xforms:bind id="neue-position-bind" nodeset="position">
<xforms:bind id="neue-position-summe-bind" nodeset="summe" name="summe" type="xforms:string" required="true" xxforms:default="xxforms:si-source-forms("other_form")//gesamtbetrag_ausgabe" />
</xforms:bind>
</xforms:bind>

Es funktioniert jedoch nicht wie erwartet, sodass offensichtlich etwas nicht stimmt. Ich würde alle Hinweise schätzen.

Antworten:

1 für die Antwort № 1

Über dein erstes Code-Snippet:

Ihre <xforms:insert> Sie befinden sich in der Ansicht und eine Aktion wird nur ausgeführt, wenn sie an einen Ereignis-Listener angehängt ist. Ohne ein ev:listener auf der <xforms:insert> (oder bei einer Aktion um diese Einfügung herum), wird sie einfach nicht ausgeführt.

Informationen zum Ausführen einer Summe über Knoten, die sich nicht in einer Instanz befinden:

Angenommen, es gibt nur eine "Summe" der von Ihrer benutzerdefinierten Funktion zurückgegebenen Daten, könnten Sie Code in diese Richtung schreiben:

  1. Speichern Sie die von der Funktion zurückgegebene Knotenfolge in einer Variablen <xf:var name="others" ref="xxforms:si-source-forms("other_form")"/>
  2. Verwenden Sie diese Variable in der Wiederholung: <xf:repeat ref="$others"> (Übrigens, jetzt standardisiert XForms die Verwendung von ref überall anstelle von nodeset).
  3. Mach deine Rechnung: <xf:var name="my-sum" ref="sum($others/path/to/values)"/>.
  4. Schließlich stelle ich mir vor, dass Sie etwas mit machen wollen $my-sum, zeig es vielleicht mit einem <xf:output>.