Benutzerdefinierte Funktionen in Adaptive Forms (Kernkomponenten)
Einführung
AEM Forms unterstützt benutzerdefinierte Funktionen, mit denen Benutzer JavaScript-Funktionen zur Implementierung komplexer Geschäftsregeln definieren können. Diese benutzerdefinierten Funktionen erweitern die Funktionen von Formularen, indem sie die Manipulation und Verarbeitung der eingegebenen Daten zur Erfüllung bestimmter Anforderungen erleichtern. Sie ermöglichen auch eine dynamische Änderung des Formularverhaltens basierend auf vordefinierten Kriterien.
Verwendung benutzerdefinierter Funktionen uses-of-custom-function
Die Verwendung benutzerdefinierter Funktionen in Adaptive Forms bietet folgende Vorteile:
- Datenverarbeitung: Benutzerdefinierte Funktionen helfen bei der Verarbeitung der in die Formularfelder eingegebenen Daten.
- Validierung der Daten: Benutzerdefinierte Funktionen ermöglichen es Ihnen, benutzerdefinierte Prüfungen für Formulareingaben durchzuführen und bestimmte Fehlermeldungen anzugeben.
- Dynamisches Verhalten: Mit benutzerdefinierten Funktionen können Sie das dynamische Verhalten Ihrer Formulare anhand bestimmter Bedingungen steuern. Beispielsweise können Sie Felder ein-/ausblenden, Feldwerte ändern oder die Formularlogik dynamisch anpassen.
- Integration: Sie können benutzerdefinierte Funktionen zur Integration mit externen APIs oder Diensten verwenden. Dies hilft beim Abrufen von Daten aus externen Quellen, beim Senden von Daten an externe REST-Endpunkte oder beim Ausführen benutzerdefinierter Aktionen basierend auf externen Ereignissen.
Benutzerdefinierte Funktionen sind im Wesentlichen Client-Bibliotheken, die in der JavaScript-Datei hinzugefügt werden. Nachdem Sie eine benutzerdefinierte Funktion erstellt haben, steht sie im Regeleditor zur Auswahl durch den Benutzer in einem adaptiven Formular zur Verfügung. Die benutzerdefinierten Funktionen werden durch die JavaScript-Anmerkungen im Regeleditor identifiziert.
Unterstützte JavaScript-Anmerkungen für benutzerdefinierte Funktionen js-annotations
JavaScript-Anmerkungen werden verwendet, um Metadaten für JavaScript-Code bereitzustellen. Es enthält Kommentare, die mit bestimmten Symbolen beginnen, z. B. /** und @. Die Anmerkungen enthalten wichtige Informationen zu Funktionen, Variablen und anderen Elementen im Code. Das adaptive Formular unterstützt die folgenden JavaScript-Anmerkungen für benutzerdefinierte Funktionen:
Name
Der Name wird verwendet, um die benutzerdefinierte Funktion im Regeleditor eines adaptiven Formulars zu identifizieren. Die folgenden Syntaxen werden verwendet, um eine benutzerdefinierte Funktion zu benennen:
@name [functionName] <Function Name>
@function [functionName] <Function Name>
@func [functionName] <Function Name>
.functionName
ist der Name der Funktion. Leerzeichen sind nicht zulässig.<Function Name>
ist der Anzeigename der Funktion im Regeleditor eines adaptiven Formulars.
Wenn der Name der Funktion mit dem Namen der Funktion selbst übereinstimmt, können Sie in der Syntax den Wert "[functionName]
" weglassen.
Parameter
Der Parameter ist eine Liste von Argumenten, die von benutzerdefinierten Funktionen verwendet werden. Eine Funktion kann mehrere Parameter unterstützen. Die folgenden Syntaxen werden verwendet, um einen Parameter in einer benutzerdefinierten Funktion zu definieren:
-
@param {type} name <Parameter Description>
-
@argument
{type} name <Parameter Description>
-
@arg
{type}
name <Parameter Description>
.{type}
steht für den Parametertyp. Zulässige Parametertypen sind:- string: Stellt einen einzelnen Zeichenfolgenwert dar.
- number: Stellt einen einzelnen numerischen Wert dar.
- boolean: Stellt einen einzelnen booleschen Wert dar (true oder false).
- string[]: Stellt ein Array von Zeichenfolgenwerten dar.
- number[]: Stellt ein Array numerischer Werte dar.
- boolean[]: Stellt ein Array boolescher Werte dar.
- date: Stellt einen einzelnen Datumswert dar.
- date[]: Stellt ein Array von Datumswerten dar.
- array: Stellt ein generisches Array dar, das Werte verschiedener Typen enthält.
- object: Stellt ein an eine benutzerdefinierte Funktion übergebenes Formularobjekt dar, anstatt dessen Wert direkt weiterzugeben.
- scope: Stellt das global -Objekt dar, das schreibgeschützte Variablen wie Formularinstanzen, Zielfeldinstanzen und Methoden zum Ausführen von Formularänderungen innerhalb benutzerdefinierter Funktionen enthält. Sie wird als letzter Parameter in JavaScript-Anmerkungen deklariert und ist im Regeleditor eines adaptiven Formulars nicht sichtbar. Der Parameter scope greift auf das Objekt des Formulars oder der Komponente zu, um die für die Formularverarbeitung erforderliche Regel oder das Ereignis Trigger. Weitere Informationen zum Globals-Objekt und dessen Verwendung finden Sie unter Klicken Sie hier.
Beim Parametertyp wird nicht zwischen Groß- und Kleinschreibung unterschieden und Leerzeichen sind im Parameternamen nicht zulässig.
<Parameter Description>
enthält Details zum Zweck des Parameters. Es kann mehrere Wörter enthalten.
Optionale Parameter
Standardmäßig sind alle Parameter obligatorisch. Sie können einen Parameter als optional definieren, indem Sie entweder =
nach dem Parametertyp hinzufügen oder den Parameternamen in []
einschließen. Parameter, die in JavaScript-Anmerkungen als optional definiert wurden, werden im Regeleditor als optional angezeigt.
Um eine Variable als optionalen Parameter zu definieren, können Sie eine der folgenden Syntaxen verwenden:
@param {type=} Input1
In der obigen Codezeile ist Input1
ein optionaler Parameter ohne Standardwert. So deklarieren Sie einen optionalen Parameter mit dem Standardwert:@param {string=<value>} input1
input1
als optionalen Parameter verwenden, wobei der Standardwert auf value
festgelegt ist.
@param {type} [Input1]
In der obigen Codezeile ist Input1
ein optionaler Parameter ohne Standardwert. So deklarieren Sie einen optionalen Parameter mit dem Standardwert:@param {array} [input1=<value>]
input1
ist ein optionaler Parameter des Array-Typs, dessen Standardwert auf value
festgelegt ist.
Stellen Sie sicher, dass der Parametertyp in geschweifte Klammern {} eingeschlossen ist und der Parametername in eckigen Klammern eingeschlossen ist.
Betrachten Sie das folgende Code-Snippet, bei dem input2 als optionaler Parameter definiert ist:
/**
* 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;
}
Die folgende Abbildung zeigt die Verwendung der benutzerdefinierten Funktion OptionalParameterFunction
im Regeleditor:
Sie können die Regel speichern, ohne einen Wert für die erforderlichen Parameter anzugeben. Die Regel wird jedoch nicht ausgeführt und es wird eine Warnmeldung angezeigt, wie folgt:
Wenn der Benutzer den optionalen Parameter leer lässt, wird der Wert "Undefined"an die benutzerdefinierte Funktion für den optionalen Parameter übergeben.
Um mehr über das Definieren optionaler Parameter in JSDocs zu erfahren, klicken Sie hier auf.
Rückgabetyp
Der Rückgabetyp gibt den Typ des Werts an, den die benutzerdefinierte Funktion nach der Ausführung zurückgibt. Die folgenden Syntaxen werden verwendet, um einen Rückgabetyp in einer benutzerdefinierten Funktion zu definieren:
-
@return {type}
-
@returns {type}
{type}
steht für den Rückgabetyp der Funktion. Zulässige Rückgabetypen sind:- string: Stellt einen einzelnen Zeichenfolgenwert dar.
- number: Stellt einen einzelnen numerischen Wert dar.
- boolean: Stellt einen einzelnen booleschen Wert dar (true oder false).
- string[]: Stellt ein Array von Zeichenfolgenwerten dar.
- number[]: Stellt ein Array numerischer Werte dar.
- boolean[]: Stellt ein Array boolescher Werte dar.
- date: Stellt einen einzelnen Datumswert dar.
- date[]: Stellt ein Array von Datumswerten dar.
- array: Stellt ein generisches Array dar, das Werte verschiedener Typen enthält.
- object: Stellt direkt das Formularobjekt anstelle des Werts dar.
Beim Rückgabetyp wird nicht zwischen Groß- und Kleinschreibung unterschieden.
Privat
Die als privat deklarierte benutzerdefinierte Funktion wird nicht in der Liste der benutzerdefinierten Funktionen im Regeleditor eines adaptiven Formulars angezeigt. Standardmäßig sind benutzerdefinierte Funktionen öffentlich. Die Syntax zum Deklarieren der benutzerdefinierten Funktion als privat lautet @private
.
Richtlinien beim Erstellen benutzerdefinierter Funktionen
Um die benutzerdefinierten Funktionen im Regeleditor aufzulisten, können Sie eines der folgenden Formate verwenden:
Funktionsanweisung mit oder ohne jsdoc-Kommentare
Sie können eine benutzerdefinierte Funktion mit oder ohne jsdoc-Kommentare erstellen.
function functionName(parameters)
{
// code to be executed
}
Wenn der Benutzer der benutzerdefinierten Funktion keine JavaScript-Anmerkungen hinzufügt, wird sie im Regeleditor anhand ihres Funktionsnamens aufgelistet. Es wird jedoch empfohlen, JavaScript-Anmerkungen einzubeziehen, um die Lesbarkeit der benutzerdefinierten Funktionen zu verbessern.
Pfeilfunktion mit obligatorischen JavaScript-Anmerkungen oder Kommentaren
Sie können eine benutzerdefinierte Funktion mit einer Pfeilfunktionssyntax erstellen:
/**
* 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;
Wenn der Benutzer der benutzerdefinierten Funktion keine JavaScript-Anmerkungen hinzufügt, wird die benutzerdefinierte Funktion nicht im Regeleditor eines adaptiven Formulars aufgeführt.
Funktionsausdruck mit obligatorischen JavaScript-Anmerkungen oder Kommentaren
Um benutzerdefinierte Funktionen im Regeleditor eines adaptiven Formulars aufzulisten, erstellen Sie benutzerdefinierte Funktionen im folgenden Format:
/**
* test function
* @name testFunction
* @param {string} input1 parameter description
* @param {string=} input2 parameter description
* @return {string}
*/
testFunction = function(input1,input2)
{
// code to be executed
}
Wenn der Benutzer der benutzerdefinierten Funktion keine JavaScript-Anmerkungen hinzufügt, wird die benutzerdefinierte Funktion nicht im Regeleditor eines adaptiven Formulars aufgeführt.
Erstellen einer benutzerdefinierten Funktion create-custom-function
Erstellen Sie eine Client-Bibliothek, um benutzerdefinierte Funktionen im Regeleditor aufzurufen. Weitere Informationen finden Sie unter Verwenden Client-seitiger Bibliotheken.
Schritte zum Erstellen benutzerdefinierter Funktionen:
Voraussetzungen für die Erstellung einer benutzerdefinierten Funktion
Bevor Sie mit dem Hinzufügen einer benutzerdefinierten Funktion zu Ihrem adaptiven Forms beginnen, stellen Sie Folgendes sicher:
Software:
-
Nur-Text-Editor (IDE): Obwohl jeder Nur-Text-Editor funktionieren kann, bietet eine integrierte Entwicklungsumgebung (IDE) wie Microsoft Visual Studio Code erweiterte Funktionen zur einfacheren Bearbeitung.
-
Git: Dieses Versionskontrollsystem ist für die Verwaltung von Code-Änderungen erforderlich. Wenn Sie es nicht installiert haben, laden Sie es von https://git-scm.com herunter.
Erstellen einer Client-Bibliothek create-client-library
Sie können benutzerdefinierte Funktionen hinzufügen, indem Sie eine Client-Bibliothek hinzufügen. Um eine Client-Bibliothek zu erstellen, führen Sie die folgenden Schritte aus:
Repository klonen
Klonen Sie Ihr AEM Forms as a Cloud Service-Repository:
-
Öffnen Sie die Befehlszeile oder ein Terminal-Fenster.
-
Navigieren Sie zum gewünschten Speicherort auf Ihrem Computer, auf dem Sie das Repository speichern möchten.
-
Führen Sie den folgenden Befehl aus, um das Repository zu klonen:
git clone [Git Repository URL]
Mit diesem Befehl wird das Repository heruntergeladen und ein lokaler Ordner des geklonten Repositorys auf Ihrem Computer erstellt. In diesem Handbuch wird dieser Ordner als das AEMaaCS-Projektverzeichnis ] bezeichnet.[
Hinzufügen eines Client-Bibliotheksordners
Gehen Sie wie folgt vor, um den neuen Client-Bibliotheksordner zum AEMaaCS-Projektverzeichnis ] hinzuzufügen:[
-
Öffnen Sie das Verzeichnis [AEMaaCS-Projekt] in einem Editor.
-
Suchen Sie
ui.apps
. -
Fügen Sie neuen Ordner hinzu. Fügen Sie beispielsweise einen Ordner mit dem Namen
experience-league
hinzu. -
Navigieren Sie zum Ordner "
/experience-league/
"und fügen Sie den Ordner "ClientLibraryFolder
"hinzu. Erstellen Sie beispielsweise einen Client-Bibliotheksordner mit dem Namen "customclientlibs
".Location is: [AEMaaCS project directory]/ui.apps/src/main/content/jcr_root/apps/
Hinzufügen von Dateien und Ordnern zum Ordner "Client-Bibliothek"
Fügen Sie dem hinzugefügten Client-Bibliotheksordner Folgendes hinzu:
- .content.xml-Datei
- js.txt-Datei
- js-Ordner
Location is: [AEMaaCS project directory]/ui.apps/src/main/content/jcr_root/apps/experience-league/customclientlibs/
-
Fügen Sie in den
.content.xml
die folgenden Codezeilen hinzu: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 Sie können einen beliebigen Namen für die Eigenschaften client library folder
undcategories
auswählen. -
Fügen Sie in den
js.txt
die folgenden Codezeilen hinzu:code language-javascript #base=js function.js
-
Fügen Sie im Ordner
js
die JavaScript-Datei alsfunction.js
hinzu, die die benutzerdefinierten Funktionen enthält: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; }
-
Speichern Sie die Dateien.
Fügen Sie den neuen Ordner in filter.xml ein:
-
Navigieren Sie zur Datei
/ui.apps/src/main/content/META-INF/vault/filter.xml
in Ihrem [AEMaaCS-Projektverzeichnis]. -
Öffnen Sie die Datei und fügen Sie die folgende Zeile am Ende ein:
<filter root="/apps/experience-league" />
-
Speichern Sie die Datei.
Stellen Sie den neu erstellten Client-Bibliotheksordner in Ihrer AEM-Umgebung bereit
Stellen Sie das [AEMaaCS Projektverzeichnis] von AEM as a Cloud Service in Ihrer Cloud Service-Umgebung bereit. So stellen Sie es in Ihrer Cloud Service-Umgebung bereit:
-
Übergeben Sie die Änderungen
- Fügen Sie die Änderungen mit den folgenden Befehlen hinzu, übertragen Sie sie und pushen Sie sie in das Repository:
code language-javascript git add . git commit -a -m "Adding custom functions" git push
-
Stellen Sie den aktualisierten Code bereit:
- Trigger einer Bereitstellung Ihres Codes über die vorhandene Vollstapelpipeline. Dadurch wird der aktualisierte Code automatisch erstellt und bereitgestellt.
Wenn Sie noch keine Pipeline eingerichtet haben, lesen Sie das Handbuch zur Einrichtung einer Pipeline für AEM Forms as a Cloud Service.
Sobald die Pipeline erfolgreich ausgeführt wurde, ist die benutzerdefinierte Funktion, die in der Client-Bibliothek hinzugefügt wurde, im Regeleditor für adaptive Formulare verfügbar.
Clientbibliothek zu einem adaptiven Formular hinzufügen use-custom-function
Nachdem Sie Ihre Client-Bibliothek in Ihrer Forms CS-Umgebung bereitgestellt haben, verwenden Sie die zugehörigen Funktionen in Ihrem adaptiven Formular. Hinzufügen der Client-Bibliothek zum adaptiven Formular
-
Öffnen Sie das Formular im Bearbeitungsmodus. Um ein Formular im Bearbeitungsmodus zu öffnen, wählen Sie ein Formular aus und klicken Sie auf Bearbeiten.
-
Öffnen Sie den Inhalts-Browser und wählen Sie die Guide-Container-Komponente Ihres adaptiven Formulars aus.
-
Klicken Sie auf das Symbol für die Guide-Container-Eigenschaften . Das Dialogfeld „Container für ein adaptives Formular“ wird geöffnet.
-
Öffnen Sie die Registerkarte Einfach und wählen Sie den Namen der Kategorie Client-Bibliothek aus der Dropdownliste aus (wählen Sie in diesem Fall
customfunctionscategory
aus).note note NOTE Es können mehrere Kategorien hinzugefügt werden, indem eine kommagetrennte Liste innerhalb des Felds Kategorie der Client-Bibliothek angegeben wird. -
Klicken Sie auf Fertig.
Sie können die benutzerdefinierte Funktion im Regeleditor eines adaptiven Formulars mit den Anmerkungen in JavaScript verwenden.
Verwenden einer benutzerdefinierten Funktion in einem adaptiven Formular
In einem adaptiven Formular können Sie benutzerdefinierte Funktionen im Regeleditor verwenden. Fügen Sie der JavaScript-Datei (Function.js
) den folgenden Code hinzu, um das Alter basierend auf dem Geburtsdatum (JJJ-MM-TT) zu berechnen. Erstellen Sie eine benutzerdefinierte Funktion als calculateAge()
, die das Geburtsdatum als Eingabe annimmt und das Alter zurückgibt:
/**
* 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;
}
Wenn der Benutzer im obigen Beispiel das Geburtsdatum im Format JJJ-MM-TT eingibt, wird die benutzerdefinierte Funktion calculateAge
aufgerufen und das Alter zurückgegeben.
Sehen wir uns das Formular in der Vorschau an, um zu sehen, wie die benutzerdefinierten Funktionen über den Regeleditor implementiert werden:
Festlegen von Dropdown-Listenoptionen mit benutzerdefinierten Funktionen
Der Regeleditor in den Kernkomponenten unterstützt die Eigenschaft Optionen von nicht zum Festlegen der Dropdown-Listenoptionen zur Laufzeit. Sie können die Optionen der Dropdown-Liste jedoch mit benutzerdefinierten Funktionen festlegen.
Sehen Sie sich den folgenden Code an, um zu sehen, wie wir die Dropdown-Listenoptionen mithilfe benutzerdefinierter Funktionen festlegen können:
/**
* @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"];
}
Im obigen Code wird setEnums
verwendet, um die Eigenschaft enum
festzulegen, und setEnumNames
wird verwendet, um die Eigenschaft enumNames
der Dropdown-Liste festzulegen.
Erstellen wir eine Regel für die Schaltfläche Next
, die den Wert der Dropdown-Listenoption festlegt, wenn der Benutzer auf die Schaltfläche Next
klickt:
In der folgenden Abbildung sehen Sie, wo die Optionen der Dropdown-Liste beim Klicken auf die Schaltfläche Anzeigen eingestellt sind:
Unterstützung für asynchrone Funktionen in benutzerdefinierten Funktionen support-of-async-functions
Asynchrone benutzerdefinierte Funktionen werden nicht in der Liste des Regeleditors angezeigt. Es ist jedoch möglich, asynchrone Funktionen innerhalb benutzerdefinierter Funktionen aufzurufen, die mit synchronen Funktionsausdrücken erstellt wurden.
Im folgenden Code erfahren Sie, wie Sie asynchrone Funktionen mit benutzerdefinierten Funktionen aufrufen können:
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);
});
}
Im obigen Beispiel ist die asyncFunction-Funktion ein asynchronous function
. Es führt einen asynchronen Vorgang durch, indem eine GET
-Anfrage an https://petstore.swagger.io/v2/store/inventory
gesendet wird. Er wartet mit await
auf die Antwort, analysiert den Antworttext mit dem response.json()
als JSON und gibt dann die Daten zurück. Die Funktion callAsyncFunction
ist eine synchrone benutzerdefinierte Funktion, die die Funktion asyncFunction
aufruft und die Antwortdaten in der Konsole anzeigt. Obwohl die Funktion callAsyncFunction
synchron ist, ruft sie die asynchrone asyncFunction-Funktion auf und verarbeitet ihr Ergebnis mit then
- und catch
-Anweisungen.
Um seine Funktionsweise zu sehen, fügen wir eine Schaltfläche hinzu und erstellen eine Regel für die Schaltfläche, die die asynchrone Funktion bei einem Klick auf eine Schaltfläche aufruft.
In der Abbildung unten finden Sie das Konsolenfenster, um zu zeigen, dass beim Klicken auf die Schaltfläche Fetch
die benutzerdefinierte Funktion callAsyncFunction
aufgerufen wird, die wiederum eine asynchrone Funktion asyncFunction
aufruft. Inspect Sie das Konsolenfenster, um die Antwort auf die Schaltfläche anzuzeigen. Klicken Sie auf:
Im Folgenden werden die Funktionen von benutzerdefinierten Funktionen vorgestellt.
Verschiedene Funktionen für benutzerdefinierte Funktionen
Sie können benutzerdefinierte Funktionen verwenden, um Formularen personalisierte Funktionen hinzuzufügen. Diese Funktionen unterstützen verschiedene Funktionen, wie z. B. das Arbeiten mit bestimmten Feldern, das Verwenden globaler Felder oder das Zwischenspeichern. Diese Flexibilität ermöglicht es Ihnen, Formulare entsprechend den Anforderungen Ihres Unternehmens anzupassen.
Felder und globale Perimeter in benutzerdefinierten Funktionen support-field-and-global-objects
Feldobjekte beziehen sich auf die einzelnen Komponenten oder Elemente in einem Formular, z. B. Textfelder und Kontrollkästchen. Das Globals -Objekt enthält schreibgeschützte Variablen wie Formularinstanz, Zielfeldinstanz und Methoden zum Durchführen von Formularänderungen in benutzerdefinierten Funktionen.
param {scope} globals
muss der letzte Parameter sein und wird nicht im Regeleditor eines adaptiven Formulars angezeigt.Im Folgenden erfahren wir, wie benutzerdefinierte Funktionen mithilfe eines Contact Us
-Formulars mithilfe verschiedener Anwendungsfälle Felder und globale Objekte verwenden.
SetProperty
-RegelFügen Sie den folgenden Code in der benutzerdefinierten Funktion hinzu, wie im Abschnitt create-custom-function beschrieben, um das Formularfeld auf Required
festzulegen.
code language-javascript |
---|
|
note note |
---|
NOTE |
|
In diesem Beispiel wird das Bedienfeld personaldetails
durch Klicken auf die Schaltfläche überprüft. Wenn im Bedienfeld keine Fehler erkannt werden, wird ein weiteres Bedienfeld, das Bedienfeld feedback
, beim Klicken auf die Schaltfläche angezeigt.
Erstellen wir eine Regel für die Schaltfläche Next
, die das Bedienfeld personaldetails
validiert und den Bereich feedback
sichtbar macht, wenn der Benutzer auf die Schaltfläche Next
klickt.
In der folgenden Abbildung sehen Sie, wo das Bedienfeld personaldetails
beim Klicken auf die Schaltfläche Next
validiert wird. Falls alle Felder innerhalb der personaldetails
validiert werden, wird das Bedienfeld feedback
angezeigt.
Wenn Fehler in den Feldern des Bereichs personaldetails
vorhanden sind, werden sie beim Klicken auf die Schaltfläche Next
auf Feldebene angezeigt und das Bedienfeld feedback
bleibt unsichtbar.
Fügen Sie den folgenden Code in der benutzerdefinierten Funktion hinzu, wie im Abschnitt create-custom-function beschrieben, um das Feld zu validieren.
code language-javascript |
---|
|
note note |
---|
NOTE |
Wenn in der Funktion validate() kein Argument übergeben wird, wird das Formular validiert. |
In diesem Beispiel wird ein benutzerdefiniertes Überprüfungsmuster auf das Feld contact
angewendet. Benutzer müssen eine Telefonnummer eingeben, die mit 10
gefolgt von 8
Ziffern beginnt. Wenn der Benutzer eine Telefonnummer eingibt, die nicht mit 10
beginnt oder mehr oder weniger als 8
Ziffern enthält, wird beim Klicken auf die Schaltfläche eine Überprüfungsfehlermeldung angezeigt:
Der nächste Schritt besteht darin, eine Regel für die Schaltfläche Next
zu erstellen, die das Feld contact
beim Klicken auf die Schaltfläche validiert.
Beachten Sie die folgende Abbildung, um zu zeigen, dass eine Fehlermeldung auf Feldebene angezeigt wird, wenn der Benutzer eine Telefonnummer eingibt, die nicht mit 10
beginnt:
Wenn der Benutzer eine gültige Telefonnummer eingibt und alle Felder im Bedienfeld personaldetails
validiert werden, wird das Bedienfeld feedback
auf dem Bildschirm angezeigt:
Fügen Sie den folgenden Code in der benutzerdefinierten Funktion hinzu, wie im Abschnitt create-custom-function beschrieben, um den Bereich zurückzusetzen.
code language-javascript |
---|
|
note note |
---|
NOTE |
Wenn in der Funktion reset() kein Argument übergeben wird, wird das Formular validiert. |
In diesem Beispiel wird das Bedienfeld personaldetails
beim Klicken auf die Schaltfläche Clear
zurückgesetzt. Als Nächstes erstellen Sie eine Regel für die Schaltfläche Clear
, mit der das Bedienfeld auf die Schaltfläche zurückgesetzt wird.
In der folgenden Abbildung sehen Sie, dass der Bereich personaldetails
zurückgesetzt wird, wenn der Benutzer auf die Schaltfläche clear
klickt:
Mit der Funktion markFieldAsInvalid()
können Sie ein Feld als ungültig definieren und eine benutzerdefinierte Fehlermeldung auf Feldebene festlegen. Der fieldIdentifier
-Wert kann fieldId
, field qualifiedName
oder field dataRef
sein. Der Wert des Objekts option
kann {useId: true}
, {useQualifiedName: true}
oder {useDataRef: true}
sein.
Die Syntax, mit der ein Feld als ungültig markiert und eine benutzerdefinierte Nachricht festgelegt wird, lautet:
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});
Fügen Sie den folgenden Code in der benutzerdefinierten Funktion hinzu, wie im Abschnitt create-custom-function beschrieben, um eine benutzerdefinierte Nachricht auf Feldebene zu aktivieren.
code language-javascript |
---|
|
In diesem Beispiel wird eine benutzerdefinierte Meldung auf Feldebene angezeigt, wenn der Benutzer weniger als 15 Zeichen in das Textfeld "Kommentare"eingibt.
Der nächste Schritt besteht darin, eine Regel für das Feld comments
zu erstellen:
Sehen Sie sich die unten stehende Demonstration an, um anzuzeigen, dass die Anzeige einer benutzerdefinierten Nachricht auf Feldebene durch die Eingabe von negativem Feedback im Feld comments
Trigger wird:
Wenn der Benutzer mehr als 15 Zeichen in das Textfeld "Kommentare"eingibt, wird das Feld validiert und das Formular wird gesendet:
Die folgende Codezeile:globals.functions.submitForm(globals.functions.exportData(), false);
wird verwendet, um die Formulardaten nach der Bearbeitung zu senden.
- Das erste Argument sind die zu übermittelnden Daten.
- Das zweite Argument stellt dar, ob das Formular vor der Übermittlung validiert werden soll. Er ist
optional
und standardmäßig alstrue
festgelegt. - Das dritte Argument ist der
contentType
der Übermittlung, der ebenfalls optional ist, wobei der Standardwertmultipart/form-data
lautet. Die anderen Werte könnenapplication/json
undapplication/x-www-form-urlencoded
sein.
Fügen Sie den folgenden Code in der benutzerdefinierten Funktion hinzu, wie im Abschnitt create-custom-function beschrieben, um die bearbeiteten Daten an den Server zu senden:
code language-javascript |
---|
|
Wenn der Benutzer in diesem Beispiel das Textfeld comments
leer lässt, wird der NA
beim Senden des Formulars an den Server gesendet.
Erstellen Sie nun eine Regel für die Submit
-Schaltfläche, mit der Daten gesendet werden:
In der Abbildung unten finden Sie die console window
, die zeigt, dass der Wert als NA
auf dem Server gesendet wird, wenn der Benutzer das Textfeld comments
leer lässt:
Sie können auch das Konsolenfenster überprüfen, um die an den Server gesendeten Daten anzuzeigen:
Fügen Sie die folgende Codezeile hinzu, wie im Abschnitt create-custom-function beschrieben, um die Übermittlung oder Fehlermeldung für Formularübermittlungen anzupassen und die Meldungen für Formularübermittlungen in einem modalen Feld anzuzeigen:
code language-javascript |
---|
|
In diesem Beispiel werden die Erfolgs- und Fehlermeldungen in einem Modal angezeigt, wenn der Benutzer die benutzerdefinierten Funktionen customSubmitSuccessHandler
und customSubmitErrorHandler
verwendet. Die JavaScript-Funktion showModal(type, message)
wird verwendet, um ein modales Dialogfeld dynamisch zu erstellen und auf einem Bildschirm anzuzeigen.
Erstellen Sie nun eine Regel für die erfolgreiche Formularübermittlung:
In der unten stehenden Abbildung sehen Sie, wie die Erfolgsmeldung bei erfolgreicher Übermittlung des Formulars in einem Modal dargestellt wird:
Erstellen Sie eine Regel für fehlgeschlagene Formularübermittlungen:
In der folgenden Abbildung sehen Sie, dass die Fehlermeldung in einem Modal angezeigt wird, wenn die Formularübermittlung fehlschlägt:
Um den Erfolg und das Fehlschlagen der Formularübermittlung standardmäßig anzuzeigen, sind die Funktionen Default submit Form Success Handler
und Default submit Form Error Handler
standardmäßig verfügbar.
Falls der benutzerdefinierte Übermittlungs-Handler nicht wie erwartet in vorhandenen AEM Projekten oder Formularen ausgeführt werden kann, lesen Sie den Abschnitt Fehlerbehebung .
Regeln, die mit dem visuellen Regeleditor in einem wiederholbaren Bereich erstellt wurden, gelten für die letzte Instanz des wiederholbaren Bereichs. Um eine Regel für eine bestimmte Instanz des wiederholbaren Bereichs zu schreiben, können wir eine benutzerdefinierte Funktion verwenden.
Erstellen wir ein anderes Formular, um Informationen über Reisende zu sammeln, die zu einem Ziel fahren. Ein Reisende-Bedienfeld wird als wiederholbares Bedienfeld hinzugefügt, in dem der Benutzer mithilfe der Schaltfläche Add Traveler
Details für fünf Reisende hinzufügen kann.
Fügen Sie die folgende Codezeile hinzu, wie im Abschnitt create-custom-function erläutert, um Aktionen in einer bestimmten Instanz des wiederholbaren Bereichs durchzuführen, die nicht der letzte ist:
code language-javascript |
---|
|
In diesem Beispiel führt die benutzerdefinierte Funktion hidePanelInRepeatablePanel
eine Aktion in einer bestimmten Instanz des wiederholbaren Bereichs durch. Im obigen Code stellt travelerinfo
den wiederholbaren Bereich dar. Der Code repeatablePanel[1].traveler, {visible: false}
blendet das Bedienfeld in der zweiten Instanz des wiederholbaren Bedienfelds aus.
Fügen Sie eine Schaltfläche mit der Bezeichnung Hide
hinzu und fügen Sie eine Regel hinzu, um die zweite Instanz eines wiederholbaren Bereichs auszublenden.
Im folgenden Video erfahren Sie, dass beim Klicken auf Hide
der Bereich in der zweiten wiederholbaren Instanz ausgeblendet wird:
embed |
---|
|
Fügen Sie die folgende Codezeile hinzu, wie im Abschnitt create-custom-function erläutert, um den vorausgefüllten Wert in ein Feld zu laden, wenn das Formular initialisiert wird:
code language-javascript |
---|
|
Im oben genannten Code füllt die Funktion testImportData
beim Laden des Formulars das Textfeld Booking Amount
im Voraus aus. Nehmen wir an, das Buchungsformular setzt voraus, dass der Mindestbuchungsbetrag 10,000
ist.
Erstellen wir eine Regel bei der Formularinitialisierung, bei der der Wert im Textfeld Booking Amount
mit einem angegebenen Wert vorausgefüllt wird, wenn das Formular geladen wird:
Im folgenden Screenshot wird gezeigt, dass beim Laden des Formulars der Wert im Textfeld Booking Amount
mit einem angegebenen Wert vorausgefüllt ist:
Fügen Sie die folgende Codezeile hinzu, wie im Abschnitt create-custom-function erläutert, um den Fokus auf das angegebene Feld zu legen, wenn auf die Schaltfläche Submit
geklickt wird:
code language-javascript |
---|
|
Fügen Sie der Schaltfläche Submit
eine Regel hinzu, um den Fokus beim Klicken auf das Textfeld Email ID
festzulegen:
Der folgende Screenshot zeigt, dass beim Klicken auf die Schaltfläche Submit
der Fokus auf das Feld Email ID
gelegt wird:
note note |
---|
NOTE |
Sie können den optionalen Parameter $focusOption verwenden, wenn Sie sich auf das nächste oder vorherige Feld relativ zum Feld email konzentrieren möchten. |
dispatchEvent
hinzu oder löschen Sie sieFügen Sie die folgende Codezeile hinzu, wie im Abschnitt create-custom-function beschrieben, um beim Klicken auf die Schaltfläche Add Traveler
mit der Eigenschaft dispatchEvent
einen Bereich hinzuzufügen:
code language-javascript |
---|
|
Fügen Sie der Schaltfläche Add Traveler
eine Regel hinzu, um das wiederholbare Bedienfeld hinzuzufügen, wenn darauf geklickt wird:
Beachten Sie das folgende GIF-Dokument, das zeigt, dass beim Klicken auf die Schaltfläche Add Traveler
das Bedienfeld mithilfe der Eigenschaft dispatchEvent
hinzugefügt wird:
Fügen Sie auf ähnliche Weise die folgende Codezeile hinzu, wie im Abschnitt create-custom-function beschrieben, um einen Bereich zu löschen, wenn auf die Schaltfläche Delete Traveler
mit der Eigenschaft dispatchEvent
geklickt wird:
code language-javascript |
---|
|
Fügen Sie der Schaltfläche Delete Traveler
eine Regel hinzu, um den wiederholbaren Bereich beim Klicken zu löschen:
Beachten Sie das folgende GIF-Dokument, das zeigt, dass beim Klicken auf die Schaltfläche Delete Traveler
das Reisende-Bedienfeld mithilfe der Eigenschaft dispatchEvent
gelöscht wird:
Caching-Unterstützung für benutzerdefinierte Funktionen
Adaptive Forms implementiert Caching für benutzerdefinierte Funktionen, um die Reaktionszeit beim Abrufen der benutzerdefinierten Funktionsliste im Regeleditor zu verkürzen. Eine Meldung mit dem Wert Fetched following custom functions list from cache
wird in der Datei error.log
angezeigt.
Wenn die benutzerdefinierten Funktionen geändert werden, wird die Zwischenspeicherung invalidiert und analysiert.
Fehlerbehebung troubleshooting
-
Wenn der benutzerdefinierte Übermittlungshandler nicht wie erwartet in bestehenden AEM Projekten oder Formularen ausgeführt werden kann, führen Sie die folgenden Schritte aus:
-
Stellen Sie sicher, dass die Version der Kernkomponenten auf Version 3.0.18 und höher aktualisiert ist. Für bestehende AEM Projekte und Formulare sind jedoch weitere Schritte erforderlich:
-
Für das AEM Projekt sollte der Benutzer alle Instanzen von
submitForm('custom:submitSuccess', 'custom:submitError')
durchsubmitForm()
ersetzen und das Projekt über die Cloud Manager-Pipeline bereitstellen. -
Wenn die benutzerdefinierten Übermittlungs-Handler für vorhandene Formulare nicht ordnungsgemäß funktionieren, muss der Benutzer die Regel
submitForm
mithilfe des Regeleditors auf der Schaltfläche Senden öffnen und speichern. Diese Aktion ersetzt die vorhandene Regel vonsubmitForm('custom:submitSuccess', 'custom:submitError')
durchsubmitForm()
im Formular.
-
-
Wenn die JavaScript-Datei mit dem Code für benutzerdefinierte Funktionen einen Fehler enthält, werden die benutzerdefinierten Funktionen nicht im Regeleditor eines adaptiven Formulars aufgeführt. Um die Liste der benutzerdefinierten Funktionen zu überprüfen, können Sie zur Datei
error.log
für den Fehler navigieren. Im Fall eines Fehlers wird die Liste der benutzerdefinierten Funktionen leer angezeigt:Wenn kein Fehler auftritt, wird die benutzerdefinierte Funktion abgerufen und in der Datei "
error.log
"angezeigt. In der Dateierror.log
wird eine Meldung mit dem WertFetched following custom functions list
angezeigt:
Überlegungen
-
Die
parameter type
undreturn type
unterstützenNone
nicht. -
Folgende Funktionen werden in der benutzerdefinierten Funktionsliste nicht unterstützt:
- Generator-Funktionen
- Async/Await-Funktionen
- Methodendefinitionen
- Klassenmethoden
- Standardparameter
- REST-Parameter
Siehe auch see-also
- Erstellen eines adaptiven AEM-Formulars
- Hinzufügen eines adaptiven AEM-Formulars zu einer AEM Sites-Seite
- Anwenden von Designs auf ein adaptives AEM-Formular
- Hinzufügen von Komponenten zu einem adaptiven AEM-Formular
- Verwenden von CAPTCHA in einem adaptiven AEM-Formular
- Generieren der PDF-Version (DoR) eines adaptiven AEM-Formulars
- Übersetzen eines adaptiven AEM-Formulars
- Aktivieren von Adobe Analytics für ein adaptives Formular, um die Formularnutzung zu verfolgen.
- Verbinden eines adaptiven Formulars mit Microsoft SharePoint
- Verbinden eines adaptiven Formulars mit Microsoft Power Automate
- Verbinden eines adaptiven Formulars mit Microsoft OneDrive
- Verbinden eines adaptiven Formulars mit Microsoft Azure Blob Storage
- Verbinden eines adaptiven Formulars mit Salesforce
- Verwenden von Adobe Sign in einem adaptiven AEM-Formular
- Hinzufügen eines neuen Gebietsschemas für ein adaptives Formular
- Senden von Daten adaptiver Formulare an eine Datenbank
- Senden von Daten adaptiver Formulare an einen REST-Endpunkt
- Senden von Daten adaptiver Formulare an einen AEM-Workflow
- Verwenden des Formularportals zur Auflistung von adaptiven AEM-Formularen auf einer AEM-Website
- Hinzufügen von Versionen, Kommentaren und Anmerkungen zu einem adaptiven Formular
- Vergleichen adaptiver Formulare