Adobe rekommenderar att man använder modern och utbyggbar datainhämtning Kärnkomponenter for skapa ny Adaptive Forms eller lägga till adaptiv Forms på AEM Sites-sidor. De här komponenterna utgör ett betydande framsteg när det gäller att skapa adaptiva Forms-filer, vilket ger imponerande användarupplevelser. I den här artikeln beskrivs det äldre sättet att skapa Adaptiv Forms med baskomponenter.
Version | Artikellänk |
---|---|
AEM 6.5 | Klicka här |
AEM as a Cloud Service | Den här artikeln |
Du kan förifylla fälten i ett adaptivt formulär med befintliga data. När en användare öppnar ett formulär är värdena för dessa fält förifyllda. Om du vill förifylla data i ett adaptivt formulär gör du användardata tillgängliga som förifylld XML/JSON i det format som följer datastrukturen för förifyllnad i Adaptive Forms.
Ett adaptivt formulär kan innehålla en blandning av bundna och obundna fält. Bundna fält är fält som dras från fliken Innehållssökare och som inte är tomma bindRef
egenskapsvärde i dialogrutan för fältredigering. Obundna fält dras direkt från komponentwebbläsaren i Sidekick och har ett tomt värde bindRef
värde.
Du kan förifylla både bundna och obundna fält i ett adaptivt formulär. Prefill-data innehåller avsnitten afBoundData och afUnBoundData för att förifylla både bundna och obundna fält i ett adaptivt formulär. The afBoundData
-avsnittet innehåller förifyllda data för bundna fält och paneler. Dessa data måste vara kompatibla med det associerade formulärmodellschemat:
<?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"
}
}
}
För bundna fält med samma bindref-fält eller obundna fält med samma namn fylls data som anges i XML-taggen eller JSON-objektet i alla fält. Två fält i ett formulär mappas till exempel till namnet textbox
i förifyllda data. Om det första textrutefältet innehåller"A" fylls"A" automatiskt i den andra textrutan under körningen. Denna länkning kallas live-länkning av fält i adaptiva formulär.
Strukturen för förifylld XML och inskickad XML för XFA-baserad Adaptive Forms är följande:
XML-struktur för förifyllning: XML-förifyllnad för XFA-baserad adaptiv form måste vara kompatibel med XFA-formulärmallens dataschema. Om du vill förifylla obundna fält omsluter du XML-strukturen för förifyllning i /afData/afBoundData
-tagg.
Skickad XML-struktur: När ingen förifylld XML används innehåller den skickade XML-filen data för både bundna och obundna fält i afData
wrapper-tagg. Om du använder en XML-förifyllning har den skickade XML-filen samma struktur som XML-förifyllningen. Om XML-förifyllningen börjar med afData
-taggen har XML-utdata också samma format. Om förifyllnings-XML inte har afData/afBoundData
wrapper och i stället startar direkt från schemats rottagg som employeeData
börjar den inskickade XML-filen också med employeeData
-tagg.
Prefill-Submit-Data-ContentPackage.zip
Hämta fil
Exempel som innehåller förifyllda data och inlämnade data
Strukturen för förifylld XML och inskickad XML för Adaptive Forms baserat på XML-schema är följande:
afData
wrapper-tagg. Om XML-förifyllning används har den skickade XML-filen samma struktur som XML-förifyllningen. Om XML-förifyllningen börjar med afData
-taggen har XML-utdata samma format. Om förifyllnings-XML inte har afData/afBoundData
wrapper och i stället börja direkt från schemats rottagg som employeeData
börjar den inskickade XML-filen också med employeeData
-tagg.<?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>
För fält vars modell är XML-schema är data förifyllda i afBoundData
-taggen som i XML-exemplet nedan. Den kan användas för att förifylla ett adaptivt formulär med ett eller flera obundna textfält.
<?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>
Du bör inte använda obundna fält i bundna paneler (paneler med icke-tomma paneler) bindRef
som har skapats genom att dra komponenter från Sidekick eller fliken Datakällor). Det kan orsaka dataförlust för dessa obundna fält. Vi rekommenderar dessutom att fältnamnen är unika i hela formuläret, särskilt för obundna fält.
<?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 Adaptiv Forms baserat på JSON-schema beskrivs strukturen för förifyll JSON och skickad JSON nedan. Mer information finns i Skapa adaptiv Forms med 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"
}
}
}
}
}
För fält som använder JSON-schemamodell är data förifyllda i afBoundData-objektet, vilket visas i exemplet på JSON nedan. Den kan användas för att förifylla ett adaptivt formulär med ett eller flera obundna textfält. Nedan visas ett exempel på data med afData/afBoundData
wrapper:
{
"afData": {
"afUnboundData": {
"data": { "textbox": "Ignorance is bliss :) " }
},
"afBoundData": {
"data": { {
"user": {
"address": {
"city": "Noida",
"country": "India"
}}}}}}}
Nedan visas ett exempel utan afData/afBoundData
wrapper:
{
"user": {
"address": {
"city": "Noida",
"country": "India"
}
}
}
Använda obundna fält i bundna paneler (paneler med icke-tomma bindRef som har skapats genom att dra komponenter från Sidekick eller fliken Datakällor) not rekommenderas eftersom det kan orsaka dataförlust i obundna fält. Du bör ha unika fältnamn i hela formuläret, särskilt för obundna fält.
För Adaptive Forms utan någon formulärmodell finns data för alla fält under <data>
tagg för <afUnboundData> tag
.
Observera även följande:
XML-taggarna för användardata som skickas för olika fält genereras med fältnamnet. Därför måste fältnamnen vara unika.
<?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>
Använd alloweddataFileLocations
egenskapen för Standardkonfiguration för förifyllningstjänst för att ange platsen för datafilerna eller en region (reguljärt uttryck) för datafilernas platser.
I följande JSON-fil visas ett exempel:
{
"alloweddataFileLocations": "`file:///C:/Users/public/Document/Prefill/.*`"
}
Så här anger du värden för en konfiguration: Generera OSGi-konfigurationer med AEM SDK och distribuera konfigurationen till din Cloud Service.
Vanligtvis skapas bundna (formulärschema) och obundna fält i samma adaptiva form, men följande undantag görs om bindningen är repeterbar:
Som tumregel ska du inte blanda bundna och obundna fält om de korsas i data som fylls i av användaren i obundna fält. Om det är möjligt bör du ändra schemat eller XFA-formulärmallen och lägga till en post för obundna fält, så att den också blir bunden och dess data är tillgängliga som andra fält i skickade data.
Adaptiv Forms kan förifyllas med användardata i förifyllda dataformat via följande protokoll när den konfigureras med giltig regex:
http
https://`servername`/content/forms/af/xml.html?wcmmode=disabled&dataRef=crx:///tmp/fd/af/myassets/sample.xml
Den angivna noden måste ha en egenskap som kallas jcr:data
och lagra data.
https://`servername`/content/forms/af/someAF.html?wcmmode=disabled&dataRef=file:///C:/Users/form-user/Downloads/somesamplexml.xml
Den refererade filen måste finnas på samma server.
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]
Det går inte att skicka autentiseringsparametrar.
Du kan också ange data
attribute in slingRequest
, där data
-attribut är en sträng som innehåller XML eller JSON, vilket visas i exempelkoden nedan (Exempel är 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);
%>
Du kan skriva en enkel XML- eller JSON-sträng som innehåller alla data och ange den i slingRequest. Detta kan enkelt göras i JSP-återgivningsfilen för alla komponenter som du vill inkludera på sidan där du kan ange dataattributet slingRequest.
Om du till exempel vill ha en särskild design för sidan med en viss typ av sidhuvud. För att uppnå detta kan du skriva en egen header.jsp
som du kan ta med i sidkomponenten och ange data
-attribut.
Ett annat bra exempel är ett användningsexempel där du vill fylla i data i förväg via sociala konton som Facebook, Twitter eller LinkedIn. I det här fallet kan du inkludera en enkel JSP i header.jsp
, som hämtar data från användarkontot och ställer in data-parametern.
prefill-page component.zip
Hämta fil
Exempel på prefill.jsp i sidkomponent
Du kan använda en anpassad förifyllningstjänst för scenarierna, där du hela tiden läser data från en fördefinierad källa. Förifyllningstjänsten läser data från definierade datakällor och fyller i fälten i det adaptiva formuläret i förväg med innehållet i datafilen för förifyllnad. Det hjälper dig även att permanent koppla förfyllda data till ett adaptivt formulär.
Förifyllningstjänsten är en OSGi-tjänst och paketeras via OSGi-paketet. Du skapar OSGi-paketet, överför det och installerar det i AEM Forms paket. Innan du börjar skapa paketet:
Hämta mallpaketet
Placera datafilen (förifyllda data) i crx-databasen. Du kan placera filen på valfri plats i mappen \contents i crx-database.
Mallpaketet (exempelpaketet för förifyllningstjänsten) innehåller exempel på implementering av AEM Forms förifyllningstjänst. Öppna mallpaketet i en kodredigerare. Öppna till exempel mallprojektet i Eclipse för redigering. När du har öppnat mallpaketet i en kodredigerare gör du följande för att skapa tjänsten.
Öppna src\main\java\com\adobe\test\Prefill.java för redigering.
I koden anger du värdet:
nodePath:
Nodsökvägsvariabeln som pekar på platsen för crx-databasen innehåller sökvägen till datafilen (prefill). Till exempel /content/prefilldata.xmllabel:
Etikettparametern anger tjänstens visningsnamn. Exempel: Standardtjänst för förifyllnadSpara och stäng Prefill.java
-fil.
Lägg till AEM Forms Client SDK
till byggsökvägen för standardprojektet.
Kompilera projektet och skapa .jar-filen för paketet.
Om du vill starta förifyllningstjänsten överför du JAR-filen till AEM Forms Webbkonsol och aktivera tjänsten. Nu börjar tjänsten visas i Adaptive Forms Editor. Så här associerar du en förifyllningstjänst till ett adaptivt formulär: