Precompilare i campi del modulo adattivo prefill-adaptive-form-fields
Adobe consiglia di utilizzare l'acquisizione dati moderna ed estensibile Componenti coreper la creazione di un nuovo Forms adattivoo l'aggiunta di Forms adattivo alle pagine AEM Sites. Questi componenti rappresentano un progresso significativo nella creazione di Forms adattivi, garantendo esperienze utente straordinarie. Questo articolo descrive un approccio precedente all’authoring di Forms adattivi utilizzando i componenti di base.
Introduzione introduction
È possibile precompilare i campi di un modulo adattivo utilizzando dati esistenti. Quando un utente apre un modulo, i valori di tali campi vengono precompilati. Per precompilare i dati in un modulo adattivo, rendi i dati utente disponibili come XML/JSON precompilato nel formato conforme alla struttura dati precompilata dei moduli adattivi.
Struttura dei dati preriempimento the-prefill-structure
Un modulo adattivo può contenere una combinazione di campi associati e non associati. I campi associati sono campi trascinati dalla scheda Content Finder e che contengono il valore della proprietà bindRef
non vuoto nella finestra di dialogo di modifica del campo. I campi non associati vengono trascinati direttamente dal browser componenti del Sidekick e hanno un valore bindRef
vuoto.
Puoi precompilare sia i campi associati che quelli non associati di un modulo adattivo. I dati di precompilazione contengono le sezioni afBoundData e afUnBoundData per precompilare sia i campi associati che quelli non associati di un modulo adattivo. La sezione afBoundData
contiene i dati di precompilazione per i campi e i pannelli associati. Questi dati devono essere conformi allo schema del modello di modulo associato:
- Per i moduli adattivi che utilizzano il modello di modulo XFA, utilizza il file XML di precompilazione conforme allo schema di dati del modello XFA.
- Per i moduli adattivi che utilizzano lo schema XML, utilizza il file XML di precompilazione conforme alla struttura dello schema XML.
- Per i moduli adattivi che utilizzano lo schema JSON, utilizza il JSON di precompilazione conforme allo schema JSON.
- Per i moduli adattivi che utilizzano lo schema FDM, utilizza il JSON di precompilazione conforme allo schema FDM.
- Per i moduli adattivi con nessun modello di modulo, non sono presenti dati associati. Ogni campo è un campo non associato e viene precompilato utilizzando l'XML non associato.
Esempio di struttura XML di preriempimento sample-prefill-xml-structure
<?xml version="1.0" encoding="UTF-8"?>
<afData>
<afBoundData>
<employeeData>
.
</employeeData>
</afBoundData>
<afUnboundData>
<data>
<textbox>Hello World</textbox>
.
.
<numericbox>12</numericbox>
.
.
</data>
</afUnboundData>
</afData>
Esempio di struttura JSON di preriempimento sample-prefill-json-structure
{
"afBoundData": {
"employeeData": { }
},
"afUnboundData": {
"data": {
"textbox": "Hello World",
"numericbox": "12"
}
}
}
Per i campi associati con lo stesso bindref o campi non associati con lo stesso nome, i dati specificati nel tag XML o nell’oggetto JSON vengono compilati in tutti i campi. Ad esempio, due campi in un modulo sono mappati al nome textbox
nei dati di precompilazione. Durante il runtime, se il primo campo della casella di testo contiene "A", nella seconda casella di testo viene automaticamente inserito "A". Questo collegamento è denominato collegamento in tempo reale di campi modulo adattivo.
Modulo adattivo che utilizza il modello di modulo XFA xfa-based-af
La struttura dell’XML di precompilazione e dell’XML inviato per i moduli adattivi basati su XFA è la seguente:
-
Struttura XML precompilata: l'XML precompilato per il modulo adattivo basato su XFA deve essere conforme allo schema dati del modello di modulo XFA. Per precompilare i campi non associati, racchiudere la struttura XML di precompilazione nel tag
/afData/afBoundData
. -
Struttura XML inviato: se non viene utilizzato alcun XML di precompilazione, l'XML inviato contiene dati per i campi associati e non associati nel tag wrapper
afData
. Se si utilizza un XML di precompilazione, il codice XML inviato ha la stessa struttura del codice XML di precompilazione. Se l'XML di precompilazione inizia con il tag radiceafData
, anche l'XML di output ha lo stesso formato. Se il file XML di precompilazione non ha il wrapperafData/afBoundData
e inizia direttamente dal tag radice dello schema comeemployeeData
, anche il file XML inviato inizia con il tagemployeeData
.
Prefill-Submit-Data-ContentPackage.zip
Ottieni file
Campione contenente i dati di precompilazione e i dati inviati
Moduli adattivi basati su schema XML xml-schema-af
Di seguito è illustrata la struttura dell'XML di precompilazione e dell'XML inviato per i moduli adattivi basati su schema XML.
- Struttura XML precompilato: l'XML precompilato deve essere conforme allo schema XML associato. Per precompilare i campi non associati, racchiudi la struttura XML di precompilazione nel tag /afData/afBoundData.
- Struttura XML inviato: se non viene utilizzato alcun XML di precompilazione, il codice XML inviato contiene dati per i campi associati e non associati nel tag wrapper
afData
. Se si utilizza il codice XML di precompilazione, il codice XML inviato ha la stessa struttura del codice XML di precompilazione. Se l'XML di precompilazione inizia con il tag radiceafData
, l'XML di output ha lo stesso formato. Se il file XML di precompilazione non ha il wrapperafData/afBoundData
e inizia direttamente dal tag radice dello schema comeemployeeData
, anche il file XML inviato inizia con il tagemployeeData
.
<?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>
Per i campi il cui modello è lo schema XML, i dati vengono precompilati nel tag afBoundData
come mostrato nel codice XML di esempio seguente. Può essere utilizzato per precompilare un modulo adattivo con uno o più campi di testo non associati.
<?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>
bindRef
non vuoto creati trascinando i componenti dalla scheda Sidekick o Origini dati). Potrebbe causare la perdita di dati di questi campi non associati. Inoltre, si consiglia di assegnare nomi univoci ai campi nel modulo, in particolare per i campi non associati.Esempio senza afData e wrapper afBoundData an-example-without-afdata-and-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>
Moduli adattivi basati su schema JSON json-schema-based-adaptive-forms
Per i moduli adattivi basati sullo schema JSON, di seguito è descritta la struttura del JSON precompilato e del JSON inviato. Per ulteriori informazioni, consulta Creazione di moduli adattivi utilizzando lo schema JSON.
- Struttura JSON di precompilazione: il JSON di precompilazione deve essere conforme allo schema JSON associato. Facoltativamente, può essere racchiuso nell'oggetto /afData/afBoundData se desideri precompilare anche i campi non associati.
- Struttura JSON inviato: se non si utilizza un JSON di precompilazione, il JSON inviato contiene dati sia per i campi associati che per quelli non associati nel tag wrapper afData. Se si utilizza il JSON di precompilazione, il JSON inviato ha la stessa struttura del JSON di precompilazione. Se il JSON di precompilazione inizia con l’oggetto principale afData, il JSON di output ha lo stesso formato. Se il JSON di precompilazione non ha il wrapper afData/afBoundData e inizia direttamente dall’oggetto principale dello schema, come utente, anche il JSON inviato inizia con l’oggetto utente.
{
"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"
}}}}}
Per i campi che utilizzano il modello di schema JSON, i dati vengono precompilati nell’oggetto afBoundData come mostrato nel JSON di esempio di seguito. Può essere utilizzato per precompilare un modulo adattivo con uno o più campi di testo non associati. Di seguito è riportato un esempio di dati con wrapper afData/afBoundData
:
{
"afData": {
"afUnboundData": {
"data": { "textbox": "Ignorance is bliss :) " }
},
"afBoundData": {
"data": { {
"user": {
"address": {
"city": "Noida",
"country": "India"
}}}}}}}
Di seguito è riportato un esempio senza wrapper afData/afBoundData
:
{
"user": {
"address": {
"city": "Noida",
"country": "India"
}}}
Modulo adattivo senza modello di modulo adaptive-form-with-no-form-model
Per i moduli adattivi senza modello di modulo, i dati per tutti i campi si trovano sotto il tag <data>
di <afUnboundData> tag
.
Inoltre, prendi nota di quanto segue:
I tag XML per i dati utente inviati per vari campi vengono generati utilizzando il nome dei campi. Pertanto, i nomi dei campi devono essere univoci.
<?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>
Configurazione del servizio di precompilazione tramite Configuration Manager configuring-prefill-service-using-configuration-manager
Per abilitare il servizio di precompilazione, specifica Configurazione predefinita servizio di precompilazione nella configurazione della console web AEM. Per configurare il servizio di precompilazione, effettua le seguenti operazioni:
-
Apri Configurazione console Web Adobe Experience Manager utilizzando l'URL:
https://<server>:<porta>/system/console/configMgr -
Cerca e apri Configurazione predefinita servizio di precompilazione.
-
Immettere il percorso dati o un'espressione regolare per i percorsi dei file di dati. Di seguito sono riportati alcuni esempi di percorsi validi per i file di dati:
- file:///C:/Users/public/Document/Prefill/.*
- https://localhost:8000/somesamplexmlfile.xml
note note NOTE Per impostazione predefinita, la precompilazione è consentita tramite file crx per tutti i tipi di Forms adattivo (XSD, XDP, JSON, FDM e non basati su modello modulo). La precompilazione è consentita solo con file JSON e XML. -
Il servizio di precompilazione è ora configurato per il modulo.
note note NOTE Il protocollo crx si occupa della sicurezza dei dati precompilati ed è quindi consentito per impostazione predefinita. La precompilazione tramite altri protocolli utilizzando regex generico potrebbe causare vulnerabilità. Nella configurazione, specifica una configurazione URL sicura per proteggere i dati.
Il curioso caso dei pannelli ripetibili the-curious-case-of-repeatable-panels
In genere, i campi associati (schema modulo) e non associati vengono creati nello stesso modulo adattivo, ma di seguito sono riportate alcune eccezioni nel caso in cui i campi associati siano ripetibili:
- I pannelli ripetibili non associati non sono supportati per i moduli adattivi che utilizzano il modello di modulo XFA, XSD, lo schema JSON o lo schema FDM.
- Non utilizzare campi non associati nei pannelli ripetibili associati.
Protocolli supportati per la precompilazione dei dati utente supported-protocols-for-prefilling-user-data
I moduli adattivi possono essere precompilati con i dati utente in formato dati precompilati tramite i seguenti protocolli se configurati con regex valido:
Il protocollo crx:// the-crx-protocol
https://localhost:4502/content/forms/af/xml.html?wcmmode=disabled&dataRef=crx:///tmp/fd/af/myassets/sample.xml
Il nodo specificato deve avere una proprietà denominata jcr:data
e contenere i dati.
Il protocollo file:// the-file-protocol-nbsp
https://localhost:4502/content/forms/af/someAF.html?wcmmode=disabled&dataRef=file:///C:/Users/form-user/Downloads/somesamplexml.xml
Il file di riferimento deve trovarsi sullo stesso server.
Il protocollo https:// the-http-protocol
https://localhost:4502/content/forms/af/xml.html?wcmmode=disabled&dataRef=https://localhost:8000/somesamplexmlfile.xml
Il protocollo service:// the-service-protocol
https://localhost:4502/content/forms/af/abc.html?wcmmode=disabled&dataRef=service://[SERVICE_NAME]/[IDENTIFIER]
- SERVICE_NAME fa riferimento al nome del servizio di precompilazione OSGI. Fare riferimento a Creare ed eseguire un servizio di precompilazione.
- IDENTIFIER rimanda a tutti i metadati richiesti dal servizio di precompilazione OSGI per recuperare i dati di precompilazione. Un identificatore dell’utente connesso è un esempio di metadati che potrebbe essere utilizzato.
Impostazione dell’attributo dei dati in slingRequest setting-data-attribute-in-slingrequest
È inoltre possibile impostare l'attributo data
in slingRequest
, dove l'attributo data
è una stringa contenente XML o JSON, come illustrato nel codice di esempio seguente (ad esempio per 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);
%>
Puoi scrivere una stringa XML o JSON semplice contenente tutti i tuoi dati e impostarla in slingRequest. Puoi eseguire facilmente questa operazione nel JSP di rendering per qualsiasi componente che desideri includere nella pagina in cui puoi impostare l’attributo dati slingRequest.
Ad esempio, dove desideri una progettazione specifica per la pagina con un tipo specifico di intestazione. A questo scopo, puoi scrivere il tuo header.jsp
, che puoi includere nel componente Pagina e impostare l'attributo data
.
Un altro buon esempio è un caso d’uso in cui si desidera precompilare i dati all’accesso tramite account social come Facebook, Twitter o LinkedIn. In questo caso, è possibile includere una JSP semplice in header.jsp
, che recupera i dati dall'account utente e imposta il parametro di dati.
prefill-page component.zip
Ottieni file
Esempio di prefill.jsp nel componente pagina
Servizio di preriempimento personalizzato AEM Forms aem-forms-custom-prefill-service
Puoi utilizzare il servizio di preriempimento personalizzato per gli scenari in cui si leggono costantemente i dati da un’origine predefinita. Il servizio di precompilazione legge i dati dalle origini dati definite e precompila i campi del modulo adattivo con il contenuto del file di dati di precompilazione. Consente inoltre di associare in modo permanente i dati precompilati a un modulo adattivo.
Creare ed eseguire un servizio di precompilazione create-and-run-a-prefill-service
Il servizio di precompilazione è un servizio OSGi ed è fornito tramite bundle OSGi. Crea il bundle OSGi, caricalo e installalo nei bundle di AEM Forms. Prima di iniziare a creare il bundle:
-
Scarica il pacchetto boilerplate
-
Inserisci il file di dati (dati di precompilazione) nel crx-repository. È possibile inserire il file in qualsiasi posizione nella cartella \content del repository crx.
Creare un servizio di preriempimento create-a-prefill-service
Il pacchetto boilerplate (esempio di pacchetto di servizio di preriempimento) contiene un esempio di implementazione del servizio di preriempimento AEM Forms. Apri il pacchetto boilerplate in un editor di codice. Ad esempio, apri il progetto boilerplate in Eclipse per la modifica. Dopo aver aperto il pacchetto boilerplate in un editor di codice, esegui i seguenti passaggi per creare il servizio.
-
Apri il file src\main\java\com\adobe\test\Prefill.java per la modifica.
-
Nel codice, imposta il valore di:
nodePath:
La variabile del percorso del nodo che punta alla posizione dell'archivio crx contiene il percorso del file di dati (precaricamento). Ad esempio, /content/prefilldata.xmllabel:
Il parametro label specifica il nome visualizzato del servizio. Ad esempio, Servizio di precompilazione predefinito
-
Salvare e chiudere il file
Prefill.java
. -
Aggiungere il pacchetto
AEM Forms Client SDK
al percorso di compilazione del progetto standard. -
Compila il progetto e crea il file .jar per il bundle.
Avviare e utilizzare il servizio di precompilazione start-and-use-the-prefill-service
Per avviare il servizio di precompilazione, carica il file JAR su AEM Forms Web Console e attiva il servizio. Ora il servizio inizia a essere visualizzato nell’editor di moduli adattivi. Per associare un servizio di precompilazione a un modulo adattivo:
- Apri il modulo adattivo in Forms Editor e apri il pannello Proprietà del Contenitore modulo.
- Nella console Proprietà, passa a Contenitore AEM Forms > Base > Servizio preriempimento.
- Selezionare il servizio di precompilazione predefinito e fare clic su Salva. Il servizio è associato al modulo.
Precompila dati sul client prefill-at-client
Quando si precompila un modulo adattivo, il server AEM Forms unisce i dati con un modulo adattivo e consegna all’utente il modulo compilato. Per impostazione predefinita, l'operazione di unione dati viene eseguita nel server.
Puoi configurare il server AEM Forms in modo che esegua l’azione di unione dati sul client anziché sul server. Riduce in modo significativo il tempo necessario per precompilare ed eseguire il rendering dei moduli adattivi. Per impostazione predefinita, la funzione è disabilitata. È possibile abilitarlo dalla riga di comando o da Configuration Manager.
-
Per attivare o disattivare da Gestione configurazione:
- Apri Gestione configurazione AEM.
- Individuare e aprire il modulo adattivo e la configurazione del canale web di comunicazione interattiva
- Abilita l’opzione Configuration.af.clientside.datamerge.enabled.name
-
Per attivare o disattivare dalla riga di comando:
-
Per abilitare questa funzione, esegui il seguente comando cURL:
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
-
Per disattivare, eseguire il seguente comando cURL:
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
Per sfruttare appieno l'opzione di precompilazione dei dati nel client, aggiorna il servizio di precompilazione per restituire FileAttachmentMap e CustomContext
-