Creare un’azione di invio personalizzata per Adaptive Forms

Un modulo adattivo fornisce più azioni di invio pronte all’uso (OOTB). 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.

Puoi creare un’azione di invio personalizzata per aggiungere funzionalità non incluse in Azioni di invio predefinite o non supportato da 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 notifiche e-mail alla persona che invia il modulo 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

I dati XML vengono inviati al servlet utilizzando jcr:data parametro di richiesta. Azioni di invio consente di accedere al parametro per elaborare i dati. Il codice seguente descrive il formato dei dati XML. I campi associati al modello Modulo vengono visualizzati nella afBoundData sezione . I campi non associati vengono visualizzati nella afUnoundDatasezione .

<?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

Un’azione di invio può aggiungere campi di input nascosti (utilizzando HTML input al modulo di cui è stato effettuato il rendering in HTML. Questi campi nascosti possono contenere i valori necessari durante l’elaborazione dell’invio del modulo. Quando si invia il modulo, questi valori dei campi vengono riportati come parametri di richiesta che l’azione di invio può utilizzare durante la gestione dell’invio. I campi di input sono chiamati campi di azione.

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

Uno script può fornire i valori startTime e endTime i campi in cui viene eseguito il rendering del modulo e prima dell’invio del modulo, rispettivamente. Lo script dell’azione Invia post.jsp può quindi accedere a questi campi utilizzando i parametri di richiesta e calcolare il tempo totale necessario per compilare il modulo.

Allegati file

Le azioni di invio possono inoltre utilizzare gli allegati file caricati utilizzando il componente File allegato. Gli script di azione Invia possono accedere a questi file utilizzando lo sling API RequestParameter. La isFormField Il metodo dell'API aiuta a identificare se il parametro della richiesta è un file o un campo del modulo. È possibile eseguire iterazioni sui parametri di richiesta in un’azione di invio per identificare i parametri di File allegato.

Il codice di esempio seguente identifica gli allegati di file nella richiesta. Successivamente, legge i dati nel file utilizzando Ottieni 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 alleghi dei file al modulo adattivo, il server convalida gli allegati dopo l’invio del modulo adattivo e restituisce un messaggio di errore se:

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

  • La dimensione dell'allegato del file è di 0 byte.

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

URL di percorso e reindirizzamento

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

Se l’azione non fornisce un percorso in avanti, il servlet di invio reindirizzerà il browser utilizzando l’URL di reindirizzamento. L’autore configura l’URL di reindirizzamento utilizzando la configurazione 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 Request inviati all’URL di reindirizzamento utilizzando l’API setRedirectParameters nel servlet di invio della guida.

NOTA

Un autore fornisce l’URL di reindirizzamento (utilizzando la configurazione della pagina di ringraziamento). Azioni di invio OOTB utilizza l'URL di reindirizzamento per reindirizzare il browser dalla risorsa a cui fa riferimento il percorso in avanti.

È possibile scrivere un’azione di invio personalizzata che inoltra una richiesta a una risorsa o a un servlet. L’Adobe consiglia che lo script che esegue la gestione delle risorse per il percorso di avanzamento reindirizzi la richiesta all’URL di reindirizzamento al termine dell’elaborazione.

Azione invio

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

  • addfields.jsp: Questo script fornisce i campi azione che vengono aggiunti al file HTML durante il rendering. 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 Azioni di invio 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. Qualsiasi menzione dell'esecuzione di un'azione in questa pagina implica l'esecuzione dello script post.POST.jsp. Per registrare l’azione di invio con la Forms adattiva da visualizzare nella finestra di dialogo Modifica modulo adattivo, aggiungi queste proprietà allo sling:Folder:

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

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

    • jcr:description di tipo String. Il valore di questa proprietà viene visualizzato nell’elenco Invia azioni della scheda Invia azioni della finestra di dialogo Modifica modulo adattivo. Le azioni OOTB sono presenti nell’archivio CRX nella posizione /libs/fd/af/components/guidesubmittype.

    • submitService di tipo String. Per ulteriori informazioni, consulta Pianificazione dell’invio di moduli adattivi per azioni personalizzate.

Creazione di un’azione di invio personalizzata

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

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

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

  2. Fornisci i campi di configurazione obbligatori.

    Aggiungi la configurazione necessaria per l'azione Store. Copia il cq:dialog nodo dell'azione Store da /libs/fd/af/components/guidesubmittype/store alla cartella delle azioni in /apps/custom_submit_action/store_and_email.

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

  3. Fornisci campi di configurazione per richiedere all’autore la configurazione dell’e-mail.

    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 (/apps/custom_submit_action/store_and_email/dialog?lang=it).

    Personalizzazione dell’azione e-mail

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

    Aggiungi le seguenti proprietà nel nodo store_and_email:

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

    • guideDataModel di tipo Stringa e valore xsd, base

    • jcr:description di tipo Stringa e valore Azione store ed e-mail

    • submitService di tipo Stringa e valore Archivio ed e-mail. Per ulteriori informazioni, consulta Pianificazione dell’invio di moduli adattivi per azioni personalizzate.

  5. Aprire un modulo adattivo. Fai clic sul pulsante Modifica pulsante accanto a Inizio per aprire Modifica del contenitore Modulo adattivo. La nuova azione viene visualizzata nella Inviare azioni Tab. Selezione della Azione store ed e-mail visualizza la configurazione aggiunta nel nodo della finestra di dialogo.

    Finestra di dialogo per la configurazione dell’azione Invia

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

    Aggiungi lo script post.POST.jsp all'azione. (/apps/custom_submit_action/store_and_mail/?lang=it).

    Esegui l'azione OOTB Store (script post.POST.jsp). Utilizza la FormsHelper.runAction(java.lang.String, java.lang.String, org.apache.sling.api.resource.Resource, org.apache.sling.api.SlingHttpServletRequest, org.apache.sling.api.SlingHttpServletResponse) API che CQ fornisce nel codice per eseguire l'azione Store. 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. Allo stesso modo puoi leggere gli altri file di configurazione.

    ValueMap properties = ResourceUtil.getValueMap(resource);

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

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

    NOTA

    Assicurati che il file JSP abbia il nome post.POST.jsp.

    <%@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 le azioni di invio personalizzate

Quando imposti l’azione di invio personalizzata, che include submitService , il modulo attiva la proprietà FormSubmitActionService su presentazione. La FormSubmitActionService utilizza getServiceName per recuperare il valore per submitService proprietà. In base al valore del submitService , il servizio richiama il metodo submit appropriato. Includi il FormSubmitActionService nel bundle personalizzato caricato nel AEM Forms server.

Aggiungi il submitService proprietà di tipo string al sling:Folder dell’azione di invio personalizzata per abilitare Adobe Sign per il modulo adattivo. È possibile selezionare la Abilita Adobe Sign in Firma elettronica delle proprietà del contenitore Modulo adattivo solo dopo aver impostato il valore per submitService proprietà dell'azione di invio personalizzata.

Invia proprietà servizio

In questa pagina