Suche // Search:

31.01.2011

Formulare durch Anhänge vorbefüllen
//
Populate forms from attachments

Haben Sie sich nicht schon mal gewünscht, Formulare einfach durch eine externe Datei zu aktualisieren, anstatt sie bei jeder Kleinigkeit wieder in Designer öffnen zu müssen?
Das ist sogar möglich.
Sie können Formularobjekte wie z.B. Texte und Textfelder zur Laufzeit verändern und z.B. durch eine angehängte XML-Datei vorbefüllen zu lassen.
Diese Methode ist beispielsweise praktisch, wenn Sie nur ihre AGB's im Formular aktualisieren wollen oder sie einen Fragebogen haben, bei dem Sie die Fragen je nach Abteilung nur etwas variieren müssen.

Dieses Beispiel verwendet dazu eine relativ kompakte JavaScript-Funktion in einen Skriptobjekt, dass beim docReady:Event ausgeführt wird.
Das Skript prüft, ob Anhänge vorhanden sind, und wenn ja, ob ein Anhang einen ganz bestimmten Namen hat.
Dieser Anhang ist dann die Quelldatei, aus der die XML-Daten herausgelesen und vorbefüllt werden.

AKTUALISIERUNG: Ich habe mein Bespiel etwas ergänzt. Sie könne jetzt auch Dropdown-Listen und Listboxen aus den Anhängen heraus vorbefüllen.


Have you ever thought of updating your existing forms through an external file instead of opening them each time again in Designer?
This is even possible.
You can manipulate form objects such as a text or text field at runtime and populate them from an attached XML-file.
This method is handy for example if you only need to update the GTC in your form or you have a questionnaire with slight varying questions for each division.

This example uses a relatively short JavaScript function in a script object, which is executed on the docReady:Event.
The script determines if there are files attached to the form and if one has a specific file name.
This specific file is the source file where the XML data is extracted from and populated.

UPDATE: My sample got a bit more complemented. Now you also can populate drop down lists and list boxes from the attachments.


JavaScript-Funktion
//
JavaScript function
form1.#variables[0].Populate - (JavaScript, client)
 
function Presets () {
     var oDoc = event.target,
  oAttachment = oDoc.dataObjects,
  oAttachmentName,
  oAttachmentData,
  oAttachmentString,
  oXMLData;        

 if (oAttachment !== null) {
  for (var i = 0; i < oAttachment.length; i += 1) {
   oAttachmentName = oAttachment[i].path; 
   if (oAttachmentName == "LCB_FormPresets.xml") {
    oAttachmentData = oDoc.getDataObjectContents(oAttachmentName); 
    oAttachmentString = util.stringFromStream(oAttachmentData);
    oXMLData = XMLData.parse(oAttachmentString, true);

    xfa.form.form1.pageSet.Master.Headline.value.text.value = oXMLData.Preset01.value;
    xfa.form.form1.Page.Name.rawValue = oXMLData.Preset02.value; 
    xfa.form.form1.Page.Address.rawValue = oXMLData.Preset03.value; 
    xfa.form.form1.Page.Mail.rawValue = oXMLData.Preset04.value; 
    xfa.form.form1.Page.Phone.caption.value.text.value = oXMLData.Preset05.value; 
    xfa.form.form1.Page.Fax.caption.value.text.value = oXMLData.Preset06.value; 
    xfa.form.form1.Page.Mail.caption.value.text.value = oXMLData.Preset07.value;
    xfa.form.form1.Page.Explaination.value.text.value = oXMLData.Preset08.value;  
    xfa.form.form1.Page.Explaination.font.fill.color.value = oXMLData.Preset09.value;  
    
    var DDLValues = oXMLData.Preset10.value.split(", ");
       for (var d = 0; d < DDLValues.length; d += 1) {
         xfa.form.form1.Page.DropDown.addItem(DDLValues[d]);
         }
         
        var LBValues = oXMLData.Preset11.value.split(", ");
       for (var l = 0; l < LBValues.length; l += 1) {
         xfa.form.form1.Page.ListBox.addItem(LBValues[l]);
         }
   }
  }
 }
}
Schritt 1 – Leeres Formulare mit Platzhalter-Texten oder leeren Feldern
//
Step 1 – Empty form with placeholder texts or empty fields


Schritt 2 – XML-Datei mit den gewünschten Daten als Anhang hinzufügen
//
Step 2 – Attach XML-file with the desired data

Schritt 3 – Automatisch vorbefülltes Formular nach dem Schließen und Öffnen
//
Step 3 – Automatically populated form after closing and opening


Beispielformular
//
Sample form
https://documentcloud.adobe.com/link/track?uri=urn:aaid:scds:US:e3f5ce39-e8f7-4af6-943b-069e2071d223

2 Kommentare:

  1. This is very useful! Is it possible to write values back to the attached XML file?

    AntwortenLöschen
  2. Hi Scott,

    you can do this, but only with Acrobat.
    An example can be found in the JS API Reference Manual in the "setDataObjectContents" description on Page 341.

    A PDF versio is included in the SDK you can download here:
    http://www.adobe.com/devnet/acrobat/sdk/eula.html

    AntwortenLöschen