Funzioni personalizzate in Forms adattivo (componenti core)
Introduzione
AEM Forms supporta funzioni personalizzate che consentono agli utenti di definire funzioni JavaScript per l’implementazione di regole aziendali complesse. Queste funzioni personalizzate estendono le funzionalità dei moduli facilitando la manipolazione e l’elaborazione dei dati immessi per soddisfare requisiti specifici. Consentono inoltre di modificare dinamicamente il comportamento delle forme in base a criteri predefiniti.
Utilizzo di funzioni personalizzate uses-of-custom-function
L’utilizzo di funzioni personalizzate in Adaptive Forms offre i seguenti vantaggi:
- Elaborazione dei dati: le funzioni personalizzate consentono di elaborare i dati immessi nei campi dei moduli.
- Convalida dei dati: le funzioni personalizzate consentono di eseguire controlli personalizzati sugli input dei moduli e di fornire messaggi di errore specifici.
- Comportamento dinamico: le funzioni personalizzate consentono di controllare il comportamento dinamico dei moduli in base a condizioni specifiche. Ad esempio, è possibile visualizzare/nascondere campi, modificare i valori dei campi o modificare dinamicamente la logica del modulo.
- Integrazione: è possibile utilizzare funzioni personalizzate da integrare con API o servizi esterni. Consente di recuperare dati da origini esterne, inviare dati agli endpoint Rest esterni o eseguire azioni personalizzate basate su eventi esterni.
Le funzioni personalizzate sono essenzialmente librerie client aggiunte al file JavaScript. Una volta creata, una funzione personalizzata diventa disponibile nell’editor di regole per la selezione da parte dell’utente in un modulo adattivo. Le funzioni personalizzate sono identificate dalle annotazioni di JavaScript nell’editor di regole.
Annotazioni di JavaScript supportate per la funzione personalizzata js-annotations
Le annotazioni JavaScript vengono utilizzate per fornire metadati per il codice JavaScript. Include commenti che iniziano con simboli specifici, ad esempio /** e @. Le annotazioni forniscono informazioni importanti su funzioni, variabili e altri elementi nel codice. Il modulo adattivo supporta le seguenti annotazioni di JavaScript per le funzioni personalizzate:
Nome
Il nome viene utilizzato per identificare la funzione personalizzata nell’editor di regole di un modulo adattivo. Per denominare una funzione personalizzata vengono utilizzate le sintassi seguenti:
@name [functionName] <Function Name>
@function [functionName] <Function Name>
@func [functionName] <Function Name>
.functionName
è il nome della funzione. Gli spazi non sono consentiti.<Function Name>
è il nome visualizzato della funzione nell'editor di regole di un modulo adattivo.
Se il nome della funzione è identico al nome della funzione stessa, è possibile omettere[functionName]
dalla sintassi.
Parametro
Il parametro è un elenco di argomenti utilizzati dalle funzioni personalizzate. Una funzione può supportare più parametri. Le seguenti sintassi vengono utilizzate per definire un parametro in una funzione personalizzata:
-
@param {type} name <Parameter Description>
-
@argument
{type} name <Parameter Description>
-
@arg
{type}
name <Parameter Description>
.{type}
rappresenta il tipo di parametro. I tipi di parametri consentiti sono:- string (stringa): rappresenta un singolo valore di stringa.
- number: rappresenta un singolo valore numerico.
- booleano: rappresenta un singolo valore booleano (true o false).
- stringa[]: rappresenta una matrice di valori stringa.
- number[]: rappresenta una matrice di valori numerici.
- booleano[]: rappresenta una matrice di valori booleani.
- data: rappresenta un singolo valore di data.
- data[]: rappresenta una matrice di valori di data.
- array: rappresenta una matrice generica contenente valori di vari tipi.
- object: rappresenta un oggetto modulo passato a una funzione personalizzata anziché passare direttamente il relativo valore.
- ambito: rappresenta l'oggetto globals, che contiene variabili di sola lettura quali istanze di moduli, istanze di campi di destinazione e metodi per l'esecuzione di modifiche di moduli all'interno di funzioni personalizzate. Viene dichiarato come ultimo parametro nelle annotazioni di JavaScript e non è visibile nell’editor di regole di un modulo adattivo. Il parametro scope accede all'oggetto del modulo o del componente per attivare la regola o l'evento necessario per l'elaborazione del modulo. Per ulteriori informazioni sull'oggetto Globals e su come utilizzarlo, fare clic qui.
Il tipo di parametro non fa distinzione tra maiuscole e minuscole e non sono consentiti spazi nel nome del parametro.
<Parameter Description>
contiene dettagli sullo scopo del parametro. Può avere più parole.
Parametri facoltativi
Per impostazione predefinita, tutti i parametri sono obbligatori. È possibile definire un parametro come facoltativo aggiungendo =
dopo il tipo di parametro o racchiudendo il nome del parametro in []
. I parametri definiti come facoltativi nelle annotazioni di JavaScript vengono visualizzati come facoltativi nell’editor di regole.
Per definire una variabile come parametro facoltativo, è possibile utilizzare una delle sintassi seguenti:
@param {type=} Input1
Nella riga di codice precedente, Input1
è un parametro facoltativo senza alcun valore predefinito. Per dichiarare un parametro facoltativo con valore predefinito:@param {string=<value>} input1
input1
come parametro facoltativo con il valore predefinito impostato su value
.
@param {type} [Input1]
Nella riga di codice precedente, Input1
è un parametro facoltativo senza alcun valore predefinito. Per dichiarare un parametro facoltativo con valore predefinito:@param {array} [input1=<value>]
input1
è un parametro facoltativo di tipo array con il valore predefinito impostato su value
.
Assicurarsi che il tipo di parametro sia racchiuso tra parentesi graffe {} e che il nome del parametro sia racchiuso tra parentesi quadre.
Considera il seguente frammento di codice, in cui input2 è definito come parametro opzionale:
/**
* optional parameter function
* @name OptionalParameterFunction
* @param {string} input1
* @param {string=} input2
* @return {string}
*/
function OptionalParameterFunction(input1, input2) {
let result = "Result: ";
result += input1;
if (input2 !== null) {
result += " " + input2;
}
return result;
}
Nell'illustrazione seguente viene visualizzato l'utilizzo della funzione personalizzata OptionalParameterFunction
nell'editor di regole:
Puoi salvare la regola senza specificare un valore per i parametri richiesti, ma la regola non viene eseguita e visualizza un messaggio di avviso come:
Quando l’utente lascia vuoto il parametro opzionale, il valore "Undefined" (Non definito) viene passato alla funzione personalizzata per il parametro opzionale.
Per ulteriori informazioni su come definire parametri facoltativi in JSDocs, fai clic qui.
Tipo restituito
Il tipo restituito specifica il tipo di valore restituito dalla funzione personalizzata dopo l'esecuzione. Le seguenti sintassi vengono utilizzate per definire un tipo restituito in una funzione personalizzata:
-
@return {type}
-
@returns {type}
{type}
rappresenta il tipo restituito della funzione. I tipi restituiti consentiti sono:- string (stringa): rappresenta un singolo valore di stringa.
- number: rappresenta un singolo valore numerico.
- booleano: rappresenta un singolo valore booleano (true o false).
- stringa[]: rappresenta una matrice di valori stringa.
- number[]: rappresenta una matrice di valori numerici.
- booleano[]: rappresenta una matrice di valori booleani.
- data: rappresenta un singolo valore di data.
- data[]: rappresenta una matrice di valori di data.
- array: rappresenta una matrice generica contenente valori di vari tipi.
- object: rappresenta direttamente l'oggetto modulo anziché il relativo valore.
Il tipo restituito non fa distinzione tra maiuscole e minuscole.
Privata
La funzione personalizzata dichiarata come privata non viene visualizzata nell’elenco delle funzioni personalizzate nell’editor delle regole di un modulo adattivo. Per impostazione predefinita, le funzioni personalizzate sono pubbliche. La sintassi per dichiarare la funzione personalizzata come privata è @private
.
Linee guida per la creazione di funzioni personalizzate
Per elencare le funzioni personalizzate nell’editor di regole, puoi utilizzare uno dei seguenti formati:
Istruzione function con o senza commenti jsdoc
Puoi creare una funzione personalizzata con o senza commenti jsdoc.
function functionName(parameters)
{
// code to be executed
}
Se l’utente non aggiunge annotazioni JavaScript alla funzione personalizzata, questa viene elencata nell’editor di regole in base al nome della funzione. Tuttavia, si consiglia di includere annotazioni JavaScript per migliorare la leggibilità delle funzioni personalizzate.
Funzione freccia con annotazioni o commenti JavaScript obbligatori
È possibile creare una funzione personalizzata con una sintassi della funzione freccia:
/**
* test function
* @name testFunction
* @param {string} a parameter description
* @param {string=} b parameter description
* @return {string}
*/
testFunction = (a, b) => {
return a + b;
};
/** */
testFunction1=(a) => (return a)
/** */
testFunction2 = a => a + 100;
Se l’utente non aggiunge annotazioni JavaScript alla funzione personalizzata, la funzione personalizzata non viene elencata nell’editor di regole di un modulo adattivo.
Espressione di funzione con annotazioni o commenti JavaScript obbligatori
Per elencare le funzioni personalizzate nell’editor di regole di un modulo adattivo, crea funzioni personalizzate nel formato seguente:
/**
* test function
* @name testFunction
* @param {string} input1 parameter description
* @param {string=} input2 parameter description
* @return {string}
*/
testFunction = function(input1,input2)
{
// code to be executed
}
Se l’utente non aggiunge annotazioni JavaScript alla funzione personalizzata, la funzione personalizzata non viene elencata nell’editor di regole di un modulo adattivo.
Creare una funzione personalizzata create-custom-function
Crea una libreria client per chiamare funzioni personalizzate nell’editor di regole. Per ulteriori informazioni, vedere Utilizzo di librerie lato client.
I passaggi per creare funzioni personalizzate sono i seguenti:
Prerequisiti per creare una funzione personalizzata
Prima di iniziare ad aggiungere una funzione personalizzata al Forms adattivo, verifica di disporre dei seguenti elementi:
Software:
-
Editor di testo normale (IDE): mentre qualsiasi editor di testo normale può funzionare, un ambiente di sviluppo integrato (IDE) come Microsoft Visual Studio Code offre funzionalità avanzate per semplificare la modifica.
-
Git: Questo sistema di controllo della versione è necessario per la gestione delle modifiche al codice. Se non lo hai installato, scaricalo da https://git-scm.com.
Creare una libreria client create-client-library
Puoi aggiungere funzioni personalizzate aggiungendo una libreria client. Per creare una libreria client, effettua le seguenti operazioni:
Clona l'archivio
Clona il tuo archivio as a Cloud Service di AEM Forms:
-
Apri la riga di comando o la finestra del terminale.
-
Passa alla posizione desiderata sul computer in cui desideri memorizzare l’archivio.
-
Esegui il comando seguente per clonare l’archivio:
git clone [Git Repository URL]
Con questo comando viene scaricato l'archivio e viene creata una cartella locale dell'archivio clonato nel computer. In questa guida questa cartella viene indicata come [directory del progetto AEMaaCS].
Aggiungi una cartella della libreria client
Per aggiungere una nuova cartella della libreria client alla directory di progetto [AEMaaCS], eseguire la procedura seguente:
-
Apri la [directory del progetto AEMaaCS] in un editor.
-
Individuare
ui.apps
. -
Aggiungi nuova cartella. Aggiungere ad esempio una cartella denominata
experience-league
. -
Passare alla cartella
/experience-league/
e aggiungereClientLibraryFolder
. Creare ad esempio una cartella della libreria client denominatacustomclientlibs
.Location is: [AEMaaCS project directory]/ui.apps/src/main/content/jcr_root/apps/
Aggiungi file e cartelle alla cartella Libreria client
Aggiungi quanto segue alla cartella della libreria client aggiunta:
- file .content.xml
- file js.txt
- cartella js
Location is: [AEMaaCS project directory]/ui.apps/src/main/content/jcr_root/apps/experience-league/customclientlibs/
-
In
.content.xml
aggiungi le seguenti righe di codice:code language-javascript <?xml version="1.0" encoding="UTF-8"?> <jcr:root xmlns:cq="http://www.day.com/jcr/cq/1.0" xmlns:jcr="http://www.jcp.org/jcr/1.0" jcr:primaryType="cq:ClientLibraryFolder" categories="[customfunctionscategory]"/>
note note NOTE È possibile scegliere qualsiasi nome per la proprietà client library folder
ecategories
. -
In
js.txt
aggiungi le seguenti righe di codice:code language-javascript #base=js function.js
-
Nella cartella
js
, aggiungi il file javascript comefunction.js
che include le funzioni personalizzate:code language-javascript /** * Calculates Age * @name calculateAge * @param {object} field * @return {string} */ function calculateAge(field) { var dob = new Date(field); var now = new Date(); var age = now.getFullYear() - dob.getFullYear(); var monthDiff = now.getMonth() - dob.getMonth(); if (monthDiff < 0 || (monthDiff === 0 && now.getDate() < dob.getDate())) { age--; } return age; }
-
Salva i file.
Includi la nuova cartella nel file filter.xml:
-
Passa al file
/ui.apps/src/main/content/META-INF/vault/filter.xml
nella directory del progetto [AEMaaCS]. -
Apri il file e aggiungi la seguente riga alla fine:
<filter root="/apps/experience-league" />
-
Salva il file.
Distribuisci la cartella della libreria client appena creata nell'ambiente AEM
Distribuisci la directory del progetto AEM as a Cloud Service [AEMaaCS] nell'ambiente di Cloud Service. Per eseguire l’implementazione nell’ambiente di Cloud Service:
-
Eseguire il commit delle modifiche
- Aggiungi, esegui il commit e invia le modifiche nell’archivio utilizzando i seguenti comandi:
code language-javascript git add . git commit -a -m "Adding custom functions" git push
-
Distribuisci il codice aggiornato:
- Attiva una distribuzione del codice tramite la pipeline full stack esistente. In questo modo viene automaticamente generato e distribuito il codice aggiornato.
Se non hai già configurato una pipeline, consulta la guida su come impostare una pipeline per AEM Forms as a Cloud Service.
Una volta eseguita correttamente la pipeline, la funzione personalizzata aggiunta nella libreria client diventa disponibile nell'editor di regole per moduli adattivi.
Aggiungere una libreria client a un modulo adattivo use-custom-function
Dopo aver implementato la libreria client nell’ambiente Forms CS, utilizzane le funzionalità nel modulo adattivo. Per aggiungere la libreria client al modulo adattivo
-
Apri il modulo in modalità di modifica. Per aprire un modulo in modalità di modifica, selezionare un modulo e selezionare Modifica.
-
Apri il browser Contenuto e seleziona il componente Contenitore guida del modulo adattivo.
-
Fare clic sull'icona delle proprietà del Contenitore Guida TV . Viene visualizzata la finestra di dialogo Contenitore modulo adattivo (Adaptive Form Container).
-
Apri la scheda Base e seleziona il nome della categoria di librerie client dall'elenco a discesa (in questo caso, seleziona
customfunctionscategory
).note note NOTE È possibile aggiungere più categorie specificando un elenco separato da virgole nel campo Categoria libreria client. -
Fai clic su Fine.
Puoi utilizzare la funzione personalizzata nell'editor di regole di un modulo adattivo utilizzando le annotazioni di JavaScript.
Utilizzo di una funzione personalizzata in un modulo adattivo
In un modulo adattivo, puoi utilizzare funzioni personalizzate all'interno dell'editor di regole. Aggiungiamo il codice seguente al file JavaScript (Function.js
file) per calcolare l'età in base alla data di nascita (AAAA-MM-GG). Creare una funzione personalizzata come calculateAge()
che utilizza come input la data di nascita e restituisce l'età:
/**
* Calculates Age
* @name calculateAge
* @param {object} field
* @return {string}
*/
function calculateAge(field) {
var dob = new Date(field);
var now = new Date();
var age = now.getFullYear() - dob.getFullYear();
var monthDiff = now.getMonth() - dob.getMonth();
if (monthDiff < 0 || (monthDiff === 0 && now.getDate() < dob.getDate())) {
age--;
}
return age;
}
Nell'esempio precedente, quando l'utente immette la data di nascita nel formato (AAAA-MM-GG), la funzione personalizzata calculateAge
viene richiamata e restituisce l'età.
Visualizziamo in anteprima il modulo per osservare come le funzioni personalizzate vengono implementate tramite l’editor di regole:
Impostare le opzioni dell’elenco a discesa utilizzando le funzioni personalizzate
L'editor di regole nei Componenti core non supporta la proprietà Imposta opzioni di per impostare le opzioni dell'elenco a discesa in fase di esecuzione. Tuttavia, è possibile impostare le opzioni dell’elenco a discesa utilizzando le funzioni personalizzate.
Osserva il codice seguente per scoprire come impostare le opzioni dell’elenco a discesa utilizzando le funzioni personalizzate:
/**
* @name setEnums
* @returns {string[]}
**/
function setEnums() {
return ["0","1","2","3","4","5","6"];
}
/**
* @name setEnumNames
* @returns {string[]}
**/
function setEnumNames() {
return ["Sunday","Monday", "Tuesday", "Wednesday", "Thursday", "Friday", "Saturday"];
}
Nel codice riportato sopra, setEnums
viene utilizzato per impostare la proprietà enum
e setEnumNames
per impostare la proprietà enumNames
dell'elenco a discesa.
Creiamo una regola per il pulsante Next
, che imposta il valore dell'opzione dell'elenco a discesa quando l'utente fa clic sul pulsante Next
:
Fai riferimento all’illustrazione seguente per dimostrare dove sono impostate le opzioni dell’elenco a discesa facendo clic sul pulsante Visualizza:
Supporto delle funzioni asincrone nelle funzioni personalizzate support-of-async-functions
Le funzioni personalizzate asincrone non vengono visualizzate nell’elenco dell’editor di regole. Tuttavia, è possibile richiamare funzioni asincrone all’interno di funzioni personalizzate create utilizzando espressioni di funzioni sincrone.
Osserva il codice seguente per scoprire come richiamare funzioni asincrone utilizzando funzioni personalizzate:
async function asyncFunction() {
const response = await fetch('https://petstore.swagger.io/v2/store/inventory');
const data = await response.json();
return data;
}
/**
* callAsyncFunction
* @name callAsyncFunction callAsyncFunction
*/
function callAsyncFunction() {
asyncFunction()
.then(responseData => {
console.log('Response data:', responseData);
})
.catch(error => {
console.error('Error:', error);
});
}
Nell'esempio precedente, la funzione asyncFunction è un asynchronous function
. Esegue un'operazione asincrona effettuando una richiesta GET
a https://petstore.swagger.io/v2/store/inventory
. Attende la risposta utilizzando await
, analizza il corpo della risposta come JSON utilizzando response.json()
, quindi restituisce i dati. La funzione callAsyncFunction
è una funzione personalizzata sincrona che richiama la funzione asyncFunction
e visualizza i dati di risposta nella console. Sebbene la funzione callAsyncFunction
sia sincrona, chiama la funzione asyncFunction asincrona e gestisce il risultato con then
e catch
istruzioni.
Per vedere come funziona, aggiungiamo un pulsante e creiamo una regola per il pulsante che richiama la funzione asincrona al clic di un pulsante.
Fare riferimento all'illustrazione della finestra della console seguente per dimostrare che quando l'utente fa clic sul pulsante Fetch
, viene richiamata la funzione personalizzata callAsyncFunction
, che a sua volta chiama una funzione asincrona asyncFunction
. Inspect nella finestra della console per visualizzare la risposta al pulsante, fai clic su:
Approfondiamo le funzioni personalizzate.
Varie funzioni per funzioni personalizzate
È possibile utilizzare funzioni personalizzate per aggiungere caratteristiche personalizzate ai moduli. Queste funzioni supportano varie funzionalità, ad esempio l’utilizzo di campi specifici, l’utilizzo di campi globali o la memorizzazione in cache. Questa flessibilità consente di personalizzare i moduli in base ai requisiti aziendali.
Oggetti di ambito Field e Global nelle funzioni personalizzate support-field-and-global-objects
Gli oggetti Field fanno riferimento ai singoli componenti o elementi di un modulo, ad esempio campi di testo e caselle di controllo. L'oggetto Globals contiene variabili di sola lettura quali l'istanza del modulo, l'istanza del campo di destinazione e i metodi per apportare modifiche al modulo nelle funzioni personalizzate.
param {scope} globals
deve essere l'ultimo parametro e non viene visualizzato nell'editor di regole di un modulo adattivo.Scopriamo in che modo le funzioni personalizzate utilizzano oggetti campo e globali con l'aiuto di un modulo Contact Us
utilizzando casi d'uso diversi.
SetProperty
Aggiungere il codice seguente nella funzione personalizzata come descritto nella sezione create-custom-function per impostare il campo modulo come Required
.
code language-javascript |
---|
|
note note |
---|
NOTE |
|
In questo esempio, la convalida del pannello personaldetails
viene eseguita facendo clic sul pulsante. Se non vengono rilevati errori nel pannello, un altro pannello, il pannello feedback
, diventa visibile al clic del pulsante.
Creiamo una regola per il pulsante Next
, che convalida il pannello personaldetails
e rende visibile il pannello feedback
quando l'utente fa clic sul pulsante Next
.
Fare riferimento all'illustrazione seguente per dimostrare dove viene convalidato il pannello personaldetails
facendo clic sul pulsante Next
. Se tutti i campi all'interno di personaldetails
sono convalidati, il pannello feedback
diventa visibile.
Se nei campi del pannello personaldetails
sono presenti errori, questi vengono visualizzati a livello di campo facendo clic sul pulsante Next
e il pannello feedback
rimane invisibile.
Aggiungi il seguente codice nella funzione personalizzata come descritto nella sezione create-custom-function per convalidare il campo.
code language-javascript |
---|
|
note note |
---|
NOTE |
Se nella funzione validate() non viene passato alcun argomento, il modulo viene convalidato. |
In questo esempio, al campo contact
viene applicato un pattern di convalida personalizzato. Gli utenti devono immettere un numero di telefono che inizia con 10
seguito da 8
cifre. Se l'utente immette un numero di telefono che non inizia con 10
o che contiene più o meno di 8
cifre, viene visualizzato un messaggio di errore di convalida al clic del pulsante:
Il passaggio successivo consiste nel creare una regola per il pulsante Next
che convalida il campo contact
al clic del pulsante.
Fare riferimento all'illustrazione seguente per dimostrare che se l'utente immette un numero di telefono che non inizia con 10
, viene visualizzato un messaggio di errore a livello di campo:
Se l'utente immette un numero di telefono valido e tutti i campi nel pannello personaldetails
sono convalidati, il pannello feedback
viene visualizzato sullo schermo:
Aggiungi il seguente codice nella funzione personalizzata, come descritto nella sezione create-custom-function, per ripristinare il pannello.
code language-javascript |
---|
|
note note |
---|
NOTE |
Se nella funzione reset() non viene passato alcun argomento, il modulo viene convalidato. |
In questo esempio, il pannello personaldetails
viene ripristinato facendo clic sul pulsante Clear
. Il passaggio successivo consiste nel creare una regola per il pulsante Clear
che ripristini il pannello al clic del pulsante.
Vedere l'illustrazione seguente per mostrare che se l'utente fa clic sul pulsante clear
, il pannello personaldetails
viene ripristinato:
È possibile utilizzare la funzione markFieldAsInvalid()
per definire un campo come non valido e impostare un messaggio di errore personalizzato a livello di campo. Il valore fieldIdentifier
può essere fieldId
, field qualifiedName
o field dataRef
. Il valore dell'oggetto denominato option
può essere {useId: true}
, {useQualifiedName: true}
o {useDataRef: true}
.
Le sintassi utilizzate per contrassegnare un campo come non valido e impostare un messaggio personalizzato sono:
globals.functions.markFieldAsInvalid(field.$id,"[custom message]",{useId: true});
globals.functions.markFieldAsInvalid(field.$qualifiedName, "[custom message]", {useQualifiedName: true});
globals.functions.markFieldAsInvalid(field.$dataRef, "[custom message]", {useDataRef: true});
Aggiungi il seguente codice nella funzione personalizzata, come descritto nella sezione create-custom-function, per abilitare un messaggio personalizzato a livello di campo.
code language-javascript |
---|
|
In questo esempio, se l'utente immette meno di 15 caratteri nella casella di testo dei commenti, viene visualizzato un messaggio personalizzato a livello di campo.
Il passaggio successivo consiste nel creare una regola per il campo comments
:
Vedere la dimostrazione seguente per visualizzare che l'immissione di un feedback negativo nel campo comments
attiva la visualizzazione di un messaggio personalizzato a livello di campo:
Se l’utente immette più di 15 caratteri nella casella di testo dei commenti, il campo viene convalidato e il modulo viene inviato:
La seguente riga di codice:globals.functions.submitForm(globals.functions.exportData(), false);
viene utilizzato per inviare i dati del modulo dopo la manipolazione.
- Il primo argomento è costituito dai dati da inviare.
- Il secondo argomento indica se il modulo deve essere convalidato prima dell'invio. È
optional
ed è impostato cometrue
per impostazione predefinita. - Il terzo argomento è
contentType
dell'inoltro, che è anche facoltativo con il valore predefinitomultipart/form-data
. Gli altri valori possono essereapplication/json
eapplication/x-www-form-urlencoded
.
Aggiungi il seguente codice nella funzione personalizzata, come descritto nella sezione create-custom-function, per inviare i dati manipolati sul server:
code language-javascript |
---|
|
In questo esempio, se l'utente lascia vuota la casella di testo comments
, NA
viene inviato al server al momento dell'invio del modulo.
Creare una regola per il pulsante Submit
che invia i dati:
Fare riferimento all'illustrazione di console window
seguente per dimostrare che se l'utente lascia vuota la casella di testo comments
, il valore NA
viene inviato nel server:
È inoltre possibile esaminare la finestra della console per visualizzare i dati inviati al server:
Aggiungi la seguente riga di codice come descritto nella sezione create-custom-function per personalizzare l'invio o il messaggio di errore per l'invio dei moduli e visualizzare i messaggi di invio dei moduli in una casella modale:
code language-javascript |
---|
|
In questo esempio, quando l'utente utilizza le funzioni personalizzate customSubmitSuccessHandler
e customSubmitErrorHandler
, i messaggi di esito positivo e negativo vengono visualizzati in un modale. La funzione JavaScript showModal(type, message)
viene utilizzata per creare e visualizzare in modo dinamico una finestra di dialogo modale su uno schermo.
Ora, crea una regola per l’invio corretto del modulo:
Fai riferimento all’illustrazione seguente per dimostrare che, quando il modulo viene inviato correttamente, il messaggio di successo viene visualizzato in una finestra modale:
Allo stesso modo, creiamo una regola per gli invii di moduli non riusciti:
Fai riferimento all’illustrazione seguente per dimostrare che quando l’invio del modulo non riesce, il messaggio di errore viene visualizzato in un modale:
Per visualizzare l'invio dei moduli completato e non riuscito in modo predefinito, sono disponibili le funzioni Default submit Form Success Handler
e Default submit Form Error Handler
pronte all'uso.
Nel caso in cui il gestore di invio personalizzato non riesca a eseguire le operazioni previste nei progetti o moduli AEM esistenti, consulta la sezione risoluzione dei problemi.
Le regole create utilizzando l’editor di regole visive in un pannello ripetibile si applicano all’ultima istanza del pannello ripetibile. Per scrivere una regola per una specifica istanza del pannello ripetibile, possiamo utilizzare una funzione personalizzata.
Creiamo un altro modulo per raccogliere informazioni sui viaggiatori che si dirigono verso una destinazione. Un pannello viaggiatore viene aggiunto come pannello ripetibile, in cui l'utente può aggiungere dettagli per 5 viaggiatori utilizzando il pulsante Add Traveler
.
Aggiungi la seguente riga di codice come descritto nella sezione create-custom-function per eseguire azioni in un'istanza specifica del pannello ripetibile, diversa dall'ultima:
code language-javascript |
---|
|
In questo esempio, la funzione personalizzata hidePanelInRepeatablePanel
esegue un'azione in un'istanza specifica del pannello ripetibile. Nel codice precedente, travelerinfo
rappresenta il pannello ripetibile. Il codice repeatablePanel[1].traveler, {visible: false}
nasconde il pannello nella seconda istanza del pannello ripetibile.
Aggiungiamo un pulsante con etichetta Hide
e una regola per nascondere la seconda istanza di un pannello ripetibile.
Fare riferimento al video seguente per dimostrare che quando si fa clic su Hide
, il pannello nella seconda istanza ripetibile si nasconde:
embed |
---|
|
Aggiungi la seguente riga di codice, come spiegato nella sezione create-custom-function, per caricare il valore precompilato in un campo quando il modulo viene inizializzato:
code language-javascript |
---|
|
Nel codice sopra indicato, la funzione testImportData
compila il campo della casella di testo Booking Amount
al caricamento del modulo. Supponiamo che il modulo di prenotazione richieda un importo minimo di prenotazione pari a 10,000
.
Creiamo una regola al momento dell'inizializzazione del modulo, in cui il valore nel campo della casella di testo Booking Amount
viene precompilato con un valore specificato al caricamento del modulo:
Fai riferimento alla schermata seguente, che dimostra che quando il modulo viene caricato, il valore nella casella di testo Booking Amount
è precompilato con un valore specificato:
Aggiungere la seguente riga di codice, come spiegato nella sezione create-custom-function, per attivare il campo specificato quando si fa clic sul pulsante Submit
.:
code language-javascript |
---|
|
Aggiungiamo una regola al pulsante Submit
per impostare lo stato attivo sul campo della casella di testo Email ID
quando si fa clic su di esso:
Fare riferimento alla schermata seguente, che dimostra che quando si fa clic sul pulsante Submit
, lo stato attivo è impostato sul campo Email ID
:
note note |
---|
NOTE |
È possibile utilizzare il parametro facoltativo $focusOption se si desidera concentrarsi sul campo successivo o precedente relativo al campo email . |
dispatchEvent
Aggiungi la seguente riga di codice, come spiegato nella sezione create-custom-function, per aggiungere un pannello quando fai clic sul pulsante Add Traveler
utilizzando la proprietà dispatchEvent
:
code language-javascript |
---|
|
Aggiungiamo una regola al pulsante Add Traveler
per aggiungere il pannello ripetibile quando viene fatto clic:
Fare riferimento al file GIF riportato di seguito, a dimostrazione che quando si fa clic sul pulsante Add Traveler
, il pannello viene aggiunto utilizzando la proprietà dispatchEvent
:
Analogamente, aggiungere la seguente riga di codice, come spiegato nella sezione create-custom-function, per eliminare un pannello quando si fa clic sul pulsante Delete Traveler
utilizzando la proprietà dispatchEvent
:
code language-javascript |
---|
|
Aggiungiamo una regola al pulsante Delete Traveler
per eliminare il pannello ripetibile quando viene selezionato:
Fare riferimento al file GIF riportato di seguito, a dimostrazione che quando si fa clic sul pulsante Delete Traveler
, il pannello del viaggiatore viene eliminato utilizzando la proprietà dispatchEvent
:
Supporto della memorizzazione in cache per la funzione personalizzata
Forms adattivo implementa il caching per le funzioni personalizzate per migliorare il tempo di risposta durante il recupero dell’elenco delle funzioni personalizzate nell’editor di regole. Nel file error.log
viene visualizzato il messaggio Fetched following custom functions list from cache
.
Se le funzioni personalizzate vengono modificate, la memorizzazione in cache viene invalidata e analizzata.
Risoluzione dei problemi troubleshooting
-
Se il gestore di invio personalizzato non funziona come previsto nei progetti o moduli AEM esistenti, effettua le seguenti operazioni:
-
Verificare che la versione dei componenti core sia aggiornata a 3.0.18 e versioni successive. Tuttavia, per i progetti e i moduli AEM esistenti, vi sono ulteriori passi da seguire:
-
Per il progetto AEM, l'utente deve sostituire tutte le istanze di
submitForm('custom:submitSuccess', 'custom:submitError')
consubmitForm()
e distribuire il progetto tramite la pipeline Cloud Manager. -
Per i moduli esistenti, se i gestori di invio personalizzati non funzionano correttamente, l'utente deve aprire e salvare la regola
submitForm
sul pulsante Invia utilizzando l'editor di regole. Questa azione sostituisce la regola esistente disubmitForm('custom:submitSuccess', 'custom:submitError')
consubmitForm()
nel modulo.
-
-
Se il file JavaScript contenente il codice per le funzioni personalizzate presenta un errore, le funzioni personalizzate non sono elencate nell’editor delle regole di un modulo adattivo. Per verificare l'elenco delle funzioni personalizzate, è possibile individuare l'errore nel file
error.log
. In caso di errore, l’elenco delle funzioni personalizzate appare vuoto:In caso di errore, la funzione personalizzata viene recuperata e visualizzata nel file
error.log
. Nel fileerror.log
viene visualizzato il messaggioFetched following custom functions list
:
Considerazioni
-
parameter type
ereturn type
non supportanoNone
. -
Le funzioni non supportate nell'elenco delle funzioni personalizzate sono:
- Funzioni del generatore
- Funzioni Async/Await
- Definizioni dei metodi
- Metodi di classe
- Parametri predefiniti
- Parametri rimanenti
Consulta anche see-also
- Creare un modulo adattivo di AEM
- Aggiungere un modulo adattivo AEM a una pagina AEM Sites
- Applicare i temi a un modulo adattivo AEM
- Aggiungere componenti a un modulo adattivo di AEM
- Utilizzare il CAPTCHA in un modulo adattivo AEM
- Generare la versione PDF (DoR) di un modulo adattivo AEM
- Tradurre un modulo adattivo di AEM
- Abilitare Adobe Analytics per un modulo adattivo per tenere traccia dell’utilizzo dei moduli
- Collegare un modulo adattivo a Microsoft SharePoint
- Collegare un modulo adattivo a Microsoft Power Automate
- Collegare un modulo adattivo a Microsoft OneDrive
- Collegare un modulo adattivo all’archiviazione BLOB di Microsoft Azure
- Collegare un modulo adattivo a Salesforce
- Utilizzare Adobe Sign in un modulo adattivo di AEM
- Aggiungere una nuova lingua per un modulo adattivo
- Inviare dati del modulo adattivo a un database
- Inviare dati del modulo adattivo a un endpoint REST
- Inviare dati del modulo adattivo al flusso di lavoro di AEM
- Utilizzare il portale dei moduli per elencare moduli adattivi di AEM su un sito web di AEM
- Aggiungere versioni, commenti e annotazioni a un modulo adattivo
- Confrontare i moduli adattivi