Skapa en anpassad inskickningsåtgärd för Adaptiv Forms writing-custom-submit-action-for-adaptive-forms
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
ellercom
. -
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.
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.
-
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.
-
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.
-
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).
-
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.
-
-
Ö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.
-
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.