Criar uma ação enviar personalizada para o Forms adaptável writing-custom-submit-action-for-adaptive-forms

Versão
Link do artigo
AEM 6.5
Clique aqui
AEM as a Cloud Service
Este artigo

Um Formulário adaptável fornece várias Ações de envio prontas para uso (OOTB). Uma Ação de envio especifica detalhes das ações a serem executadas nos dados coletados por meio do Formulário adaptável. Por exemplo, enviar dados em um email.

Você pode criar uma Ação de Envio personalizada para adicionar funcionalidades não incluídas em Ações de Envio predefinidas ou não suportadas por meio de uma única Ação de Envio OOTB. Por exemplo, enviar dados para um fluxo de trabalho, salvar os dados em um armazenamento de dados, enviar uma notificação por email à pessoa que envia o formulário e enviar um email à pessoa responsável pelo processamento do formulário enviado para aprovações e rejeições por meio de uma única Ação de envio.

Formato de dados XML xml-data-format

Os dados XML são enviados ao servlet usando o parâmetro de solicitação jcr:data. As Ações de envio podem acessar o parâmetro para processar os dados. O código a seguir descreve o formato dos dados XML. Os campos associados ao modelo de formulário aparecem na seção afBoundData. Campos não vinculados aparecem na seção 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>

Campos de ação action-fields

Uma ação enviar pode adicionar campos de entrada ocultos (usando a tag HTML input) ao HTML de formulário renderizado. Esses campos ocultos podem conter valores necessários ao processar o envio do formulário. Ao enviar o formulário, esses valores de campo são postados de volta como parâmetros de solicitação que a Ação de envio pode usar durante o manuseio do envio. Os campos de entrada são chamados de campos de ação.

Por exemplo, uma Ação Enviar que também capture o tempo gasto para preencher um formulário pode adicionar os campos de entrada ocultos startTime e endTime.

Um script pode fornecer os valores dos campos startTime e endTime quando o formulário é renderizado e antes do envio do formulário, respectivamente. O script de Ação de Envio post.jsp pode então acessar esses campos usando parâmetros de solicitação e calcular o tempo total necessário para preencher o formulário.

Anexos de arquivo file-attachments

As Ações de envio também podem usar os anexos de arquivo dos quais você faz upload usando o componente Anexo de arquivo. Os scripts de Ação Enviar podem acessar esses arquivos usando a API RequestParameter do sling. O método isFormField da API ajuda a identificar se o parâmetro de solicitação é um campo de arquivo ou de formulário. Você pode iterar sobre os parâmetros da Solicitação em uma Ação de envio para identificar os parâmetros de Anexo de arquivo.

O código de exemplo a seguir identifica os anexos de arquivo na solicitação. Em seguida, ele lê os dados no arquivo usando a Obter API. Por fim, ele cria um objeto Documento usando os dados e o anexa a uma 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()));
    }
}

Ao anexar arquivos ao Formulário adaptável, o servidor valida os anexos de arquivo após o envio do Formulário adaptável e retorna uma mensagem de erro se:

  • Os anexos de arquivo incluem um nome de arquivo que começa com (.) caractere, contém \ / : * ? " < > | ; % $ caracteres ou contém nomes de arquivo especiais reservados para o sistema operacional Windows, como nul, prn, con, lpt ou com.

  • O tamanho do anexo de arquivo é de 0 bytes.

  • O formato do anexo de arquivo não está definido na seção Tipos de Arquivo com Suporte ao configurar o componente Anexo de Arquivo em um Formulário Adaptável.

Caminho de encaminhamento e URL de redirecionamento forward-path-and-redirect-url

Depois de executar a ação necessária, o servlet Submit encaminha a solicitação para o caminho de encaminhamento. Uma ação usa a API setForwardPath para definir o caminho de encaminhamento no servlet Guide Submit.

Se a ação não fornecer um caminho de encaminhamento, o servlet Submit redirecionará o navegador usando o URL de redirecionamento. O autor configura o URL de redirecionamento usando a configuração da página de agradecimento na caixa de diálogo Edição do formulário adaptável. Você também pode configurar o URL de redirecionamento por meio da Ação enviar ou da API setRedirectUrl no servlet Guide Submit. Você também pode configurar os parâmetros de Solicitação enviados para o URL de redirecionamento usando a API setRedirectParameters no servlet de Envio do guia.

NOTE
Um autor fornece o URL de redirecionamento (usando a Configuração da página de agradecimento). Ações de Envio de OOTB use a URL de Redirecionamento para redirecionar o navegador a partir do recurso ao qual o caminho de encaminhamento faz referência.
Você pode escrever uma ação enviar personalizada que encaminhe uma solicitação para um recurso ou servlet. A Adobe recomenda que o script que executa o tratamento de recursos para o caminho de encaminhamento redirecione a solicitação para o URL de redirecionamento quando o processamento for concluído.

Ação de envio submit-action

Uma ação enviar é uma sling:Folder que inclui o seguinte:

  • addfields.jsp: este script fornece os campos de ação que são adicionados ao arquivo HTML durante a representação. Use esse script para adicionar os parâmetros de entrada ocultos necessários durante o envio no script post.POST.jsp.

  • dialog.xml: este script é semelhante à caixa de diálogo Componente CQ. Ela fornece informações de configuração que o autor personaliza. Os campos são exibidos na guia Enviar Ações na caixa de diálogo Editar formulário adaptável ao selecionar a Ação de envio.

  • post.POST.jsp: o servlet Submit chama esse script com os dados enviados e os dados adicionais nas seções anteriores. Qualquer menção de executar uma ação nesta página implica executar o script post.POST.jsp. Para registrar a Ação de envio com o Forms adaptável a ser exibido na caixa de diálogo Editar formulário adaptável, adicione essas propriedades ao sling:Folder:

    • guideComponentType do tipo String e valor fd/af/components/guidesubmittype

    • guideDataModel do tipo Cadeia de Caracteres que especifica o tipo de Formulário Adaptável ao qual a Ação de Envio se aplica. xsd é compatível com o Adaptive Forms baseado em XSD. Há suporte para basic para o Adaptive Forms que não usam XDP ou XSD. Para exibir a ação em vários tipos de Forms adaptável, adicione as cadeias de caracteres correspondentes. Separe cada string por vírgula. Por exemplo, para tornar uma ação visível no Forms adaptável baseado em XSD, especifique o valor como xsd.

    • jcr:description do tipo String. O valor dessa propriedade é exibido na lista Ação de envio na guia Ações de envio da caixa de diálogo Edição do formulário adaptável. As ações OOTB estão presentes no repositório do CRX no local /libs/fd/af/components/guidesubmittype.

    • submitService do tipo Cadeia de caracteres. Para obter mais informações, consulte Agendar envio do Formulário Adaptável para ações personalizadas.

Criação de uma Ação de envio personalizada creating-a-custom-submit-action

Execute as seguintes etapas para criar uma Ação enviar personalizada que salve os dados no repositório do CRX e envie um email para você. O formulário adaptável contém o conteúdo do armazenamento de ação de envio OOTB (desaprovado) que salva os dados no repositório do CRX. Além disso, o AEM fornece uma API de Email que pode ser usada para enviar emails. Antes de usar a API de email, configure o serviço Day CQ Mail por meio do console do sistema. Você pode reutilizar a ação Armazenar conteúdo (obsoleto) para armazenar os dados no repositório. A ação Armazenar conteúdo (obsoleto) está disponível no local /libs/fd/af/components/guidesubmittype/store no repositório do CRX.

  1. Faça logon no CRXDE Lite no URL https://<server>:<port>/crx/de/index.jsp. Crie um nó com a propriedade sling:Folder e o nome store_and_mail na pasta /apps/custom_submit_action. Crie a pasta custom_submit_action se ela ainda não existir.

    Captura de tela representando a criação de um nó com a propriedade sling:Folder

  2. Forneça os campos de configuração obrigatórios.

    Adicione a configuração exigida pela ação Armazenar. Copie o nó cq:dialog da ação Armazenar de /libs/fd/af/components/guidesubmittype/store para a pasta de ações em /apps/custom_submit_action/store_and_email.

    Captura de tela mostrando a cópia do nó da caixa de diálogo para a pasta de ação

  3. Forneça campos de configuração para solicitar ao autor a configuração de email.

    O Formulário adaptável também fornece uma ação Email que envia emails para os usuários. Personalize esta ação com base em suas necessidades. Navegue até /libs/fd/af/components/guidesubmittype/email/dialog. Copie os nós no nó cq:dialog para o nó cq:dialog da sua ação enviar (https://experienceleague.adobe.com/apps/custom_submit_action/store_and_email/dialog?lang=pt-BR).

    Personalizando a ação de email

  4. Disponibilizar a ação na caixa de diálogo Editar Formulário Adaptável.

    Adicione as seguintes propriedades no nó store_and_email:

    • guideComponentType do tipo String e valor fd/af/components/guidesubmittype

    • guideDataModel do tipo String e valor xsd, basic

    • jcr:description do tipo Cadeia de caracteres e valor Ação de Email e Armazenamento

    • submitService do tipo cadeia de caracteres e valor Armazenamento e email. Para obter mais informações, consulte Agendar envio do Formulário Adaptável para ações personalizadas.

  5. Abra qualquer Formulário adaptável. Clique no botão Editar ao lado de Iniciar para abrir a caixa de diálogo Editar do contêiner de Formulário Adaptável. A nova ação é exibida na guia Enviar Ações. Selecionar a Ação de Armazenamento e Email exibe a configuração adicionada no nó da caixa de diálogo.

    Caixa de diálogo de configuração Enviar Ação

  6. Use a ação para concluir uma tarefa.

    Adicione o script post.POST.jsp à sua ação. (https://experienceleague.adobe.com/apps/custom_submit_action/store_and_mail/?lang=pt-BR).

    Execute a ação de armazenamento OOTB (script post.POST.jsp). Use a 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)) que o CQ fornece no código para executar a ação Armazenar. Adicione o seguinte código no arquivo JSP:

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

    Para enviar o email, o código lê o endereço de email do recipient na configuração. Para buscar o valor de configuração no script da ação, leia as propriedades do recurso atual usando o código a seguir. Da mesma forma, você pode ler os outros arquivos de configuração.

    ValueMap properties = ResourceUtil.getValueMap(resource);

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

    Por fim, use a API de email do CQ para enviar o email. Use a classe SimpleEmail para criar o Objeto de Email conforme mostrado abaixo:

    note note
    NOTE
    Verifique se o arquivo JSP tem o 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);
    %>
    

    Selecione a ação no Formulário adaptável. A ação envia um email e armazena os dados.

Usar a propriedade submitService para ações de envio personalizadas submitservice-property

Ao definir a Ação de Envio personalizada, que inclui a propriedade submitService, o formulário aciona o FormSubmitActionService no envio. O FormSubmitActionService usa o método getServiceName para recuperar o valor da propriedade submitService. Com base no valor da propriedade submitService, o serviço invoca o método de envio apropriado. Inclua o FormSubmitActionService no pacote personalizado que você carregou para o servidor AEM Forms.

Adicione a propriedade submitService do tipo cadeia de caracteres ao sling:Folder de sua Ação de Envio personalizada para habilitar Adobe Sign para o Formulário adaptável. Você pode selecionar a opção Habilitar Adobe Sign na seção Assinatura Eletrônica das propriedades do contêiner de Formulário Adaptável somente após definir o valor da propriedade submitService da sua Ação de Envio personalizada.

Enviar propriedade de serviço

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