Crear una acción de envío personalizada para Forms adaptable

Un formulario adaptable proporciona varias acciones de envío listas para usar (OOTB). Una acción de envío especifica los detalles de las acciones que se realizarán en los datos recopilados mediante el formulario adaptable. Por ejemplo, el envío de datos en un correo electrónico.

Puede crear una acción de envío personalizada para agregar funcionalidad que no esté incluida en Enviar acciones predeterminadas o no se admite mediante una sola acción de envío de OOTB. Por ejemplo, enviar datos a un flujo de trabajo, guardar los datos en un almacén de datos, enviar una notificación por correo electrónico a la persona que envía el formulario y enviar un correo electrónico a la persona responsable de procesar el formulario enviado para aprobaciones y rechazos mediante una sola acción de envío.

Formato de datos XML

Los datos XML se envían al servlet utilizando la variable jcr:data parámetro de solicitud. Enviar acciones puede acceder al parámetro para procesar los datos. El siguiente código describe el formato de los datos XML. Los campos enlazados al modelo Form aparecen en la afBoundData para obtener más información. Los campos no enlazados aparecen en el afUnoundDatapara obtener más información.

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

Campos de acción

Una acción de envío puede añadir campos de entrada ocultos (mediante el HTML input ) al HTML de formulario procesado. Estos campos ocultos pueden contener los valores que necesita al procesar el envío del formulario. Al enviar el formulario, estos valores de campo se vuelven a registrar como parámetros de solicitud que la acción de envío puede utilizar durante el envío. Los campos de entrada se denominan campos de acción.

Por ejemplo, una acción de envío que también capture el tiempo necesario para rellenar un formulario, puede agregar los campos de entrada ocultos startTime y endTime.

Una secuencia de comandos puede proporcionar los valores de la variable startTime y endTime cuando el formulario se procesa y antes de enviarlo, respectivamente. Secuencia de comandos de acción de envío post.jsp puede acceder a estos campos mediante parámetros de solicitud y calcular el tiempo total necesario para rellenar el formulario.

Archivos adjuntos

Las acciones de envío también pueden utilizar los archivos adjuntos que se cargan mediante el componente Archivo adjunto . Los scripts de acción de envío pueden acceder a estos archivos utilizando el sling API RequestParameter. La variable isFormField método de la API ayuda a identificar si el parámetro de solicitud es un archivo o un campo de formulario. Puede iterar los parámetros de solicitud en una acción de envío para identificar los parámetros de archivo adjunto.

El siguiente código de ejemplo identifica los archivos adjuntos en la solicitud. A continuación, lee los datos en el archivo utilizando la variable Obtener API. Finalmente, crea un objeto Document utilizando los datos y lo anexa a una 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()));
    }
}

Cuando se adjuntan archivos al formulario adaptable, el servidor valida los archivos adjuntos después del envío del formulario adaptable y devuelve un mensaje de error si:

  • Los archivos adjuntos incluyen un nombre de archivo que empieza por (.) carácter, contiene \ / : * ? " < > | ; % $ caracteres, o contiene nombres de archivo especiales reservados para el sistema operativo Windows, como nul, prn, con, lpto com.

  • El tamaño del archivo adjunto es de 0 bytes.

  • El formato del archivo adjunto no está definido en la variable Tipos de archivo compatibles al configurar el componente Archivo adjunto en un formulario adaptable.

Ruta de reenvío y dirección URL de redireccionamiento

Después de realizar la acción necesaria, el servlet Submit reenvía la solicitud a la ruta de avance. Una acción utiliza la API setForwardPath para establecer la ruta de reenvío en el servlet de envío de la guía.

Si la acción no proporciona una ruta de reenvío, el servlet Enviar redirige el explorador mediante la dirección URL de redireccionamiento. El autor configura la dirección URL de redireccionamiento utilizando la configuración de la página de agradecimiento del cuadro de diálogo Edición del formulario adaptable. También puede configurar la dirección URL de redireccionamiento mediante la acción de envío o la API setRedirectUrl en el servlet de envío de la guía. También puede configurar los parámetros de solicitud enviados a la dirección URL de redireccionamiento utilizando la API setRedirectParameters en el servlet de envío de la guía.

NOTA

Un autor proporciona la dirección URL de redireccionamiento (mediante la configuración de la página de agradecimiento). Acciones de envío de OOTB utilice la dirección URL de redireccionamiento para redirigir el navegador desde el recurso al que hace referencia la ruta de reenvío.

Puede escribir una acción de envío personalizada que reenvíe una solicitud a un recurso o servlet. Adobe recomienda que la secuencia de comandos que gestiona los recursos de la ruta de reenvío redirija la solicitud a la URL de redireccionamiento cuando termine el procesamiento.

Acción de envío

Una acción de envío es una carpeta sling:Folder que incluye lo siguiente:

  • addfields.jsp: Esta secuencia de comandos proporciona los campos de acción que se agregan al archivo HTML durante la representación. Utilice esta secuencia de comandos para agregar los parámetros de entrada ocultos necesarios durante el envío en la secuencia de comandos post.POST.jsp.

  • dialog.xml: Esta secuencia de comandos es similar al cuadro de diálogo Componente CQ . Proporciona información de configuración que el autor personaliza. Los campos se muestran en la ficha Enviar acciones del cuadro de diálogo Edición del formulario adaptable al seleccionar la acción de envío.

  • post.POST.jsp: El servlet Submit llama a esta secuencia de comandos con los datos que envía y los datos adicionales de las secciones anteriores. Cualquier mención de la ejecución de una acción en esta página implica la ejecución del script post.POST.jsp. Para registrar la acción de envío con el Forms adaptable para que se muestre en el cuadro de diálogo Edición del formulario adaptable, agregue estas propiedades al sling:Folder:

    • guideComponentType de tipo String y value fd/af/components/guidesubmitype

    • guideDataModel de tipo String que especifica el tipo de formulario adaptable para el que se aplica la acción de envío. xsd es compatible con Forms adaptable basado en XSD. basic es compatible con Forms adaptable que no utiliza XDP o XSD. Para mostrar la acción en varios tipos de Forms adaptable, agregue las cadenas correspondientes. Separe cada cadena con una coma. Por ejemplo, para que una acción esté visible en Forms adaptable basado en XSD, especifique el valor como xsd.

    • jcr:description de tipo String. El valor de esta propiedad se muestra en la lista Enviar acción de la ficha Enviar acciones del cuadro de diálogo Editar formulario adaptable. Las acciones OOTB están presentes en el repositorio CRX en la ubicación /libs/fd/af/components/guidesubmitype.

    • submitService de tipo String. Para obtener más información, consulte Programar el envío del formulario adaptable para acciones personalizadas.

Creación de una acción de envío personalizada

Realice los siguientes pasos para crear una acción de envío personalizada que guarde los datos en el repositorio CRX y luego le envíe un correo electrónico. El formulario adaptable contiene el contenido del almacén de acciones de envío de OOTB (obsoleto) que guarda los datos en el repositorio CRX. Además, AEM proporciona un Correo API que se puede utilizar para enviar correos electrónicos. Antes de usar la API de correo, configure el servicio Day CQ Mail a través de la consola del sistema. Puede reutilizar la acción Almacenar contenido (obsoleto) para almacenar los datos en el repositorio. La acción Almacenar contenido (obsoleto) está disponible en la ubicación /libs/fd/af/components/guidesubmitype/store en el repositorio CRX.

  1. Inicie sesión en el CRXDE Lite en la dirección URL https://<server>:<port>/crx/de/index.jsp. Cree un nodo con la propiedad sling:Folder y nombre store_and_mail en la carpeta /apps/custom_submit_action . Cree la carpeta custom_submit_action si aún no existe.

    Captura de pantalla que representa la creación de un nodo con la propiedad sling:Folder

  2. Proporcione los campos de configuración obligatorios.

    Añada la configuración que requiere la acción Store . Copie el cq:dialog nodo de la acción Store de /libs/fd/af/components/guidesubmitype/store a la carpeta de acciones en /apps/custom_submit_action/store_and_email.

    Captura de pantalla que muestra la copia del nodo de diálogo a la carpeta de acciones

  3. Proporcione campos de configuración para solicitar al autor que configure el correo electrónico.

    El formulario adaptable también proporciona una acción de correo electrónico que envía correos electrónicos a los usuarios. Personalice esta acción según sus necesidades. Vaya a /libs/fd/af/components/guidesubmitype/email/dialog. Copie los nodos dentro del nodo cq:dialog al nodo cq:dialog de su acción de envío (/apps/custom_submit_action/store_and_email/dialog?lang=es).

    Personalización de la acción de correo electrónico

  4. Haga que la acción esté disponible en el cuadro de diálogo Edición del formulario adaptable .

    Añada las siguientes propiedades en el nodo store_and_email :

    • guideComponentType de tipo Cadena y valor fd/af/components/guidesubmitype

    • guideDataModel de tipo Cadena y valor xsd, básico

    • jcr:description de tipo Cadena y valor Acción de almacenamiento y correo electrónico

    • submitService de tipo Cadena y valor Almacén y correo electrónico. Para obtener más información, consulte Programar el envío del formulario adaptable para acciones personalizadas.

  5. Abra cualquier formulario adaptable. Haga clic en el Editar junto a Inicio para abrir el Editar del contenedor de formulario adaptable. La nueva acción se muestra en la Enviar acciones Tabulación. Al seleccionar la variable Acción de almacenamiento y correo electrónico muestra la configuración añadida en el nodo de diálogo.

    Cuadro de diálogo Configuración de acción de envío

  6. Utilice la acción para completar una tarea.

    Agregue la secuencia de comandos post.POST.jsp a su acción. (/apps/custom_submit_action/store_and_mail/?lang=es).

    Ejecute la acción Almacenamiento OOTB (script post.POST.jsp). Utilice la variable 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 que CQ proporciona en su código para ejecutar la acción Store. Agregue el siguiente código en su archivo JSP:

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

    Para enviar el correo electrónico, el código lee la dirección de correo electrónico del destinatario de la configuración. Para recuperar el valor de configuración en la secuencia de comandos de la acción, lea las propiedades del recurso actual utilizando el siguiente código. Del mismo modo, puede leer los demás archivos de configuración.

    ValueMap properties = ResourceUtil.getValueMap(resource);

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

    Finalmente, utilice la API de correo de CQ para enviar el correo electrónico. Utilice la variable SimpleEmail para crear el objeto Email como se muestra a continuación:

    NOTA

    Asegúrese de que el archivo JSP tiene el nombre 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);
    %>
    

    Seleccione la acción en el formulario adaptable. La acción envía un correo electrónico y almacena los datos.

Utilice la propiedad submitService para las acciones de envío personalizadas

Al establecer la acción de envío personalizada, que incluye la variable submitService , el formulario déclencheur la propiedad FormSubmitActionService en el momento de la presentación. La variable FormSubmitActionService utiliza la variable getServiceName método para recuperar el valor de la variable submitService propiedad. En función del valor de la variable submitService , el servicio invoca el método de envío adecuado. Incluya la variable FormSubmitActionService al paquete personalizado que carga en el AEM Forms servidor.

Agregue la variable submitService propiedad de tipo cadena a la variable sling:Folder de su acción de envío personalizada para habilitar Adobe Sign para el formulario adaptable. Puede seleccionar el Habilitar Adobe Sign en la Firma electrónica de las propiedades del contenedor del formulario adaptable solo después de configurar el valor de submitService propiedad de la acción de envío personalizada.

Enviar propiedad de servicio

En esta página