Creare un’azione di invio personalizzata per Adaptive Forms writing-custom-submit-action-for-adaptive-forms

Versione
Collegamento articolo
AEM 6.5
Fai clic qui
AEM as a Cloud Service
Questo articolo

Un modulo adattivo fornisce più azioni di invio pronte all’uso. Un’azione di invio specifica i dettagli delle azioni da eseguire sui dati raccolti tramite il modulo adattivo. Ad esempio, l’invio di dati tramite e-mail.

È possibile creare un'azione di invio personalizzata per aggiungere funzionalità non incluse in azioni di invio predefinite o non supportate tramite una singola azione di invio OOTB. Ad esempio, l’invio di dati a un flusso di lavoro, il salvataggio dei dati in un archivio dati, l’invio di una notifica e-mail alla persona che invia il modulo e l’invio di un’e-mail alla persona responsabile dell’elaborazione del modulo inviato per le approvazioni e i rifiuti tramite una singola azione di invio.

Formato dati XML xml-data-format

I dati XML vengono inviati al servlet utilizzando il parametro di richiesta jcr:data. Le azioni di invio possono accedere al parametro per elaborare i dati. Nel codice seguente viene descritto il formato dei dati XML. I campi associati al modello di modulo vengono visualizzati nella sezione afBoundData. I campi non associati vengono visualizzati nella sezione 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>

Campi azione action-fields

Un'azione di invio può aggiungere campi di input nascosti (utilizzando il tag HTML input) al HTML del modulo sottoposto a rendering. Questi campi nascosti possono contenere i valori necessari durante l’elaborazione dell’invio del modulo. Durante l’invio del modulo, questi valori dei campi vengono postback come parametri di richiesta che l’azione di invio può utilizzare durante la gestione dell’invio. I campi di input sono denominati campi di azione.

Ad esempio, un'azione di invio che acquisisce anche il tempo impiegato per compilare un modulo può aggiungere i campi di input nascosti startTime e endTime.

Uno script può fornire i valori dei campi startTime e endTime rispettivamente durante il rendering del modulo e prima dell'invio del modulo. Lo script dell'azione di invio post.jsp può quindi accedere a questi campi utilizzando i parametri di richiesta e calcolare il tempo totale necessario per compilare il modulo.

File allegati file-attachments

Le azioni di invio possono inoltre utilizzare i file allegati caricati mediante il componente File allegato. Gli script di azioni di invio possono accedere a questi file utilizzando l'API sling RequestParameter. Il metodo isFormField dell'API consente di identificare se il parametro della richiesta è un file o un campo modulo. È possibile scorrere i parametri di richiesta in un'azione di invio per identificare i parametri di file allegato.

Il codice di esempio seguente identifica gli allegati della richiesta. Successivamente, legge i dati nel file utilizzando Get API. Infine, crea un oggetto Document utilizzando i dati e lo aggiunge a un elenco.

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

Quando si allegano file al modulo adattivo, il server convalida gli allegati dopo l’invio del modulo adattivo e restituisce un messaggio di errore se:

  • I file allegati includono un nome file che inizia con (.) carattere, contiene \ / : * ? " < > | ; % $ caratteri o contiene nomi di file speciali riservati per il sistema operativo Windows, ad esempio nul, prn, con, lpt o com.

  • La dimensione del file allegato è 0 byte.

  • Il formato del file allegato non è definito nella sezione Tipi di file supportati durante la configurazione del componente File allegato in un modulo adattivo.

Percorso di inoltro e URL di reindirizzamento forward-path-and-redirect-url

Dopo aver eseguito l’azione richiesta, il servlet Submit inoltra la richiesta al percorso di inoltro. Un’azione utilizza l’API setForwardPath per impostare il percorso di inoltro nel servlet di invio della guida.

Se l’azione non fornisce un percorso di inoltro, il servlet di invio reindirizzerà il browser utilizzando l’URL di reindirizzamento. L’autore configura l’URL di reindirizzamento utilizzando la configurazione della pagina di ringraziamento nella finestra di dialogo Modifica modulo adattivo. Puoi anche configurare l’URL di reindirizzamento tramite l’azione di invio o l’API setRedirectUrl nel servlet di invio della guida. Puoi anche configurare i parametri di richiesta inviati all’URL di reindirizzamento utilizzando l’API setRedirectParameters nel servlet di invio della guida.

NOTE
Un autore fornisce l’URL di reindirizzamento (utilizzando la configurazione della pagina di ringraziamento). Le azioni di invio OOTB utilizzano l'URL di reindirizzamento per reindirizzare il browser dalla risorsa a cui fa riferimento il percorso di inoltro.
Puoi scrivere un’azione di invio personalizzata che inoltra una richiesta a una risorsa o a un servlet. L’Adobe consiglia che lo script che gestisce le risorse per il percorso di inoltro reindirizzi la richiesta all’URL di reindirizzamento al termine dell’elaborazione.

Azione invio submit-action

Un’azione di invio è un sling:Folder che include quanto segue:

  • addfields.jsp: questo script fornisce i campi di azione che vengono aggiunti al file HTML durante la rappresentazione. Utilizza questo script per aggiungere i parametri di input nascosti richiesti durante l’invio nello script post.POST.jsp.

  • dialog.xml: questo script è simile alla finestra di dialogo del componente CQ. Fornisce informazioni di configurazione personalizzate dall’autore. I campi vengono visualizzati nella scheda Invia azioni della finestra di dialogo Modifica modulo adattivo quando si seleziona l’azione di invio.

  • post.POST.jsp: il servlet di invio chiama questo script con i dati inviati e i dati aggiuntivi nelle sezioni precedenti. Ogni riferimento all’esecuzione di un’azione in questa pagina implica l’esecuzione dello script post.POST.jsp. Per registrare l'azione di invio con il Forms adattivo da visualizzare nella finestra di dialogo Modifica modulo adattivo, aggiungi queste proprietà a sling:Folder:

    • guideComponentType di tipo String e valore fd/af/components/guidesubmittype

    • guideDataModel di tipo String che specifica il tipo di modulo adattivo per il quale è applicabile l'azione di invio. xsd è supportato per Forms adattivo basato su XSD. basic è supportato per Forms adattivi che non utilizzano XDP o XSD. Per visualizzare l’azione su più tipi di Forms adattivo, aggiungi le stringhe corrispondenti. Separa ogni stringa con una virgola. Ad esempio, per rendere visibile un'azione nel Forms adattivo basato su XSD, specifica il valore come xsd.

    • jcr:description di tipo String. Il valore di questa proprietà viene visualizzato nell'elenco Azione di invio della scheda Invio azioni della finestra di dialogo Modifica modulo adattivo. Le azioni OOTB sono presenti nell'archivio CRX nel percorso /libs/fd/af/components/guidesubmittype.

    • submitService di tipo String. Per ulteriori informazioni, consulta Pianificare l'invio di moduli adattivi per azioni personalizzate.

Creazione di un’azione di invio personalizzata creating-a-custom-submit-action

Per creare un’azione di invio personalizzata che salvi i dati nell’archivio CRX, quindi ti invia un’e-mail, effettua le seguenti operazioni. Il modulo adattivo contiene il contenuto dell’archivio azioni di invio OOTB (obsoleto) che salva i dati nell’archivio CRX. Inoltre, AEM fornisce un'API Mail che può essere utilizzata per inviare e-mail. Prima di utilizzare l’API Mail, configura il servizio Day CQ Mail tramite la console di sistema. Puoi riutilizzare l’azione Archivia contenuto (obsoleta) per memorizzare i dati nell’archivio. L’azione Archivia contenuto (obsoleta) è disponibile nella posizione /libs/fd/af/components/guidesubmittype/store nell’archivio CRX.

  1. Accedi a CRXDE Lite all’URL https://<server>:<porta>/crx/de/index.jsp. Crea un nodo con la proprietà sling:Folder e name store_and_mail nella cartella /apps/custom_submit_action. Creare la cartella custom_submit_action se non esiste già.

    Schermata che illustra la creazione di un nodo con la proprietà sling:Folder

  2. Fornisci i campi di configurazione obbligatori.

    Aggiungi la configurazione richiesta dall’azione Archivia. Copia il nodo cq:dialog dell'azione Archivia da /libs/fd/af/components/guidesubmittype/store nella cartella delle azioni in /apps/custom_submit_action/store_and_email.

    Schermata che mostra la copia del nodo della finestra di dialogo nella cartella delle azioni

  3. Fornire i campi di configurazione per richiedere all'autore la configurazione della posta elettronica.

    Il modulo adattivo fornisce anche un’azione E-mail che invia e-mail agli utenti. Personalizza questa azione in base alle tue esigenze. Passa a /libs/fd/af/components/guidesubmittype/email/dialog. Copia i nodi all’interno del nodo cq:dialog nel nodo cq:dialog dell’azione di invio (https://experienceleague.adobe.com/apps/custom_submit_action/store_and_email/dialog?lang=it).

    Personalizzazione dellazione e-mail

  4. Rendi l'azione disponibile nella finestra di dialogo Modifica modulo adattivo.

    Aggiungi le seguenti proprietà nel nodo store_and_email:

    • guideComponentType di tipo String e valore fd/af/components/guidesubmittype

    • guideDataModel di tipo String e valore xsd, basic

    • jcr:description di tipo String e valore Azione archivio e posta elettronica

    • submitService di tipo String e valore Store e Email. Per ulteriori informazioni, consulta Pianificare l'invio di moduli adattivi per azioni personalizzate.

  5. Apri un modulo adattivo. Fai clic sul pulsante Modifica accanto a Inizio per aprire la finestra di dialogo Modifica del contenitore Modulo adattivo. La nuova azione viene visualizzata nella scheda Invia azioni. Se si seleziona l'Azione archivio ed e-mail, la configurazione aggiunta verrà visualizzata nel nodo della finestra di dialogo.

    Finestra di dialogo per la configurazione dellazione di invio

  6. Utilizzare l'azione per completare un'attività.

    Aggiungi lo script post.POST.jsp all’azione. (https://experienceleague.adobe.com/apps/custom_submit_action/store_and_mail/?lang=it).

    Esegui l’azione Archivio OOTB (script post.POST.jsp). Utilizza l'API FormsHelper.runAction(java.lang.String, java.lang.String, org.apache.sling.api.resource.Resource, org.apache.sling.api.SlingHttpServletRequest, org.apache.sling.api.SlingHttpServletResponse) fornita da CQ nel codice per eseguire l'azione Archivia. Aggiungi il seguente codice nel file JSP:

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

    Per inviare l’e-mail, il codice legge l’indirizzo e-mail del destinatario dalla configurazione. Per recuperare il valore di configurazione nello script dell’azione, leggi le proprietà della risorsa corrente utilizzando il codice seguente. Analogamente, potete leggere gli altri file di configurazione.

    ValueMap properties = ResourceUtil.getValueMap(resource);

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

    Infine, utilizza l’API Mail di CQ per inviare l’e-mail. Utilizza la classe SimpleEmail per creare l'oggetto e-mail come illustrato di seguito:

    note note
    NOTE
    Assicurati che il file JSP abbia il nome 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);
    %>
    

    Seleziona l’azione nel modulo adattivo. L’azione invia un’e-mail e memorizza i dati.

Utilizzare la proprietà submitService per azioni di invio personalizzate submitservice-property

Quando si imposta l'azione di invio personalizzata, che include la proprietà submitService, il modulo attiva FormSubmitActionService all'invio. FormSubmitActionService utilizza il metodo getServiceName per recuperare il valore per la proprietà submitService. In base al valore della proprietà submitService, il servizio richiama il metodo submit appropriato. Includere FormSubmitActionService nel bundle personalizzato caricato nel server AEM Forms.

Aggiungi la proprietà submitService di tipo stringa a sling:Folder dell'azione di invio personalizzata per abilitare Adobe Sign per il modulo adattivo. È possibile selezionare l'opzione Abilita Adobe Sign nella sezione Firma elettronica delle proprietà del contenitore Modulo adattivo solo dopo aver impostato il valore per la proprietà submitService dell'azione di invio personalizzata.

Invia proprietà servizio

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