Adobe empfiehlt die Verwendung der modernen und erweiterbaren Datenerfassung Kernkomponenten für Erstellen neuer adaptiver Forms oder Hinzufügen von Adaptive Forms zu AEM Sites-Seiten. Diese Komponenten stellen einen bedeutenden Fortschritt bei der Erstellung adaptiver Forms dar und sorgen für beeindruckende Benutzererlebnisse. In diesem Artikel wird der ältere Ansatz zum Erstellen von Adaptive Forms mithilfe von Foundation-Komponenten beschrieben.
Version | Artikel-Link |
---|---|
AEM 6.5 | Hier klicken |
AEM as a Cloud Service | Dieser Artikel |
Sie können die Felder eines adaptiven Formulars mit vorhandenen Daten vorbefüllen. Wenn ein Benutzer ein Formular öffnet, werden die Werte für diese Felder vorbefüllt. Um Daten in einem adaptiven Formular vorzubefüllen, stellen Sie die Benutzerdaten als vorbefüllte XML/JSON in dem Format bereit, das der Datenstruktur zum Vorbefüllen von adaptiven Formularen entspricht.
Ein adaptives Formular kann eine Mischung aus gebundenen und ungebundenen Feldern enthalten. Gebundene Felder sind diejenigen, die aus der Registerkarte für die Inhaltssuche gezogen werden und einen nicht leeren Wert für die bindRef
-Eigenschaft im Dialogfeld zum Bearbeiten von Feldern enthalten. Ungebundene Felder werden direkt aus dem Sidekick gezogen und haben einen leeren bindRef
-Wert.
Sie können sowohl gebundene als auch ungebundene Felder eines adaptiven Formulars vorbefüllen. Die Vorbefüllungsdaten enthalten die Abschnitte „afBoundData“ und „afUnBoundData“, um sowohl gebundene als auch ungebundene Felder eines adaptiven Formulars vorzubefüllen. Der Abschnitt afBoundData
enthält die Daten zum Vorbefüllen für gebundene Felder und Bereiche. Diese Daten müssen mit dem verknüpften Formularmodellschema konform sein:
<?xml version="1.0" encoding="UTF-8"?>
<afData>
<afBoundData>
<employeeData>
.
</employeeData>
</afBoundData>
<afUnboundData>
<data>
<textbox>Hello World</textbox>
.
.
<numericbox>12</numericbox>
.
.
</data>
</afUnboundData>
</afData>
{
"afBoundData": {
"employeeData": { }
},
"afUnboundData": {
"data": {
"textbox": "Hello World",
"numericbox": "12"
}
}
}
Im Fall von gebundenen Feldern mit demselben „bindref“ oder ungebundenen Feldern mit demselben Namen, werden die im XML-Tag oder JSON-Objekt angegebenen Daten in alle Felder eingefügt. Beispiel: Zwei Felder in einem Formular sind dem Namen textbox
in den Vorbefüllungsdaten zugeordnet. Wenn das erste Feld für das Textfeld „A“ enthält, wird zur Laufzeit im zweiten Textfeld automatisch „A“ ausgefüllt. Diese Verknüpfung wird als Live-Verknüpfung von Feldern adaptiver Formulare bezeichnet.
Die Struktur von XML zum Vorbefüllen und übermittelter XML für XFA-basierte adaptive Formulare ist:
XML-Struktur zum Vorbefüllen: Die XML zum Vorbefüllen für XFA-basierte adaptive Formulare muss mit dem Datenschema der XFA-Formularvorlage konform sein. Um ungebundene Felder vorzubefüllen, umschließen Sie die XML-Struktur zum Vorbefüllen in das Tag /afData/afBoundData
.
Übermittelte XML-Struktur: Wenn keine XML zum Vorbefüllen verwendet wird, enthält die übermittelte XML Daten für gebundene und ungebundene Felder im afData
-Wrapper-Tag. Wenn XML zum Vorbefüllen verwendet wird, enthält die übermittelte XML dieselbe Struktur wie die XML zum Vorbefüllen. Wenn die XML zum Vorbefüllen mit dem afData
-Stamm-Tag beginnt, hat die Ausgabe-XML ebenfalls dasselbe Format. Wenn die XML zum Vorbefüllen den afData/afBoundData
-Wrapper nicht enthält und stattdessen direkt aus dem Schema-Root-Tag beginnt wie employeeData
, beginnt die übermittelte XML ebenfalls mit dem employeeData
-Tag.
Prefill-Submit-Data-ContentPackage.zip
Datei laden
Beispiel mit vorbefüllten und übermittelten Daten
Die Struktur von XML zum Vorbefüllen und von übermittelter XML für adaptive Formulare, die auf XML-Schemas basieren, ist wie folgt:
afData
-Wrapper-Tag. Wenn die XML zum Vorbefüllen verwendet wird, enthält die übermittelte XML dieselbe Struktur wie die XML zum Vorbefüllen. Wenn die XML zum Vorbefüllen mit dem afData
-Stamm-Tag beginnt, hat die Ausgabe-XML dasselbe Format. Wenn die XML zum Vorbefüllen nicht den afData/afBoundData
-Wrapper aufweist und stattdessen direkt aus dem Schemastamm-Tag beginnt wie employeeData
, beginnt die übermittelte XML ebenfalls mit dem employeeData
-Tag.<?xml version="1.0" encoding="utf-8" ?>
<xs:schema targetNamespace="https://adobe.com/sample.xsd"
xmlns="https://adobe.com/sample.xsd"
xmlns:xs="https://www.w3.org/2001/XMLSchema">
<xs:element name="sample" type="SampleType"/>
<xs:complexType name="SampleType">
<xs:sequence>
<xs:element name="noOfProjectsAssigned" type="xs:string"/>
</xs:sequence>
</xs:complexType>
</xs:schema>
Bei Feldern, deren Modell das XML-Schema ist, werden die Daten im afBoundData
-Tag wie im XML-Beispielschema unten dargestellt vorbefüllt. Es kann zum Vorbefüllen eines adaptiven Formulars mit mindestens einem ungebundenen Textfeld verwendet werden.
<?xml version="1.0" encoding="UTF-8"?><afData>
<afUnboundData>
<data>
<textbox>Ignorance is bliss :) </textbox>
</data>
</afUnboundData>
<afBoundData>
<data>
<noOfProjectsAssigned>twelve</noOfProjectsAssigned>
</data>
</afBoundData>
</afData>
Es wird empfohlen, keine ungebundenen Felder in gebundenen Bereichen zu verwenden (Bereiche mit nicht leerem bindRef
-Wert, der durch Ziehen von Komponenten aus dem Sidekick oder der Registerkarte „Datenquellenr“ erstellt wurde). Dies kann zu Datenverlust bei diesen ungebundenen Feldern führen. Darüber hinaus wird empfohlen, dass die Namen der Felder im gesamten Formular eindeutig sind, insbesondere für ungebundene Felder.
<?xml version="1.0" encoding="UTF-8"?><config>
<assignmentDetails descriptionOfAssignment="Some Science Project" durationOfAssignment="34" financeRelatedProject="1" name="Lisa" numberOfMentees="1"/>
<assignmentDetails descriptionOfAssignment="Kidding, right?" durationOfAssignment="4" financeRelatedProject="1" name="House" numberOfMentees="3"/>
</config>
Für adaptive Formulare, die auf dem JSON-Schema basieren, wird im Folgenden die Struktur von JSON zum Vorbefüllen und übermitteltem JSON beschrieben. Weitere Informationen finden Sie unter Erstellen von adaptiven Formularen mit dem JSON-Schema.
{
"id": "https://some.site.somewhere/entry-schema#",
"$schema": "https://json-schema.org/draft-04/schema#",
"type": "object",
"properties": {
"address": {
"type": "object",
"properties": {
"name": {
"type": "string"
},
"age": {
"type": "integer"
}
}
}
}
}
Bei Feldern, die das JSON-Schemamodell verwenden, sind die Daten im „afBoundData“-Objekt bereits vorbefüllt, wie im folgenden Beispiel-JSON gezeigt. Es kann zum Vorbefüllen eines adaptiven Formulars mit mindestens einem ungebundenen Textfeld verwendet werden. Im Folgenden finden Sie ein Beispiel für die Daten mit afData/afBoundData
-Wrapper:
{
"afData": {
"afUnboundData": {
"data": { "textbox": "Ignorance is bliss :) " }
},
"afBoundData": {
"data": { {
"user": {
"address": {
"city": "Noida",
"country": "India"
}}}}}}}
Im Folgenden finden Sie ein Beispiel ohne afData/afBoundData
-Wrapper:
{
"user": {
"address": {
"city": "Noida",
"country": "India"
}
}
}
Die Verwendung von ungebundenen Feldern in gebundenen Bedienfeldern (Bedienfelder mit nicht leerer bindRef, die durch Ziehen von Komponenten aus der Registerkarte „Sidekick“ oder „Datenquellen“ erstellt wurden) wird nicht empfohlen, da dies zum Verlust von Daten der ungebundenen Felder führen kann. Es wird empfohlen, eindeutige Feldnamen im gesamten Formular zu verwenden, insbesondere für ungebundene Felder.
Bei adaptiven Formularen ohne Formularmodell befinden sich die Daten für alle Felder unter dem <data>
-Tag von <afUnboundData> tag
.
Beachten Sie außerdem Folgendes:
Die XML-Tags für die Benutzerdaten, die für verschiedene Felder übermittelt werden, werden mit dem Namen der Felder generiert. Daher müssen die Feldnamen eindeutig sein.
<?xml version="1.0" encoding="UTF-8"?><afData>
<afUnboundData>
<data>
<radiobutton>2</radiobutton>
<repeatable_panel_no_form_model>
<numericbox>12</numericbox>
</repeatable_panel_no_form_model>
<repeatable_panel_no_form_model>
<numericbox>21</numericbox>
</repeatable_panel_no_form_model>
<checkbox>2</checkbox>
<textbox>Nopes</textbox>
</data>
</afUnboundData>
<afBoundData/>
</afData>
Verwenden Sie die alloweddataFileLocations
-Eigenschaft der Standardkonfiguration für den Vorbefüllungs-Service, um den Speicherort der Datendateien oder eines Regex (regulärer Ausdruck) für die Datendateispeicherorte festzulegen.
Folgende JSON-Datei zeigt ein Beispiel:
{
"alloweddataFileLocations": "`file:///C:/Users/public/Document/Prefill/.*`"
}
Um Konfigurationswerte festzulegen generieren Sie OSGi-Konfigurationen mit dem AEM-SDK und stellen Sie die Konfiguration in Ihrer Cloud Service-Instanz bereit.
Im Allgemeinen werden gebundene (Formularschema) und ungebundene Felder im selben adaptiven Formular erstellt. Im Folgenden werden allerdings einige Ausnahmen genannt, die gelten, falls die gebundenen Bereiche wiederholbar sind:
Mischen Sie grundsätzlich keine gebundenen und ungebundenen Felder, wenn sie sich in vom Benutzer in ungebundenen Feldern ausgefüllten Daten überschneiden. Wenn möglich, sollten Sie das XML-Schema oder die XFA-Formularvorlage ändern und einen Eintrag für ungebundene Felder hinzufügen, sodass diese auch gebunden werden und ihre Daten wie andere Felder in den übermittelten Daten verfügbar sind.
Adaptive Formulare können mit Benutzerdaten im Vorbefüllungsdatenformat über folgende Protokolle vorbefüllt werden, wenn sie mit gültigem Regex konfiguriert sind:
http
https://`servername`/content/forms/af/xml.html?wcmmode=disabled&dataRef=crx:///tmp/fd/af/myassets/sample.xml
Der angegebene Knoten muss die Eigenschaft jcr:data
aufweisen und die Daten enthalten.
https://`servername`/content/forms/af/someAF.html?wcmmode=disabled&dataRef=file:///C:/Users/form-user/Downloads/somesamplexml.xml
Die referenzierte Datei muss sich auf demselben Server befinden.
https://`servername`/content/forms/af/xml.html?wcmmode=disabled&dataRef=https://servername/somesamplexmlfile.xml
https://`servername`/content/forms/af/abc.html?wcmmode=disabled&dataRef=service://[SERVICE_NAME]/[IDENTIFIER]
Die Übergabe von Authentifizierungsparametern wird nicht unterstützt.
Sie können auch das data
-Attribut in slingRequest
festlegen, wo das data
-Attribut eine Zeichenfolge mit XML oder JSON ist, wie in folgendem Beispiel-Code dargestellt (Beispiel ist für XML):
<%
String dataXML="<afData>" +
"<afUnboundData>" +
"<data>" +
"<first_name>"+ "Tyler" + "</first_name>" +
"<last_name>"+ "Durden " + "</last_name>" +
"<gender>"+ "Male" + "</gender>" +
"<location>"+ "Texas" + "</location>" +
"</data>" +
"</afUnboundData>" +
"</afData>";
slingRequest.setAttribute("data", dataXML);
%>
Sie können eine einfache XML- oder JSON-Zeichenfolge schreiben, die alle Ihre Daten enthält, und sie in slingRequest festlegen. Sie können dies einfach in der Renderer-JSP für jede Komponente durchführen, die Sie auf der Seite aufnehmen möchten, auf der Sie das „slingRequest“-Datenattribut festlegen können.
Beispiel: Sie wünschen ein spezifisches Design für Ihre Seite mit einem bestimmten Kopfzeilentyp. Um dies zu erreichen, können Sie eine eigene header.jsp
schreiben, die Sie in Ihre Seitenkomponente aufnehmen, und das data
-Attribut festlegen.
Ein weiteres gutes Beispiel ist ein Szenario, bei dem Sie Daten bei der Anmeldung über Social Madia-Konten wie Facebook, Twitter oder LinkedIn vorbefüllen möchten. In diesem Fall können Sie eine einfache JSP in header.jsp
aufnehmen, die Daten aus dem Benutzerkonto abruft und den Datenparameter festlegt.
prefill-page component.zip
Datei abrufen
Beispieldatei „prefill.jsp“ in der Seitenkomponente
Sie können den benutzerdefinierten Vorbefüllungs-Service für die Szenarien verwenden, in denen Sie permanent Daten aus einer vordefinierten Quelle lesen. Der Vorbefüllungs-Service liest Daten aus definierten Datenquellen und befüllt die Felder des adaptiven Formulars mit dem Inhalt der Vorbefüllungsdatendatei vor. Außerdem können Sie vorbefüllte Daten dauerhaft mit einem adaptiven Formular verknüpfen.
Der Vorbefüllungs-Service ist ein OSGi-Service und wird über das OSGi-Paket bereitgestellt. Sie erstellen das OSGi-Bundle, laden es hoch und installieren es in die AEM Forms-Pakete. Bevor Sie mit der Erstellung des Pakets beginnen:
Laden Sie das AEM Forms Client SDK herunter
Laden Sie das Textbausteinpaket herunter
Platzieren Sie die Datendatei (Vorbefüllungsdaten) in das CRX-Repository. Sie können die Datei an einem beliebigen Ort in den \contents des CRX-Repositorys platzieren.
Das Textbausteinpaket (Vorbefüllungs-Service-Beispielpaket) enthält folgende Beispielimplementierung des AEM Forms-Vorbefüllungs-Service. Öffnen Sie das Textbausteinpaket in einem Code-Editor. Öffnen Sie beispielsweise das Textbausteinprojekt zur Bearbeitung in Eclipse. Nachdem Sie das Textbausteinpaket in einem Code-Editor geöffnet haben, führen Sie folgende Schritte aus, um den Service zu erstellen.
Öffnen Sie die Datei „src\main\java\com\adobe\test\Prefill.java“ zur Bearbeitung.
Legen Sie im Code folgenden Wert fest:
nodePath:
Die Knotenpfadvariable, die auf den CRX-Repository-Speicherort verweist, enthält den Pfad der Daten-(Vorbefüllungs)-Datei. Beispiel: /content/prefilldata.xmllabel:
Der Parameter „label“ gibt den Anzeigenamen des Service an. Beispiel: Standardvorbefüllungs-ServiceSpeichern und schließen Sie die Datei Prefill.java
.
Fügen Sie das Paket AEM Forms Client SDK
zum Erstellungspfad des Textbausteinprojektes hinzu.
Kompilieren Sie das Projekt und erstellen Sie die .jar-Datei für das Paket.
Um den Vorbefüllungs-Service zu starten, laden Sie die JAR-Datei in die AEM Forms-Web-Konsole hoch und aktivieren Sie den Service. Jetzt wird der Service im Editor für adaptive Formulare angezeigt. Verknüpfen eines Vorbefüllungs-Service mit einem adaptiven Formular: