Schaltfläche zum Hinzufügen und Entfernen eines Abschnitts erstellen

Bei interaktiven Formularentwürfen ist es üblich, dass sich im Formular ein oder mehrere Abschnitte befinden, die erst angezeigt werden, wenn der Benutzer die Option zum Anzeigen dieser Abschnitte auswählt. Designer ermöglicht es Ihnen, eine Schaltfläche zusammen mit einem Skript hinzuzufügen, durch das ein bestimmter Abschnitt (Teilformular) dynamisch zum Formular hinzugefügt oder daraus entfernt wird, wenn der Benutzer auf die Schaltfläche klickt.

So können Benutzer im interaktiven Musterbestellformular beispielsweise auf die Schaltfläche „Kommentare hinzufügen“ klicken, um den Kommentarabschnitt (das Kommentar-Teilformular) aufzurufen. Die Schaltfläche verfügt über zwei verschiedene Beschriftungen, entweder zum Hinzufügen eines Kommentars oder zum Löschen eines Kommentars, die je nach aktuellem Status des Teilformulars wechseln. Bei jedem Klicken auf die Schaltfläche überprüft das Skript, ob das Kommentar-Teilformular angezeigt wird, und aktualisiert die Schaltflächenbeschriftung entsprechend.

Durch das Klicken auf die Schaltfläche wird ein Skript ausgelöst, das instanceManager verwendet (das Objekt des XML-Formularobjektmodells). Dieses Objekt verwaltet die Instanzerstellung, -entfernung und -verschiebung von Formularobjekten. Wenn der Endbenutzer das Kommentar-Teilformular löscht, entfernt das instanceManager-Objekt das Teilformular sowohl aus dem Formulardaten-DOM (Document Object Model) als auch aus dem Daten-DOM.

Beachten Sie, dass instanceManager vier Methoden verwendet: addInstance, removeInstance, moveInstance und setInstances. Die Namenskonvention von instanceManager lautet wie folgt: Teilformularname mit vorausgehendem Unterstrich (_subformname). Der Syntax für instanceManager lautet_subformname.methodname().

Im interaktiven Musterbestellformular wurde vom Formularverfasser das folgende JavaScript-Skript im Skript-Editor unter Verwendung der Methode setInstances eingegeben, damit das Kommentar-Teilformular hinzugefügt bzw. entfernt und die Beschriftung der Schaltfläche angepasst wird. Beachten Sie, dass die Eigenschaft comments.count == 0 die Anzahl der instanziierten Teilformularinstanzen zurückgibt.

// Invoke the Instance Manager to add and remove the comments subform. 
 
if (_comments.count == 0) {// The count property specifies the current number      
                                            // of instances instantiated. 
    _comments.setInstances(1);                                                // Add the comments subform. 
    this.resolveNode("caption.value.#text").value = "Clear Comments";                                                                                                            // Change the button's caption. 
} 
 
else { 
    _comments.setInstances(0);                                                // Remove the comments subform. 
    this.resolveNode("caption.value.#text").value = "Add Comments";                                                                                                            // Change the button's caption. 
}
Sie können gängige interaktive Funktionen in Formularen mit flexiblem Layout auch über das Action Builder-Dialogfeld im Menü „Extras“ erstellen, ohne Skripten zu schreiben.

Schaltflächen zum Hinzufügen und Löschen erstellen

Durch das Hinzufügen von Schaltflächen zu einem interaktiven Formular erhalten Endbenutzer die Möglichkeit, eine Aktion auszulösen, wie z. B. das Hinzufügen oder Entfernen von Teilformularen, durch die Abschnitte wie Elementzeilen in einem Bestellformular definiert werden.

Darüber hinaus können Sie eine QuickInfo zur Schaltfläche zum Löschen hinzufügen, die den Text „Element löschen“ anzeigt, wenn der Benutzer mit der Maus auf die Schaltfläche zeigt. Der Einsatz separater Schaltflächen zum Löschen ist nützlich, um den Benutzern das Löschen bestimmter Zeilen aus dem Formular zu ermöglichen.

So verfügt das interaktive Musterbestellformular beispielsweise für jedes Detail-Teilformular über eine Schaltfläche zum Hinzufügen eines Elements sowie über eine Schaltfläche zum Löschen, die durch ein „X“ markiert ist. Wenn der Benutzer auf die Schaltfläche zum Hinzufügen eines Elements klickt, wird vom Skript eine Elementzeile hinzugefügt. Wenn der Benutzer dagegen auf eine der Schaltflächen zum Löschen klickt, wird die entsprechende Elementzeile vom Skript gelöscht.

Sie können gängige interaktive Funktionen in Formularen mit flexiblem Layout auch über das Action Builder-Dialogfeld im Menü „Extras“ erstellen, ohne Skripten zu schreiben. Siehe Erstellen von Aktionen in Formularen

Schaltfläche „Element hinzufügen“

Mit dem folgenden JavaScript-Skript im Klicken-Ereignis der Schaltfläche zum Hinzufügen eines Elements können Benutzer eine Elementzeile zum interaktiven Musterbestellformular hinzufügen. Durch das Skript wird das Formular ebenfalls neu berechnet, so dass das Feld mit der Gesamtsumme die neue Zeile enthält.

Da Benutzer Elementzeilen nur über die Schaltfläche „Element hinzufügen“ hinzufügen können, muss das Skript den minimalen Zählerwert (den Wert für das minimale Vorkommen) nicht überprüfen.

// Invoke the Instance Manager to add one instance of the detail subform. 
_detail.addInstance(1); 
 
//Invoke the recalculate method to include the field values from the added subform in calculations. 
xfa.form.recalculate(1);

Schaltfläche „Löschen“

Mit dem folgenden JavaScript-Skript im Klicken-Ereignis der Schaltfläche zum Löschen können Benutzer die entsprechende Schaltfläche verwenden, um eine Instanz des Detail-Teilformulars des interaktiven Musterbestellformulars zu löschen. Durch das Skript wird das Formular außerdem neu berechnet, so dass das Feld für die Gesamtsumme die gelöschte Zeile nicht mehr enthält.

// Invoke the Instance Manager to remove the current instance of the detail subform. 
_detail.removeInstance(this.parent.index); 
 
// Invoke the recalculate method to update the form calculations. 
xfa.form.recalculate(1);

Da der anfängliche Mindestwert für das Vorkommen des Detail-Teilformulars 2 ist und somit automatisch zwei Elementzeilen angezeigt werden, muss dieser Mindestwert mit Hilfe des Skripts reduziert werden, damit zwei Elementzeilen gelöscht werden können. Dieses Skript wird dem Initialisieren-Ereignis des Detail-Teilformulars hinzugefügt.

// Reset the minimum occurrence value of the detail subform. 
this.occur.min = "0";

Da es für Benutzer möglich ist, alle Instanzen des Detail-Teilformulars zu löschen, wird durch das Skript für das Berechnen-Ereignis des Summenfelds (numTotal) sichergestellt, dass sich mindestens eine Instanz des Felds numAmount im Detail-Teilformular befindet. Wenn bei der Berechnung keine Instanzen des Felds numAmount gefunden werden, tritt ein Fehler auf. Dieses Skript wird dem Berechnen-Ereignis des numTotal-Felds hinzugefügt.

// Verify at least one instance of the numAmount field exists. 
if (exists(detail[0].numAmount) == 1) then 
    Sum(detail[*].numAmount) 
endif