Dynamisches Ausfüllen eines zweiten Feldes nach dem Ausfüllen des ersten Feldes

Sie können mit Hilfe von Skripten ein zweites Feld dynamisch ausfüllen, wenn das erste Feld bereits ausgefüllt ist. Sie können beispielsweise eine Dropdown-Liste mit den Namen verschiedener Länder einrichten. Nachdem ein Benutzer ein Land ausgewählt hat, zeigt die zweite Liste die Staaten, Bezirke oder Ähnliches für das entsprechende Land.

In der zugehörigen XML-Datei könnte Folgendes definiert sein:

<MyData> 
      <country/> 
      <countries> 
         <item uiname="United States" token="US"/> 
         <item uiname="Vietnam" token="SRV"/> 
      </countries> 
      <state/> 
      <US> 
         <item>California</item> 
         <item>New York</item> 
         <item>Texas</item> 
      </US> 
      <SRV> 
         <item>An Giang</item> 
         <item>Bac Giang</item> 
         <item>Bac Kan</item> 
      </SRV> 
</MyData>

Wenn Sie in der ersten Dropdown-Liste beispielsweise „Vietnam“ auswählen, werden in der Liste „Staaten/Bezirke“ nur die Staaten angezeigt, die zu Vietnam gehören.

Bevor Sie diese Aufgabe ausführen, müssen Sie Folgendes sicherstellen:

So richten Sie das erste Feld ein

  1. Klicken Sie in der Palette „Objektbibliothek“ auf die Kategorie „Standard“ und ziehen Sie eine Dropdown-Liste oder ein Listenfeld auf den Formularentwurf.

    Fügen Sie beispielsweise eine Dropdown-Liste ein.

  2. (Optional) Klicken Sie in der Palette „Objekt“ auf die Registerkarte „Feld“ und geben Sie im Feld „Beschriftung“ eine Beschriftung für das Objekt ein.

    Geben Sie beispielsweise Land ein.

  3. Führen Sie einen der folgenden Schritte aus:

    • Klicken Sie in der Palette „Objekt“ auf der Registerkarte „Feld“ auf die aktive Beschriftung „Listenelemente“.

    • Klicken Sie in der Palette „Objekt“ auf der Registerkarte „Bindung“ auf die aktive Beschriftung „Elementwerte festlegen“.

  4. Wählen Sie die Datenverbindung aus.

    Hinweis: Falls noch keine Verbindung zu einer Datenquelle besteht, wird in diesem Listenfeld lediglich der Eintrag „Standarddatenbindung“ angezeigt.
  5. Klicken Sie auf das Dreieck neben dem Feld „Objekte“ und wählen Sie eine Bindung aus.

    Die ausgewählte Bindung sollte ein sich wiederholender Datenwert oder eine sich wiederholende Gruppe sein, damit die Dropdown-Liste bzw. das Listenfeld nicht nur ein Element enthält.

    Wählen Sie beispielsweise „countries“ > „item“ aus.

    Im Feld „Objekte“ wird die folgende Zeichenfolge angezeigt:

    $record.countries.item[*]

    Sie können diese Zeichenfolge alternativ auch direkt in das Feld „Objekte“ eingeben.
    Hinweis: Bei OLEDB-Datenverbindungen steht das Feld „Objekte“ nicht zur Verfügung. Verwenden Sie die Felder „Objekttext“ und „Objektwert“, um die Datenbasisspalten zum Ausfüllen der Liste auszuwählen.
  6. Damit zur Laufzeit eine benutzerfreundliche Beschriftung angezeigt wird, klicken Sie auf das Dreieck neben dem Feld „Objekttext“ und wählen Sie eine Bindung aus.

    Wählen Sie beispielsweise „@uiname“ aus, wenn United States angezeigt werden soll.

  7. (Optional) Wenn Sie in der Datenquelle einen anderen Wert als die Bezeichnung „Objekttext“ speichern möchten, klicken Sie auf das Dreieck neben dem Feld „Objektwert“ und wählen Sie eine Bindung aus.

    Wählen Sie beispielsweise „@token“ aus, wenn US in der Datendatei gespeichert werden soll.

  8. Klicken Sie auf OK.

    Wenn eine Bindung festgelegt ist, wird ein kleines Verknüpfungssymbol mit der aktiven Beschriftung angezeigt.

So erstellen Sie ein Skript zum dynamischen Ausfüllen eines zweiten Feldes nach dem ersten Feld

  1. Wählen Sie bei aktivierter Dropdown-Liste in der Liste „Anzeigen“ des Skript-Editors den Eintrag „change“ aus.

  2. Wählen Sie in der Liste „Sprache“ den Eintrag „JavaScript“ aus.

  3. Geben Sie folgendes Skript ein:

    var tempString = "xfa.record." + this.boundItem(xfa.event.newText); 
    var oItems = xfa.resolveNode(tempString); 
    var nItemsLength = oItems.nodes.length; 
     
    DropDownList2.clearItems(); 
     
    for (var nItemCount = 0; nItemCount < nItemsLength; nItemCount++) { 
          DropDownList2.addItem(oItems.nodes.item(nItemCount).value); 
    }

    Skript

    Beschreibung

    tempString

    Gibt die Zeichenfolge für „xfa.record“ an. Wird beispielsweise „United States“ ausgewählt, wird „xfa.record“ zu „xfa.record.US“.

    this.boundItem

    Eine Listenobjektmethode, die den benutzerfreundlichen Namen in die Wert- oder Token-Zeichenfolge übersetzt. Wird beispielsweise United States ausgewählt, so wird US übermittelt.

    xfa.event.newText

    Gibt den neuen Textinhalt des Change-Ereignisses für die Liste zurück. Wird beispielsweise United States ausgewählt, so wird United States übermittelt.

    var nItemsLength = oItems.nodes.length;

    Fragt die Anzahl der Child-Elemente von <US> (oder <SRV>) ab, also die Anzahl der untergeordneten Elemente (<item>-Children).

    DropDownList2.clearItems();

    Entfernt alle vorhandenen Elemente aus der zweiten Dropdown-Liste.

    for (var nItemCount = 0; nItemCount < nItemsLength; nItemCount++)

    Fragt jedes <item>-Child von <US> (bzw. <SRV>) ab.

    DropDownList2.addItem(oItems.nodes.item(nItemCount).value);

    Ruft den Textwert des <item>-Childs ab, wie angezeigt durch den nItemCount-Index, und fügt diesen Wert als neues Element in die zweite Dropdown-Liste ein.

So richten Sie das zweite Feld ein

  1. Klicken Sie in der Palette „Objektbibliothek“ auf die Kategorie „Standard“ und ziehen Sie eine Dropdown-Liste oder ein Listenfeld auf den Formularentwurf.

    Fügen Sie beispielsweise eine Dropdown-Liste ein.

  2. (Optional) Klicken Sie in der Palette „Objekt“ auf die Registerkarte „Feld“ und geben Sie im Feld „Beschriftung“ eine Beschriftung für das Objekt ein.

    Geben Sie beispielsweise Staaten/Bezirke ein.

  3. Binden Sie das Feld an die Datenquelle.

    Binden Sie beispielsweise die Node „state“ an die Dropdown-Liste „Staaten/Bezirke“.

  4. Zeigen Sie auf der Registerkarte „PDF-Vorschau“ eine Vorschau des Formulars an.