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 som inte stöds via en OTB-ö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 hjälp av parametern jcr:data request. Skicka åtgärder kan komma åt parametern för att bearbeta data. I följande kod beskrivs formatet för XML-data. De fält som är bundna till formulärmodellen visas i avsnittet afBoundData. Obundna fält visas i avsnittet afUnoundData.

<?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 indatafält (med taggen input i HTML) i 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 lägga till de dolda indatafälten startTime och endTime.

Ett skript kan tillhandahålla värdena för fälten startTime och endTime när formuläret återges och före formuläröverföringen. Skriptet post.jsp för Skicka åtgärd kan sedan komma åt dessa fält med hjälp av parametrarna för begäran 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 Action-skript kan komma åt dessa filer med slingan RequestParameter API. Metoden isFormField i API:t 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 Get 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 Windows-operativsystem som nul, prn, con, lpt eller com.

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

  • Den bifogade filens format definieras inte i avsnittet Filtyper som stöds när komponenten Bifogad fil konfigureras i ett anpassat 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änder omdirigerings-URL:en för att dirigera om 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 HTML-filen 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-dialogrutan. 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: Submit-servern anropar det här skriptet med de data som du skickar och de ytterligare data som fanns 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 Skicka-åtgärden med den adaptiva Forms som ska visas i dialogrutan Redigera anpassat formulär lägger du till de här egenskaperna i sling:Folder:

    • guideComponentType av typen String och värde fd/af/components/guideSubittype

    • guideDataModel av typen String som anger vilken typ av adaptiv form som åtgärden Submit gäller. xsd stöds för XSD-baserad Adaptive Forms. basic stöds för Adaptiv 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. Om du till exempel vill göra en åtgärd synlig på XSD-baserad Adaptiv Forms anger du 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. OTB-åtgärderna finns i CRX-databasen på platsen /libs/fd/af/components/guideSubittype.

    • submitService av typen String. Mer information finns i Schemalägg sändning 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 sedan skickar ett e-postmeddelande till dig. Det adaptiva formuläret innehåller OTB-innehållet för att skicka Action Store-innehåll (borttaget) som sparar data i CRX-databasen. Dessutom innehåller AEM ett Mail-API som kan användas för att skicka e-postmeddelanden. 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 (föråldrat) finns på platsen /libs/fd/af/components/guideSubittype/store i CRX-databasen.

  1. Logga in på CRXDE Lite på adressen 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 avbildar skapandet av en nod med egenskapen sling:Folder

  2. Ange obligatoriska konfigurationsfält.

    Lägg till den konfiguration som krävs för Store-åtgärden. Kopiera noden cq:dialog för 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 för att fråga författaren om e-postkonfiguration.

    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 String och värdet fd/af/components/guidepittype

    • guideDataModel av typen String och värdet xsd, basic

    • jcr:description av typen String och värdet Store och Email Action

    • submitService av typen String och värdet Store och Email. Mer information finns i Schemalägg sändning av anpassat formulär för anpassade åtgärder.

  5. Öppna ett anpassat formulär. Klicka på knappen Redigera bredvid Start för att öppna dialogrutan Redigera i behållaren för anpassat formulär. Den nya åtgärden visas på fliken Skicka åtgärder. Om du väljer åtgärd Store och e-post visas konfigurationen som lagts till i noden dialog.

    Dialogrutan Skicka åtgärd

  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.Resource, org.apache.sling.api.SlingHttpServletRequest, org.apache.sling.api.SlingHttpServlet Svar)) 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 klassen SimpleEmail 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 den anpassade åtgärden Skicka, som innehåller egenskapen submitService, utlöser formuläret FormSubmitActionService när det skickas. FormSubmitActionService använder metoden getServiceName för att hämta värdet för egenskapen submitService. Baserat på värdet för egenskapen submitService anropar tjänsten lämplig sändningsmetod. Inkludera FormSubmitActionService i det anpassade paketet som du överför till servern AEM Forms.

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

Skicka tjänstegenskap

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