Skapa en anpassad inskickningsåtgärd för Adaptiv Forms writing-custom-submit-action-for-adaptive-forms

Version
Artikellänk
AEM 6.5
Klicka här
AEM as a Cloud Service
Den här artikeln

Ett anpassat formulär innehåller flera färdiga inskickningsåtgärder (OTB). En Skicka-åtgärd specificerar vilka åtgärder som ska utföras på data som samlats in via det adaptiva formuläret. Du kan till exempel skicka data via ett e-postmeddelande.

Du kan skapa en anpassad Skicka-åtgärd för att lägga till funktioner som inte ingår i färdiga Skicka-åtgärder eller stöds inte via en enda OOTB-överföringsåtgärd. Du kan till exempel skicka data till ett arbetsflöde, spara data i ett datalager, skicka e-postmeddelanden till den person som skickar formuläret och skicka ett e-postmeddelande till den person som ansvarar för att bearbeta det inskickade formuläret för godkännande och avslag genom en enda Skicka-åtgärd.

XML-dataformat xml-data-format

XML-data skickas till servern med jcr:data request-parameter. Skicka åtgärder kan komma åt parametern för att bearbeta data. I följande kod beskrivs formatet för XML-data. Fälten som är bundna till formulärmodellen visas i dialogrutan afBoundData -avsnitt. Obundna fält visas i afUnoundData-avsnitt.

<?xml ?>
<afData>
<afUnboundData>
<data>
<field1>value</field2>
<repeatablePanel>
    <field2>value</field2>
</repeatablePanel>
<repeatablePanel>
    <field2>value</field2>
</repeatablePanel>
</data>
</afUnboundData>
<afBoundData>
<!-- xml corresponding to the Form Model /XML Schema -->
</afBoundData>
</afData>

Åtgärdsfält action-fields

En Skicka-åtgärd kan lägga till dolda inmatningsfält (med HTML) input -tagg) till det återgivna formuläret HTML. Dessa dolda fält kan innehålla värden som behövs när formulärinlämningen behandlas. När du skickar formuläret bokförs dessa fältvärden som begärandeparametrar som åtgärden Skicka kan använda när formuläret skickas. Indatafälten kallas åtgärdsfält.

En Skicka-åtgärd som även fångar upp den tid det tar att fylla i ett formulär kan t.ex. lägga till dolda inmatningsfält startTime och endTime.

Ett skript kan ange värdena för startTime och endTime fält när formuläret återges och innan formuläret skickas. Skriptet Skicka åtgärd post.jsp kan sedan komma åt dessa fält med hjälp av frågeparametrar och beräkna den totala tid som krävs för att fylla i formuläret.

Bifogade filer file-attachments

Skicka funktionsmakron kan även använda de bifogade filer som du överför med komponenten Bifogad fil. Skicka funktionsmakroskript kan komma åt dessa filer med hjälp av slingan API för RequestParameter. The isFormField API-metoden hjälper till att identifiera om parametern request är en fil eller ett formulärfält. Du kan iterera över parametrarna för begäran i en Skicka-åtgärd för att identifiera parametrar för bifogade filer.

Följande exempelkod identifierar de bifogade filerna i begäran. Därefter läses data in i filen med Hämta API. Slutligen skapas ett Document-objekt med hjälp av data och läggs till i en lista.

RequestParameterMap requestParameterMap = slingRequest.getRequestParameterMap();
for (Map.Entry<String, RequestParameter[]> param : requestParameterMap.entrySet()) {
    RequestParameter rpm = param.getValue()[0];
    if(!rpm.isFormField()) {
        fileAttachments.add(new Document(rpm.get()));
    }
}

När du bifogar filer till det adaptiva formuläret validerar servern de bifogade filerna efter att det adaptiva formuläret skickats in och returnerar ett felmeddelande om:

  • Bifogade filer innehåller ett filnamn som börjar med (.) tecken, innehåller \ / : * ? " < > | ; % $-tecken, eller innehåller speciella filnamn som är reserverade för operativsystemet Windows, till exempel nul, prn, con, lpt, eller com.

  • Storleken på den bifogade filen är 0 byte.

  • Den bifogade filens format definieras inte i Filtyper som stöds när komponenten Bifogad fil konfigureras i ett adaptivt formulär.

Framåtsökväg och omdirigerings-URL forward-path-and-redirect-url

När du har utfört den nödvändiga åtgärden vidarebefordrar servern Skicka begäran till sökvägen framåt. En åtgärd använder API:t setForwardPath för att ställa in framåtsökvägen på tjänsten Skicka stödlinje.

Om åtgärden inte har någon framåtriktad sökväg dirigeras webbläsaren om med hjälp av omdirigerings-URL:en. Författaren konfigurerar omdirigerings-URL:en med hjälp av Tack-sidan i dialogrutan Redigera anpassat formulär. Du kan också konfigurera omdirigerings-URL:en via Submit Action (Skicka-åtgärd) eller setRedirectUrl API i Submit (Skicka guide). Du kan också konfigurera de Request-parametrar som skickas till Redirect URL med API:t setRedirectParameters i guiden Submit.

NOTE
En författare tillhandahåller en omdirigerings-URL (med hjälp av Tack-sidkonfigurationen). OTB-överföringsåtgärder Använd omdirigerings-URL:en för att omdirigera webbläsaren från resursen som den framåtriktade sökvägen refererar till.
Du kan skriva en anpassad Skicka-åtgärd som vidarebefordrar en begäran till en resurs eller server. Adobe rekommenderar att skriptet som utför resurshantering för den framåtriktade sökvägen omdirigerar begäran till omdirigerings-URL:en när bearbetningen är klar.

Skicka åtgärd submit-action

En Skicka-åtgärd är en sling:Mapp som innehåller följande:

  • addfields.jsp: Det här skriptet innehåller de åtgärdsfält som läggs till i filen HTML under återgivningen. Använd det här skriptet för att lägga till dolda indataparametrar som krävs vid överföring i skriptet post.POST.jsp.

  • dialog.xml: Det här skriptet liknar CQ Component dialog. Det innehåller konfigurationsinformation som författaren anpassar. Fälten visas på fliken Skicka åtgärder i dialogrutan Redigera anpassat formulär när du väljer åtgärden Skicka.

  • post.POST.jsp: Sändningsservern anropar det här skriptet med de data som du skickar och de ytterligare data som finns i föregående avsnitt. Om du kör en åtgärd på den här sidan måste du köra skriptet post.POST.jsp. Om du vill registrera åtgärden Skicka med den adaptiva Forms som ska visas i dialogrutan Redigera anpassat formulär lägger du till dessa egenskaper i dialogrutan sling:Folder:

    • guideComponentType av typen String och value fd/af/components/guidepittype

    • guideDataModel av typen String som anger vilken typ av adaptiv form som åtgärden Skicka gäller för. xsd stöds för XSD-baserad Adaptive Forms. grundläggande stöds för Adaptive Forms som inte använder XDP eller XSD. Om du vill visa åtgärden för flera typer av Adaptiv Forms lägger du till motsvarande strängar. Avgränsa varje sträng med kommatecken. Gör till exempel en åtgärd synlig på XSD-baserad Adaptiv Forms, ange värdet som xsd.

    • jcr:description av typen String. Värdet för den här egenskapen visas i listan Skicka åtgärd på fliken Skicka åtgärder i dialogrutan Redigera anpassat formulär. OOTB-åtgärderna finns i CRX-databasen på platsen /libs/fd/af/components/guideSubittype.

    • submitService av typen String. Mer information finns i Schemalägg inlämning av anpassat formulär för anpassade åtgärder.

Skapa en anpassad skickaåtgärd creating-a-custom-submit-action

Utför följande steg för att skapa en anpassad Skicka-åtgärd som sparar data i CRX-databasen och skickar sedan ett e-postmeddelande till dig. Det adaptiva formuläret innehåller innehållet i OTB-inlämningsåtgärdsarkivet (föråldrat) som sparar data i CRX-databasen. Dessutom innehåller AEM en E-post API som kan användas för att skicka e-post. Konfigurera tjänsten Day CQ Mail via systemkonsolen innan du använder e-post-API:t. Du kan återanvända åtgärden Lagra innehåll (föråldrat) för att lagra data i databasen. Åtgärden Lagra innehåll (borttaget) finns på platsen /libs/fd/af/components/guideSubittype/store i CRX-databasen.

  1. Logga in på CRXDE Lite på URL:en https://<server>:<port>/crx/de/index.jsp. Skapa en nod med egenskapen sling:Folder och name store_and_mail i mappen /apps/custom_submit_action. Skapa mappen custom_submit_action om den inte redan finns.

    Skärmbild som visar hur en nod skapas med egenskapen sling:Folder

  2. Ange obligatoriska konfigurationsfält.

    Lägg till den konfiguration som krävs för Store-åtgärden. Kopiera cq:dialog noden i Store-åtgärden från /libs/fd/af/components/guideSubittype/store till åtgärdsmappen på /apps/custom_submit_action/store_and_email.

    Skärmbild som visar kopiering av dialognoden till åtgärdsmappen

  3. Ange konfigurationsfält som uppmanar författaren att ange e-postkonfigurationen.

    Det adaptiva formuläret innehåller även en e-poståtgärd som skickar e-post till användarna. Anpassa den här åtgärden baserat på dina behov. Gå till /libs/fd/af/components/guideSubmitType/email/dialog. Kopiera noderna i cq:dialog-noden till cq:dialog-noden i din Submit-åtgärd (https://experienceleague.adobe.com/apps/custom_submit_action/store_and_email/dialog?lang=sv).

    Anpassa e-poståtgärden

  4. Gör åtgärden tillgänglig i dialogrutan Redigera anpassat formulär.

    Lägg till följande egenskaper i noden store_and_email:

    • guideComponentType av typen Sträng och värde fd/af/components/guidepittype

    • guideDataModel av typen Sträng och värde xsd, grundläggande

    • jcr:description av typen Sträng och värde Åtgärd för att lagra och skicka e-post

    • submitService av typen Sträng och värde Lagra och skicka med e-post. Mer information finns i Schemalägg inlämning av anpassat formulär för anpassade åtgärder.

  5. Öppna ett anpassat formulär. Klicka på Redigera knapp bredvid Starta för att öppna Redigera dialogrutan för behållaren för adaptivt formulär. Den nya åtgärden visas i Skicka funktionsmakron Tabb. Markera Åtgärd för att lagra och skicka e-post visar konfigurationen som lagts till i noden i dialogrutan.

    Dialogrutan Skicka åtgärdskonfiguration

  6. Använd åtgärden för att slutföra en uppgift.

    Lägg till skriptet post.POST.jsp i åtgärden. (https://experienceleague.adobe.com/apps/custom_submit_action/store_and_mail/?lang=sv).

    Kör åtgärden OTB Store (skriptet post.POST.jsp). Använd FormsHelper.runAction(java.lang.String, java.lang.String, org.apache.sling.api.resource, org.apache.sling.api.SlingHttpServletRequest, org.apache.sling.api.SlingHttpServletResponse) API som CQ tillhandahåller i koden för att köra Store-åtgärden . Lägg till följande kod i JSP-filen:

    FormsHelper.runAction("/libs/fd/af/components/guidesubmittype/store", "post", resource, slingRequest, slingResponse);

    För att skicka e-postmeddelandet läser koden mottagarens e-postadress från konfigurationen. Om du vill hämta konfigurationsvärdet i åtgärdens skript läser du egenskaperna för den aktuella resursen med följande kod. På samma sätt kan du läsa andra konfigurationsfiler.

    ValueMap properties = ResourceUtil.getValueMap(resource);

    String mailTo = properties.get("mailTo");

    Använd slutligen CQ Mail API för att skicka e-postmeddelandet. Använd SimpleEmail klassen för att skapa e-postobjektet enligt nedan:

    note note
    NOTE
    Kontrollera att JSP-filen har namnet post.POST.jsp.
    code language-java
    <%@include file="/libs/fd/af/components/guidesglobal.jsp" %>
    <%@page import="com.day.cq.wcm.foundation.forms.FormsHelper,
           org.apache.sling.api.resource.ResourceUtil,
           org.apache.sling.api.resource.ValueMap,
                    com.day.cq.mailer.MessageGatewayService,
      com.day.cq.mailer.MessageGateway,
      org.apache.commons.mail.Email,
                    org.apache.commons.mail.SimpleEmail" %>
    <%@taglib prefix="sling"
                    uri="https://sling.apache.org/taglibs/sling/1.0" %>
    <%@taglib prefix="cq"
                    uri="https://www.day.com/taglibs/cq/1.0"
    %>
    <cq:defineObjects/>
    <sling:defineObjects/>
    <%
            String storeContent =
                        "/libs/fd/af/components/guidesubmittype/store";
            FormsHelper.runAction(storeContent, "post", resource,
                                    slingRequest, slingResponse);
     ValueMap props = ResourceUtil.getValueMap(resource);
     Email email = new SimpleEmail();
     String[] mailTo = props.get("mailto", new String[0]);
     email.setFrom((String)props.get("from"));
            for (String toAddr : mailTo) {
                email.addTo(toAddr);
       }
     email.setMsg((String)props.get("template"));
     email.setSubject((String)props.get("subject"));
     MessageGatewayService messageGatewayService =
                        sling.getService(MessageGatewayService.class);
     MessageGateway messageGateway =
                    messageGatewayService.getGateway(SimpleEmail.class);
     messageGateway.send(email);
    %>
    

    Välj åtgärden i det adaptiva formuläret. Åtgärden skickar ett e-postmeddelande och lagrar data.

Använd egenskapen submitService för anpassade överföringsåtgärder submitservice-property

När du anger en anpassad skickaåtgärd, som innehåller submitService -egenskapen, formuläret utlöser FormSubmitActionService när de skickas in. The FormSubmitActionService använder getServiceName metod för att hämta värdet för submitService -egenskap. Baserat på värdet på submitService egenskapen, anropar tjänsten rätt överföringsmetod. Inkludera FormSubmitActionService till det anpassade paket som du överför till AEM Forms server.

Lägg till submitService egenskap av typen sträng till sling:Folder av din anpassade Skicka-åtgärd för att aktivera Adobe Sign för den adaptiva formen. Du kan välja Enable Adobe Sign i Electronic Signature -avsnittet i behållaregenskaperna för det adaptiva formuläret först efter att du har angett värdet för submitService egenskapen för den anpassade åtgärden Skicka.

Egenskapen Skicka tjänst

recommendation-more-help
fbcff2a9-b6fe-4574-b04a-21e75df764ab