Förifyll adaptiva formulärfält

Introduktion

Du kan förifylla fälten i ett anpassat 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 anpassat formulär gör du användardata tillgängliga som förifylld XML/JSON i det format som följer datastrukturen för förifyllda formulär.

Struktur för förifyllda data

Ett anpassningsbart formulär kan ha en blandning av bundna och obundna fält. Bundna fält är fält som dras från fliken Innehållssökare och innehåller icke-tomma bindRef-egenskapsvärden i dialogrutan för fältredigering. Obundna fält dras direkt från komponentwebbläsaren i Sidespark och har ett tomt bindRef-värde.

Du kan förifylla både bundna och obundna fält i ett anpassat 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. Avsnittet afBoundData innehåller förifyllda data för bundna fält och paneler. Dessa data måste vara kompatibla med det associerade formulärmodellschemat:

  • För adaptiva formulär som använder XFA-formulärmallen använder du den förifyllda XML-koden som är kompatibel med XFA-mallens dataschema.
  • För adaptiva formulär som använder XML-schema använder du den förifyllda XML-koden som är kompatibel med XML-schemastrukturen.
  • För adaptiva formulär som använder JSON-schema ska du använda JSON-funktionen för förifyllnad som är kompatibel med JSON-schemat.
  • För anpassningsbara formulär med FDM-schema använder du JSON-funktionen för förifyllnad som är kompatibel med FDM-schemat.
  • Det finns inga bundna data för adaptiva formulär med ingen formulärmodell. Varje fält är ett obundet fält och är förifyllt med den obundna XML-koden.

Exempel på XML-struktur för förifyllning

<?xml version="1.0" encoding="UTF-8"?>
<afData>
  <afBoundData>
     <employeeData>
        .
     </employeeData>
  </afBoundData>

  <afUnboundData>
    <data>
      <textbox>Hello World</textbox>
         .
         .
      <numericbox>12</numericbox>
         .
         .
    </data>
  </afUnboundData>
</afData>

Exempel på JSON-struktur för förifyllning

{
   "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 anpassningsbara formulärfält.

Anpassat formulär med XFA-formulärmall

Strukturen för förifylld XML och inskickad XML för XFA-baserade adaptiva formulär är följande:

  • XML-struktur för förifyllning: XML-förifyllnad för XFA-baserade adaptiva formulär måste vara kompatibelt med XFA-formulärmallens dataschema. Om du vill förifylla obundna fält omsluter du XML-strukturen för förifyllning till /afData/afBoundData-taggen.

  • 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-taggen. 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 rottaggen afData har XML-utdata också samma format. Om XML-förifyllningen inte har afData/afBoundDatawrapper och i stället startar direkt från schemarottaggen som employeeData, börjar den skickade XML-filen också med taggen employeeData.

Prefill-Submit-Data-ContentPackage.zip

Hämta
FileSample som innehåller förifyllda data och skickade data

XML-schemabaserade adaptiva formulär 

Strukturen för förifylld XML och inskickad XML för adaptiva formulär baserade på XML-schema är följande:

  • XML-struktur för förifyllning: XML-förifyllningen måste vara kompatibel med tillhörande XML-schema. Om du vill förifylla obundna fält omsluter du XML-strukturen för förifyllning i taggen /afData/afBoundData.
  • Skickad XML-struktur: om 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-taggen. Om XML-förifyllning används har den skickade XML-filen samma struktur som XML-förifyllningen. Om XML-förifyllningen börjar med rottaggen afData har XML-utdata samma format. Om XML-förifyllningen inte har afData/afBoundData-wrapper och i stället startar direkt från schemarottaggen som employeeData, börjar den skickade XML-filen också med taggen employeeData.
<?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 taggen afBoundData, vilket visas i exemplet på XML nedan. Den kan användas för att förifylla ett anpassningsbara 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>
OBSERVERA

Vi rekommenderar att du inte använder obundna fält i bundna paneler (paneler med icke-tomma bindRef som har skapats genom att dra komponenter från Sidekick- eller Datakällor-fliken). 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.

Ett exempel utan afData och afBoundData-wrapper

<?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>

JSON schemabaserade adaptiva formulär

För adaptiva formulär baserade på JSON-schema beskrivs strukturen för JSON-förifyllnad och skickad JSON nedan. Mer information finns i Skapa adaptiva formulär med JSON-schema.

  • JSON-struktur för förifyllning: JSON för förifyllning måste vara kompatibel med det associerade JSON-schemat. Alternativt kan den kapslas in i /afData/afBoundData-objektet om du även vill förifylla obundna fält.
  • Skickad JSON-struktur: Om ingen JSON för förifyllnad används innehåller den skickade JSON data för både bundna och obundna fält i afData-wrapper-taggen. Om JSON för förifyllning används har den inskickade JSON samma struktur som JSON för förifyllnad. Om JSON för förifyllning börjar med afData-rotobjektet har utdata-JSON samma format. Om JSON-funktionen för förifyllning inte har wrapper afData/afBoundData och i stället startar direkt från schemarotobjektet, till exempel användaren, börjar den skickade JSON-filen också med användarobjektet.
{
    "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 anpassningsbara 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"
}}}
OBSERVERA

Användning av obundna fält i bundna paneler (paneler med icke-tomma bindRef som har skapats genom att dra komponenter från fliken Sidspark eller Datakällor) är inte som rekommenderas eftersom det kan orsaka dataförlust i de obundna fälten. Du bör ha unika fältnamn i hela formuläret, särskilt för obundna fält.

Anpassat formulär utan formulärmodell

För adaptiva formulär utan formulärmodell finns data för alla fält under <data>-taggen <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>

Konfigurera förifyllningstjänsten med Configuration Manager

Om du vill aktivera förifyllningstjänsten anger du standardkonfigurationen för förifyllningstjänsten i AEM webbkonsolkonfiguration. Gör så här för att konfigurera förifyllningstjänsten:

OBSERVERA

Konfiguration av förifyllningstjänsten kan användas för adaptiva formulär, HTML5-formulär och HTML5-formuläruppsättningar.

  1. Öppna Adobe Experience Manager Web Console Configuration med URL:en:
    https://<server>:<port>/system/console/configMgr

  2. Sök och öppna Default Prefill Service Configuration.

    Konfiguration av föfyllnad

  3. Ange dataplatsen eller en region (reguljärt uttryck) för datafilernas platser. Exempel på giltiga platser för datafiler är:

    • file:///C:/Users/public/Document/Prefill/.*
    • https://localhost:8000/somesamplexmlfile.xml
    OBSERVERA

    Som standard är förifyllning tillåtet via crx-filer för alla typer av adaptiva Forms (XSD, XDP, JSON, FDM och utan formulärmodellbaserad). Förifyll tillåts bara med JSON- och XML-filer.

  4. Förifyllningstjänsten har nu konfigurerats för ditt formulär.

    OBSERVERA

    CRX-protokollet hanterar förfylld datasäkerhet och är därför tillåtet som standard. Förifyllnad via andra protokoll med generisk regex kan orsaka sårbarhet. I konfigurationen anger du en säker URL-konfiguration för att skydda dina data.

Det nyskapande fallet med upprepningsbara paneler

Vanligtvis skapas bundna (formulärschema) och obundna fält i samma adaptiva form, men följande undantag görs om bindningen är repeterbar:

  • Obundna upprepningsbara paneler stöds inte för adaptiva formulär med XFA-formulärmallen, XSD-, JSON-schemat eller FDM-schemat.
  • Använd inte obundna fält i bundna repeterbara paneler.
OBSERVERA

Som tumregel ska du inte blanda bundna och obundna fält om de korsas i data som fylls i av slutanvä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.

Protokoll som stöds för förifyllning av användardata

Anpassningsbara formulär kan förifyllas med användardata i förifyllda dataformat via följande protokoll när de konfigureras med giltig regex:

crx://

https://localhost:4502/content/forms/af/xml.html?wcmmode=disabled&dataRef=crx:///tmp/fd/af/myassets/sample.xml

Den angivna noden måste ha en egenskap med namnet jcr:data och innehålla data.

file:// 

https://localhost:4502/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://

https://localhost:4502/content/forms/af/xml.html?wcmmode=disabled&dataRef=https://localhost:8000/somesamplexmlfile.xml

service://

https://localhost:4502/content/forms/af/abc.html?wcmmode=disabled&dataRef=service://[SERVICE_NAME]/[IDENTIFIER]
  • SERVICE_NAME refererar till namnet på OSGI-förifyllningstjänsten. Se Skapa och kör en förifyllningstjänst.
  • IDENTIFIER avser alla metadata som krävs av OSGI-förifyllningstjänsten för att hämta förifyllda data. En identifierare för den inloggade användaren är ett exempel på metadata som kan användas.
OBSERVERA

Det går inte att skicka autentiseringsparametrar.

Ställer in dataattribut i slingRequest

Du kan också ange attributet data i slingRequest, där attributet data ä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 för återgivning 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 ställa in attributet data.

Ett annat bra exempel är ett användningsexempel där du vill förifylla data vid inloggning 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 dataparametern.

prefill-page component.zip

Hämta
FileSample prefill.jsp i sidkomponent

AEM Forms anpassade förifyllningstjänst

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 med innehållet i datafilen för förifyllnad. Det hjälper dig även att permanent koppla förfyllda data till ett anpassat formulär.

Skapa och kör en förifyllningstjänst

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:

  • Ladda ned AEM Forms Client SDK

  • Hämta mallpaketet

  • Placera datafilen (förifyllda data) i crx-databasen. Du kan placera filen på valfri plats i mappen \contents i crx-database.

Hämta fil

Skapa en förifyllningstjänst

Mallpaketet (exempelpaketet för förifyllningstjänsten) innehåller exempelimplementering 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.

  1. Öppna src\main\java\com\adobe\test\Prefill.java för redigering.

  2. 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.xml
    • label: Etikettparametern anger tjänstens visningsnamn. Exempel: Standardtjänst för förifyllnad
  3. Spara och stäng Prefill.java-filen.

  4. Lägg till AEM Forms Client SDK-paketet i sökvägen för standardprojektet.

  5. Kompilera projektet och skapa .jar-filen för paketet.

Starta och använd förifyllningstjänsten

Starta förifyllningstjänsten genom att överföra JAR-filen till AEM Forms Web Console och aktivera tjänsten. Nu börjar tjänsten visas i en anpassad formulärredigerare. Så här associerar du en förifyllningstjänst till ett anpassat formulär:

  1. Öppna det adaptiva formuläret i Forms Editor och öppna egenskapspanelen för formulärbehållaren.
  2. Gå till AEM Forms container > Basic > Prefill Service i egenskapskonsolen.
  3. Välj standardtjänsten för förifyllnad och klicka på Save. Tjänsten är kopplad till formuläret.

Fyll i data i förväg på klienten

När du fyller i ett anpassat formulär i förväg sammanfogar AEM Forms-servern data med ett anpassat formulär och skickar det ifyllda formuläret till dig. Som standard utförs datasammanfogningsåtgärden på servern.

Du kan konfigurera AEM Forms-servern så att den utför datasammanfogningsåtgärden på klienten i stället för på servern. Det minskar avsevärt den tid som krävs för att förifylla och återge anpassningsbara formulär. Som standard är funktionen inaktiverad. Du kan aktivera det från Configuration Manager eller kommandoraden.

  • Så här aktiverar eller inaktiverar du konfigurationshanteraren:
    1. Öppna AEM Configuration Manager.
    2. Leta reda på och öppna Adaptive Form and Interactive Communication Web Channel Configuration
    3. Aktivera alternativet Configuration.af.clientside.datamerge.enabled.name
  • Så här aktiverar eller inaktiverar du från kommandoraden:
    • Aktivera genom att köra följande cURL-kommando:

      curl -u admin:admin -X POST -d apply=true \ -d propertylist=af.clientside.datamerge.enabled \ -d af.clientside.datamerge.enabled=true \ http://${crx.host}:${crx.port}/system/console/configMgr/Adaptive%20Form%20and%20Interactive%20Communication%20Web%20Channel%20Configuration

    • Om du vill inaktivera kör du följande cURL-kommando:

      curl -u admin:admin -X POST -d apply=true \ -d propertylist=af.clientside.datamerge.enabled \ -d af.clientside.datamerge.enabled=false \ http://${crx.host}:${crx.port}/system/console/configMgr/Adaptive%20Form%20and%20Interactive%20Communication%20Web%20Channel%20Configuration
      Om du vill dra nytta av det förifyllda datavärdet på klienten ska du uppdatera förifyllningstjänsten så att den returnerar FileAttachmentMap och CustomContext

På denna sida