Criar uma ação de envio personalizada para o Adaptive Forms

Um formulário adaptável fornece várias ações de envio prontas para uso (OOTB). Uma Ação de envio especifica os detalhes das ações a serem executadas nos dados coletados pelo Formulário adaptável. Por exemplo, envio de 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 prontas para uso ou não suportado por meio de uma única Ação de envio OOTB. Por exemplo, enviar dados para um workflow, salvar os dados em um armazenamento de dados, enviar uma notificação por email para a pessoa que envia o formulário e enviar um email para a 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 dos dados XML

Os dados XML são enviados para o servlet usando o jcr:data parâmetro de solicitação. Enviar ações pode acessar o parâmetro para processar os dados. O código a seguir descreve o formato dos dados XML. Os campos vinculados ao modelo de formulário aparecem no afBoundData seção. Os campos não vinculados são exibidos na variável afUnoundDataseção.

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

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

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

Um script pode fornecer os valores da variável startTime e endTime campos quando o formulário é renderizado e antes do envio do formulário, respectivamente. O script Enviar ação post.jsp O 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

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

O código de exemplo a seguir identifica os anexos do arquivo na solicitação. Em seguida, ele lê os dados no arquivo usando o Obter API. Finalmente, ele cria um objeto de 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 do arquivo após o envio do Formulário adaptativo 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, lptou com.

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

  • O formato do anexo do arquivo não é definido na variável Tipos de arquivo suportados ao configurar o componente de anexo de arquivo em um formulário adaptável.

Caminho de encaminhamento e URL de redirecionamento

Depois de executar a ação necessária, o servlet Enviar 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 Enviar 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 de formulário adaptável. Você também pode configurar o URL de redirecionamento por meio da Ação de envio 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 Guide Submit.

OBSERVAÇÃO

Um autor fornece o URL de redirecionamento (usando a Configuração da página de agradecimento). Ações de envio de OOTB use o URL de redirecionamento para redirecionar o navegador do recurso que o caminho de encaminhamento faz referência.

Você pode gravar uma Ação de envio personalizada que encaminhe uma solicitação a um recurso ou servlet. O Adobe recomenda que o script que executa a manipulação 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

Uma Ação de envio é uma sling:Folder que inclui o seguinte:

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

  • dialog.xml: Esse script é semelhante à caixa de diálogo do Componente CQ. Ele fornece informações de configuração personalizadas pelo autor. 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 Enviar chama esse script com os dados enviados e os dados adicionais das 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 no Adaptive Forms para exibir na caixa de diálogo Edição de formulário adaptável, adicione essas propriedades ao sling:Folder:

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

    • guideDataModel do tipo String que especifica o tipo de Formulário adaptável ao qual a Ação de envio é aplicável. xsd O é compatível com o Adaptive Forms baseado em XSD. básico é compatível com o Adaptive Forms que não usa XDP ou XSD. Para exibir a ação em vários tipos de Adaptive Forms, adicione as strings correspondentes. Separe cada string por vírgula. Por exemplo, para tornar uma ação visível em Forms adaptável baseado em XSD, especifique o valor como xsd.

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

    • submitService do tipo String. Para obter mais informações, consulte Agendar envio de formulário adaptável para ações personalizadas.

Criação de uma ação de envio personalizada

Execute as etapas a seguir para criar uma Ação de envio personalizada que salve os dados no repositório CRX e, em seguida, envie um email para você. O Formulário adaptativo contém o Conteúdo do repositório de ações de envio OOTB (obsoleto) que salva os dados no repositório CRX. Além disso, o AEM fornece uma Email API que pode ser usada para enviar emails. Antes de usar a API de email, configure o serviço Day CQ Mail pelo 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 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 name 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 necessária para a ação Loja. Copie o cq:dialog nó da ação Loja 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ó de diálogo para a pasta de ações

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

    O formulário adaptável também fornece uma ação de email que envia emails para os usuários. Personalize essa 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 de sua Ação de Enviar (/apps/custom_submit_action/store_and_email/dialog?lang=pt-BR).

    Personalização da ação de email

  4. Disponibilize a ação na caixa de diálogo Adaptive Form Edit .

    Adicione as seguintes propriedades no nó store_and_email:

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

    • guideDataModel de tipo String e valor xsd, básico

    • jcr:description de tipo String e valor Ação de armazenamento e email

    • submitService de tipo String e valor Armazenar e enviar email. Para obter mais informações, consulte Agendar envio de formulário adaptável para ações personalizadas.

  5. Abra qualquer formulário adaptável. Clique no botão Editar botão ao lado de Iniciar para abrir o Editar caixa de diálogo do contêiner Formulário adaptável . A nova ação é exibida na variável Enviar ações Guia. Selecionar o 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. (/apps/custom_submit_action/store_and_mail/?lang=pt-BR).

    Execute a ação Loja OOTB (script post.POST.jsp). Use o 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 o CQ fornece em seu código para executar a ação Loja. Adicione o seguinte código em seu 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, é possível 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 o SimpleEmail classe para criar o Objeto de email conforme mostrado abaixo:

    OBSERVAÇÃO

    Certifique-se de que o arquivo JSP tenha o 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);
    %>
    

    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

Ao definir a Ação de envio personalizada, que inclui a variável submitService , o formulário aciona a variável FormSubmitActionService após a submissão. O FormSubmitActionService usa a variável getServiceName para recuperar o valor da variável submitService propriedade. Com base no valor da variável submitService , o serviço chama o método de envio apropriado. Inclua a FormSubmitActionService para o pacote personalizado que você faz upload para o AEM Forms servidor.

Adicione o submitService propriedade do tipo string para sling:Folder da sua Ação de envio personalizada para ativar Adobe Sign para o formulário adaptável. Você pode selecionar a variável Ativar o Adobe Sign na Assinatura eletrônica seção das propriedades do contêiner do Formulário adaptável somente após definir o valor para a variável submitService propriedade da sua Ação de envio personalizada.

Enviar propriedade de serviço

Nesta página