Anpassade funktioner i adaptiva Forms Core-komponenter

I den här artikeln beskrivs hur du skapar anpassade funktioner med den senaste adaptiva Form Core-komponenten som har de senaste funktionerna, som:

  • Cachelagringsfunktion för anpassade funktioner
  • Globala omfångsobjekt och fältobjekt har stöd för anpassade funktioner
  • Stöd för moderna JavaScript-funktioner som letfunktioner och pilfunktioner (ES10-stöd)

Se till att du ställer in den senaste formulärversionen i AEM Forms Core Component-miljön så att den använder de senaste funktionerna i Anpassade funktioner.

Version
Artikellänk
AEM 6.5
Denna artikel
AEM as a Cloud Service
Klicka här

Introduktion

AEM Forms 6.5 innehåller JavaScript-funktioner som gör att du kan definiera komplexa affärsregler med regelredigeraren. AEM Forms har en mängd färdiga anpassade funktioner, men många användningsområden kräver att man definierar egna funktioner för flera formulär. Dessa anpassade funktioner förbättrar formulärens funktioner genom att möjliggöra hantering och bearbetning av inmatade data för att uppfylla specifika krav. Dessutom kan de dynamiskt ändra formulärbeteende baserat på de fördefinierade villkoren.

Användning av anpassade funktioner uses-of-custom-function

Fördelarna med att använda anpassade funktioner i adaptiva Forms Core-komponenter är:

  • Hantera data: Anpassade funktioner hanterar och bearbetar data som anges i formulärfälten.
  • Databearbetning: Anpassade funktioner hjälper dig att bearbeta data som anges i formulärfälten.
  • Validering av data: Med anpassade funktioner kan du utföra anpassade kontroller av formulärindata och tillhandahålla angivna felmeddelanden.
  • Dynamiskt beteende: Med anpassade funktioner kan du styra det dynamiska beteendet i dina formulär baserat på specifika villkor. Du kan till exempel visa/dölja fält, ändra fältvärden eller justera formulärlogiken dynamiskt.
  • Integration: Du kan använda anpassade funktioner för att integrera med externa API:er eller tjänster. Det hjälper till att hämta data från externa källor, skicka data till externa Rest-slutpunkter eller utföra anpassade åtgärder baserade på externa händelser.

Anpassade funktioner är i huvudsak klientbibliotek som läggs till i JavaScript-filen. När du har skapat en anpassad funktion blir den tillgänglig i regelredigeraren så att användaren kan välja den i ett anpassat formulär. De anpassade funktionerna identifieras av JavaScript kommentarer i regelredigeraren.

JavaScript-anteckningar som stöds för anpassade funktioner js-annotations

JavaScript-anteckningar innehåller metadata för JavaScript-kod. Det innehåller kommentarer som börjar med specifika symboler, till exempel /** och @. Anteckningarna innehåller viktig information om funktioner, variabler och andra element i koden. Adaptiv form stöder följande JavaScript-anteckningar för anpassade funktioner:

Namn

Namn används för att identifiera den anpassade funktionen i regelredigeraren för ett adaptivt formulär. Följande syntaxer används för att namnge en anpassad funktion:

  • @name [functionName] <Function Name>
  • @function [functionName] <Function Name>
  • @func [functionName] <Function Name>
NOTE
[functionName] är namnet på funktionen. Blanksteg är inte tillåtna.
<Function Name> är visningsnamnet för funktionen i regelredigeraren för Adaptiv Forms.
Om funktionsnamnet är identiskt med namnet på själva funktionen kan du utelämna [functionName] från syntaxen.

Parameter

Parametern är en lista med argument som används av anpassade funktioner. En funktion kan ha stöd för flera parametrar. Följande syntaxer används för att definiera en parameter i en anpassad funktion:

  • @param {type} name <Parameter Description>

  • @argument {type} name <Parameter Description>

  • @arg {type} name <Parameter Description>

    {type} representerar parametertypen. Tillåtna parametertyper är:

    • string: Representerar ett enda strängvärde.
    • number: Representerar ett numeriskt värde.
    • booleskt: Representerar ett enskilt booleskt värde (true eller false).
    • sträng []: Representerar en array med strängvärden.
    • tal[]: Representerar en matris med numeriska värden.
    • boolesk[]: Representerar en matris med booleska värden.
    • date: Representerar ett enda datumvärde.
    • date[]: Representerar en matris med datumvärden.
    • array: Representerar en generisk array som innehåller värden av olika typer.
    • object: Representerar formulärobjektet som skickas till en anpassad funktion i stället för att skicka dess värde direkt.
    • omfång: Representerar det globala objektet, som innehåller skrivskyddade variabler som formulärinstanser, målfältsinstanser och metoder för att utföra formulärändringar i de anpassade funktionerna. Den deklareras som den sista parametern i JavaScript anteckningar och är inte synlig för regelredigeraren i ett adaptivt formulär. Omfångsparametern har åtkomst till formulärets eller komponentens objekt för att utlösa den regel eller händelse som krävs för formulärbearbetning. Om du vill ha mer information om det globala objektet och hur du använder det klickar du här

Parametertypen är inte skiftlägeskänslig och blanksteg tillåts inte i parameternamnet.

<Parameter Description> innehåller information om parameterns syfte. Det kan innehålla flera ord.

Returtyp

Returtypen anger vilken typ av värde som den anpassade funktionen returnerar efter körningen. Följande syntaxer används för att definiera en returtyp i en anpassad funktion:

  • @return {type}
  • @returns {type}
    {type} representerar funktionens returtyp. Följande returtyper tillåts:
  • string: Representerar ett enda strängvärde.
  • number: Representerar ett numeriskt värde.
  • booleskt: Representerar ett enskilt booleskt värde (true eller false).
  • sträng []: Representerar en array med strängvärden.
  • tal[]: Representerar en matris med numeriska värden.
  • boolesk[]: Representerar en matris med booleska värden.
  • date: Representerar ett enda datumvärde.
  • date[]: Representerar en matris med datumvärden.
  • array: Representerar en generisk array som innehåller värden av olika typer.
  • objekt: Representerar formulärobjektet i stället för dess värde direkt.

Returtypen är inte skiftlägeskänslig.

Privat

Den anpassade funktionen, som deklarerats som private, visas inte i listan över anpassade funktioner i regelredigeraren för ett adaptivt formulär. Som standard är anpassade funktioner public. Syntaxen för att deklarera den anpassade funktionen som privat är @private.

Riktlinjer när du skapar anpassade funktioner considerations

Om du vill visa en lista över anpassade funktioner i regelredigeraren kan du använda något av följande format:

Funktionssats med eller utan jsdoc-kommentarer

Du kan skapa en anpassad funktion med eller utan jsdoc-kommentarer.

    function functionName(parameters)
        {
            // code to be executed
        }

Om användaren inte lägger till några JavaScript-anteckningar i den anpassade funktionen visas den i regelredigeraren med sitt funktionsnamn. Vi rekommenderar dock att du tar med JavaScript-anteckningar för förbättrad läsbarhet av anpassade funktioner.

Pilfunktion med obligatoriska JavaScript-anteckningar eller kommentarer

Du kan skapa en anpassad funktion med en pilfunktionssyntax:

    /**
    * 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;

Om användaren inte lägger till några JavaScript-anteckningar i den anpassade funktionen visas inte den anpassade funktionen i regelredigeraren för ett anpassat formulär.

Funktionsuttryck med obligatoriska JavaScript-anteckningar eller kommentarer

Om du vill visa anpassade funktioner i regelredigeraren för ett adaptivt formulär skapar du anpassade funktioner i följande 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
        }

Om användaren inte lägger till några JavaScript-anteckningar i den anpassade funktionen visas inte den anpassade funktionen i regelredigeraren för ett anpassat formulär.

Krav för att skapa en anpassad funktion

Innan du börjar lägga till en anpassad funktion i din adaptiva Forms måste du se till att följande programvara är installerad på datorn:

  • Vanlig textredigerare (IDE): En integrerad utvecklingsmiljö (IDE), som Microsoft Visual Studio Code, har avancerade funktioner för enklare redigering, även om en vanlig textredigerare kan fungera.

  • Git: Versionskontrollsystemet krävs för att hantera kodändringar. Om du inte har det installerat hämtar du det från https://git-scm.com.

Skapa en anpassad funktion create-custom-function

Steg för att skapa anpassade funktioner är:

Skapa ett klientbibliotek med hjälp av AEM Project Archetype create-client-library-archetype

Du kan lägga till anpassade funktioner genom att lägga till ett klientbibliotek i projektet som skapats med AEM Project Archetype.
Om du har ett befintligt projekt kan du lägga till anpassade funktioner direkt i ditt lokala projekt.

Skapa ett klientbibliotek när du har skapat ett Arketype-projekt eller använt ett befintligt projekt. Så här skapar du ett klientbibliotek:

Lägg till en klientbiblioteksmapp

Följ stegen nedan om du vill lägga till en ny biblioteksmapp för klienten i [AEM projektkatalog]:

  1. Öppna [AEM projektkatalog] i en redigerare.

    anpassad struktur för funktionsmapp

  2. Sök efter ui.apps.

  3. Lägg till ny mapp. Lägg till exempel till en mapp med namnet experience-league.

  4. Navigera till mappen /experience-league/ och lägg till en ClientLibraryFolder. Skapa till exempel en klientbiblioteksmapp med namnet customclientlibs.

    Platsen är: [AEM project directory]/ui.apps/src/main/content/jcr_root/apps/

Lägg till filer och mappar i mappen Klientbibliotek

Lägg till följande i den tillagda klientbiblioteksmappen:

  • .content.xml fil
  • js.txt fil
  • Mappen js

Location is: [AEMaaCS project directory]/ui.apps/src/main/content/jcr_root/apps/experience-league/customclientlibs/

  1. Lägg till följande kodrader i .content.xml:

    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
    Du kan välja vilket namn som helst för egenskapen client library folder och categories.
  2. Lägg till följande kodrader i js.txt:

    code language-javascript
          #base=js
        function.js
    
  3. Lägg till javascript-filen som function.js i mappen js som innehåller de anpassade funktionerna:

    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;
    }
    
  4. Spara filerna.

anpassad struktur för funktionsmapp

Inkludera den nya mappen i filter.xml:

  1. Navigera till filen /ui.apps/src/main/content/META-INF/vault/filter.xml i [AEMaaCS-projektkatalogen].

  2. Öppna filen och lägg till följande rad i slutet:

    <filter root="/apps/experience-league" />

  3. Spara filen.

    XML för anpassat funktionsfilter

  4. Bygg den nya klientbiblioteksmappen i din AEM genom att följa stegen i avsnittet Skapa.

Skapa och driftsätt anpassade funktioner via CRXDE create-add-custom-function

Om du använder det senaste AEM Forms- och Forms-tillägget kan du skapa en anpassad funktion via CRXDE för att använda de senaste uppdateringarna av anpassade funktioner. Gör så här:

  1. Logga in på http://server:port/crx/de/index.jsp#.

  2. Skapa en mapp i mappen /apps. Skapa till exempel en mapp med namnet experience-league.

  3. Spara ändringarna.

  4. Navigera till den skapade mappen och skapa en nod av typen cq:ClientLibraryFolder som clientlibs.

  5. Navigera till den nyligen skapade mappen clientlibs och lägg till egenskaperna allowProxy och categories:

    Egenskaper för anpassad biblioteksnod

    note note
    NOTE
    Du kan ange vilket namn som helst istället för customfunctionsdemo.
  6. Spara ändringarna.

  7. Skapa en mapp med namnet js under mappen clientlibs.

  8. Skapa en JavaScript-fil med namnet functions.js i mappen js.

  9. Skapa en fil med namnet js.txt under mappen clientlibs.

  10. Spara ändringarna.
    Den skapade mappstrukturen ser ut så här:

    Mappstrukturen för klientbiblioteket har skapats

  11. Dubbelklicka på filen functions.js för att öppna redigeraren. Filen innehåller koden för den anpassade funktionen.
    Låt oss lägga till följande kod i JavaScript-filen för att beräkna ålder baserat på födelsedatum (ÅÅÅÅ-MM-DD).

    code language-javascript
        /**
             * Calculates Age
             * @name calculateAge
             * @return {string}
        */
    
        function calculateAge(dateOfBirthString) {
        var dob = new Date(dateOfBirthString);
        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;
        }
    
  12. Spara function.js.

  13. Navigera till js.txt och lägg till följande kod:

    code language-javascript
        #base=js
        functions.js
    
  14. Spara filen js.txt.

Du kan referera till följande anpassade funktionsmapp. Hämta och installera den här mappen på din AEM.

Nu kan du använda den anpassade funktionen i ditt adaptiva formulär genom att lägga till klientbiblioteket.

Lägga till klientbibliotek i ett adaptivt formulär add-client-library

När du har distribuerat klientbiblioteket till din AEM Forms-miljö kan du använda dess funktioner i ditt adaptiva formulär. Lägga till klientbiblioteket i ditt adaptiva formulär

  1. Öppna formuläret i redigeringsläge. Om du vill öppna ett formulär i redigeringsläget markerar du ett formulär och väljer Edit.

  2. Öppna innehållsläsaren och markera komponenten Guide Container i det adaptiva formuläret.

  3. Klicka på egenskapsikonen för Guide Container. Dialogrutan Adaptiv formulärbehållare öppnas.

  4. Öppna fliken Basic och välj namnet på client library category i listrutan (välj i det här fallet customfunctionscategory).

    Lägger till klientbiblioteket för anpassade funktioner

  5. Klicka på Done.

Nu kan du skapa en regel som använder anpassade funktioner i regelredigeraren:

Lägger till klientbiblioteket för anpassade funktioner

Nu ska vi förstå hur du konfigurerar och använder en anpassad funktion med tjänsten Invoke i regelredigeraren i AEM Forms 6.5

Använda anpassad funktion i ett anpassat formulär use-custom-functions

I ett anpassat formulär kan du använda anpassade funktioner i regelredigeraren.
Låt oss lägga till följande kod i JavaScript-filen (Function.js) för att beräkna ålder baserat på födelsedatum (ÅÅÅÅ-MM-DD). Skapa en anpassad funktion som calculateAge() som tar födelsedatumet som indata och returnerar ålder:

    /**
        * 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;
    }

I ovanstående exempel anropas den anpassade funktionen calculateAge när användaren anger födelsedatumet i formatet (ÅÅÅÅ-MM-DD) och sedan returnerar ålder.

Den anpassade funktionen Beräkna ålder i regelredigeraren

Låt oss förhandsgranska formuläret för att se hur de anpassade funktionerna implementeras via regelredigeraren:

Den anpassade funktionen Beräkna ålder i regelredigeraren för förhandsgranskning av formulär

NOTE
Du kan referera till följande anpassade funktionsmapp. Hämta och installera den här mappen i AEM med hjälp av Package Manager.

Stöd för asynkrona funktioner i anpassade funktioner support-of-async-functions

Asynkrona anpassade funktioner visas inte i regelredigeringslistan. Det går dock att anropa asynkrona funktioner i anpassade funktioner som skapats med synkrona funktionsuttryck.

Synkronisera och asynkron anpassad funktion

NOTE
Fördelen med att anropa asynkrona funktioner i anpassade funktioner är att asynkrona funktioner tillåter samtidig körning av flera åtgärder, med resultatet av varje funktion som används i de anpassade funktionerna.

Titta på koden nedan för att se hur vi kan anropa asynkrona funktioner med anpassade funktioner:


    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);
    });
}

I ovanstående exempel är funktionen asyncFunction en asynchronous function. Den utför en asynkron åtgärd genom att göra en GET-begäran till https://petstore.swagger.io/v2/store/inventory. Det väntar på svar med await, tolkar svarstexten som JSON med response.json() och returnerar sedan data. Funktionen callAsyncFunction är en synkron anpassad funktion som anropar funktionen asyncFunction och visar svarsdata i konsolen. Även om funktionen callAsyncFunction är synkron anropar den asynkrona funktionen asyncFunction och hanterar resultatet med programsatserna then och catch.

För att se hur den fungerar kan vi lägga till en knapp och skapa en regel för knappen som anropar den asynkrona funktionen när en knapp klickas.

skapar regel för asynkron funktion

Titta på bilden för konsolfönstret nedan för att visa att när användaren klickar på knappen Fetch anropas den anpassade funktionen callAsyncFunction som i sin tur anropar en asynkron funktion asyncFunction. Inspect i konsolfönstret för att visa svaret när knappen klickar:

Konsolfönstret

Låt oss dyka upp i funktionerna för anpassade funktioner.

Olika funktioner för anpassade funktioner

Du kan använda anpassade funktioner för att lägga till anpassade funktioner i formulär. Dessa funktioner har stöd för olika funktioner, som att arbeta med specifika fält, använda globala fält eller cachelagring. Tack vare denna flexibilitet kan ni anpassa formulären efter organisationens behov.

Fält- och globala omfångsobjekt i anpassade funktioner support-field-and-global-objects

Fältobjekt refererar till enskilda komponenter eller element i ett formulär, t.ex. textfält och kryssrutor. Globals-objektet innehåller skrivskyddade variabler som formulärinstans, målfältsinstans och metoder för att göra formulärändringar i anpassade funktioner.

NOTE
param {scope} globals måste vara den sista parametern och visas inte i regelredigeraren för ett anpassat formulär.

Låt oss lära oss hur anpassade funktioner använder fält och globala objekt med hjälp av ett Contact Us-formulär med olika användningar.

Kontakta oss

Använd skiftläge: Visa en panel med regeln SetProperty

Lägg till följande kod i den anpassade funktionen enligt beskrivningen i avsnittet create-custom-function för att ange formulärfältet som Required.


    /**
    * enablePanel
    * @name enablePanel
    * @param {object} field1
    * @param {object} field2
    * @param {scope} globals
    */

    function enablePanel(field1,field2, globals)
    {
       if(globals.functions.validate(field1).length === 0)
       {
       globals.functions.setProperty(field2, {visible: true});
       }
    }
NOTE
  • Du kan konfigurera fältegenskaperna med hjälp av de tillgängliga egenskaperna i [form-path]/jcr:content/guideContainer.model.json.
  • Ändringar som görs i formuläret med metoden setProperty för Global-objektet är asynkrona och återspeglas inte när den anpassade funktionen körs.

I det här exemplet valideras panelen personaldetails när du klickar på knappen. Om inga fel upptäcks på panelen visas en annan panel, feedback-panelen, när du klickar på knappen.

Låt oss skapa en regel för knappen Next som validerar panelen personaldetails och gör panelen feedback synlig när användaren klickar på knappen Next.

Ange egenskap

Se bilden nedan för att visa var panelen personaldetails valideras när du klickar på knappen Next. Om alla fält i personaldetails valideras blir panelen feedback synlig.

Ange förhandsgranskning av egenskapsformulär

Om det finns fel i fälten på panelen personaldetails visas de på fältnivå när du klickar på knappen Next och panelen feedback visas inte.

Ange förhandsgranskning av egenskapsformulär

Använd skiftläge: Verifiera fältet.

Lägg till följande kod i den anpassade funktionen enligt anvisningarna i avsnittet create-custom-function för att validera fältet.

    /**
    * validateField
    * @name validateField
    * @param {object} field
    * @param {scope} globals
    */
    function validateField(field,globals)
    {

        globals.functions.validate(field);

    }
NOTE
Om inget argument skickas i funktionen validate() valideras formuläret.

I det här exemplet används ett anpassat valideringsmönster för fältet contact. Användare måste ange ett telefonnummer som börjar med 10 följt av 8 siffror. Om användaren anger ett telefonnummer som inte börjar med 10 eller innehåller fler eller färre än 8 siffror visas ett valideringsfelmeddelande när knappen klickar:

Mönster för e-postadressvalidering

Nästa steg är nu att skapa en regel för knappen Next som validerar fältet contact vid knappklicket.

Valideringsmönster

Se bilden nedan för att visa att om användaren anger ett telefonnummer som inte börjar med 10 visas ett felmeddelande på fältnivå:

Mönster för e-postadressvalidering

Om användaren anger ett giltigt telefonnummer och alla fält på panelen personaldetails valideras visas panelen feedback på skärmen:

Mönster för e-postadressvalidering

Använd skiftläge: Återställ en panel

Lägg till följande kod i den anpassade funktionen enligt anvisningarna i avsnittet create-custom-function för att återställa panelen.

    /**
    * resetField
    * @name  resetField
    * @param {string} input1
    * @param {object} field
    * @param {scope} globals
    */
    function  resetField(field,globals)
    {

        globals.functions.reset(field);

    }
NOTE
Om inget argument skickas i funktionen reset() valideras formuläret.

I det här exemplet återställs panelen personaldetails när du klickar på knappen Clear. Nästa steg är att skapa en regel för knappen Clear som återställer panelen när du klickar på knappen.

Knappen Rensa

Se bilden nedan för att visa att panelen personaldetails återställs om användaren klickar på knappen clear:

Återställ formulär

Använd skiftläge: Om du vill visa anpassat meddelande på fältnivå och markera fältet som ogiltigt

Du kan använda funktionen markFieldAsInvalid() för att definiera ett fält som ogiltigt och ange ett anpassat felmeddelande på fältnivå. Värdet fieldIdentifier kan vara fieldId, field qualifiedName eller field dataRef. Värdet för objektet option kan vara {useId: true}, {useQualifiedName: true} eller {useDataRef: true}.
Syntaxerna som används för att markera fält som ogiltiga och ange anpassade meddelanden är:

  • 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});

Lägg till följande kod i den anpassade funktionen enligt beskrivningen i avsnittet create-custom-function för att aktivera anpassade meddelanden på fältnivå.

    /**
    * customMessage
    * @name customMessage
    * @param {object} field
    * @param {scope} globals
    */
    function customMessage(field, globals) {
    const minLength = 15;
    const comments = field.$value.trim();
    if (comments.length < minLength) {
        globals.functions.markFieldAsInvalid(field.$id, "Comments must be at least 15 characters long.", { useId: true });
    }
}

I det här exemplet visas ett anpassat meddelande på fältnivå om användaren skriver färre än 15 tecken i textrutan för kommentarer.

Nästa steg är att skapa en regel för fältet comments:

Markera fältet som ogiltigt

Se demonstrationen nedan för att visa att om du anger negativ feedback i fältet comments utlöses visningen av ett anpassat meddelande på fältnivå:

Markera fältet som ogiltigt förhandsgranskningsformulär

Om användaren skriver in mer än 15 tecken i textrutan för kommentarer valideras fältet och formuläret skickas:

Markera fältet som ett giltigt förhandsgranskningsformulär

Använd skiftläge: Skicka ändrade data till servern

Följande kodrad:
globals.functions.submitForm(globals.functions.exportData(), false); används för att skicka formulärdata efter manipulering.

  • Det första argumentet är de data som ska skickas.
  • Det andra argumentet anger om formuläret ska valideras innan det skickas in. Det är optional och inställt som true som standard.
  • Det tredje argumentet är contentType i överföringen, som också är valfritt med standardvärdet som multipart/form-data. De andra värdena kan vara application/json och application/x-www-form-urlencoded.

Lägg till följande kod i den anpassade funktionen enligt beskrivningen i avsnittet create-custom-function för att skicka manipulerade data till servern:

    /**
    * submitData
    * @name submitData
    * @param {object} field
    * @param {scope} globals
    */
    function submitData(globals)
    {

    var data = globals.functions.exportData();
    if(!data.comments) {
    data.comments = 'NA';
    }
    console.log('After update:{}',data);
    globals.functions.submitForm(data, false);
    }

I det här exemplet skickas NA till servern när formuläret skickas om användaren lämnar textrutan comments tom.

Skapa nu en regel för knappen Submit som skickar data:

Skicka data

Titta på bilden för console window nedan för att visa att om användaren lämnar textrutan comments tom så skickas värdet som NA på servern:

Skicka data i konsolfönstret

Du kan även kontrollera konsolfönstret för att visa data som skickats till servern:

Inspect-data i konsolfönstret

Cachelagringsstöd för anpassad funktion

Adaptiv Forms implementerar cachning för anpassade funktioner för att förbättra svarstiden samtidigt som den anpassade funktionslistan hämtas i regelredigeraren. Ett meddelande som Fetched following custom functions list from cache visas i filen error.log.

anpassad funktion med cachestöd

Om de anpassade funktionerna ändras blir cachningen ogiltig och den tolkas.

Felsökning troubleshooting

  • Användaren måste se till att kärnkomponenten och specifikationsversionen för är inställd på den senaste versionen. För befintliga AEM och formulär finns det dock ytterligare steg att utföra:

    • För det AEM projektet bör användaren ersätta alla instanser av submitForm('custom:submitSuccess', 'custom:submitError') med submitForm() och distribuera projektet.

    • Om de anpassade överföringshanterarna inte fungerar som de ska i befintliga formulär måste användaren öppna och spara regeln submitForm på knappen Skicka med regelredigeraren. Den här åtgärden ersätter den befintliga regeln från submitForm('custom:submitSuccess', 'custom:submitError') med submitForm() i formuläret.

  • Om det uppstår ett fel i JavaScript-filen som innehåller kod för anpassade funktioner visas inte de anpassade funktionerna i regelredigeraren i ett anpassat formulär. Om du vill kontrollera listan med anpassade funktioner kan du navigera till filen error.log för felet. Om ett fel uppstår visas listan med anpassade funktioner tom:

    felloggfil

    Om det inte finns något fel hämtas den anpassade funktionen och visas i filen error.log. Ett meddelande som Fetched following custom functions list visas i filen error.log:

    felloggfil med rätt anpassad funktion

Överväganden

  • parameter type och return type stöder inte None.

  • De funktioner som inte stöds i den anpassade funktionslistan är:

    • Generatorfunktioner
    • Async-/Await-funktioner
    • Metoddefinitioner
    • Klassmetoder
    • Standardparametrar
    • Restparametrar
recommendation-more-help
19ffd973-7af2-44d0-84b5-d547b0dffee2