Amostra para integrar o componente de rascunhos e envios ao banco de dados sample-for-integrating-drafts-submissions-component-with-database

Visão geral de exemplo sample-overview

O componente de rascunhos e envios do portal do AEM Forms permite que os usuários salvem seus formulários como rascunhos e os enviem posteriormente de qualquer dispositivo. Além disso, os usuários podem exibir seus formulários enviados no portal. Para ativar essa funcionalidade, a AEM Forms fornece serviços de dados e metadados para armazenar os dados preenchidos por um usuário no formulário e os metadados do formulário associados aos rascunhos e formulários enviados. Esses dados são armazenados no repositório CRX, por padrão. No entanto, como os usuários interagem com formulários por meio da instância de publicação do AEM, que geralmente está fora do firewall corporativo, as organizações podem querer personalizar o armazenamento de dados para que seja mais seguro e confiável.

A amostra, discutida neste documento, é uma implementação de referência de dados personalizados e serviços de metadados para integrar rascunhos e componentes de envios a um banco de dados. O banco de dados usado na implementação de amostra é MySQL 5.6.24. No entanto, é possível integrar o componente de rascunhos e envios a qualquer banco de dados de sua escolha.

NOTE
  • Os exemplos e as configurações explicadas neste documento são de acordo com o MySQL 5.6.24 e você deve substituí-los apropriadamente pelo seu sistema de banco de dados.
  • Verifique se você instalou a versão mais recente do pacote complementar do AEM Forms. Para obter a lista de pacotes disponíveis, consulte Versões do AEM Forms artigo.
  • O pacote de amostra funciona somente com ações de envio do Adaptive Forms.

Definir e configurar a amostra set-up-and-configure-the-sample

Execute as seguintes etapas, em todas as instâncias de autor e publicação, para instalar e configurar a amostra:

  1. Baixar o seguinte aem-fp-db-integration-sample-pkg-6.1.2.zip para o seu sistema de arquivos.

    Exemplo de pacote para integração de banco de dados

Obter arquivo

  1. Acesse o gerenciador de pacotes do AEM em https://[host]:[porta]/crx/packmgr/

  2. Clique em Fazer upload do pacote.

  3. Navegue para selecionar o aem-fp-db-integration-sample-pkg-6.1.2.zip e clique em OK.

  4. Clique em Instalar ao lado do pacote para instalar o pacote.

  5. Ir para Configuração do console da Web AEM
    página em https://[host]:[porta]/system/console/configMgr

  6. Clique para abrir Configuração de rascunho e envio do Forms Portal no modo de edição.

  7. Especifique os valores das propriedades conforme descrito na tabela a seguir:

    table 0-row-3 1-row-3 2-row-3 3-row-3 4-row-3 5-row-3 6-row-3
    Propriedade Descrição Valor
    Serviço de Dados de Rascunho do Portal do Forms Identificador do serviço de dados de rascunho formsportal.sampledataservice
    Serviço de Metadados de Rascunho do Portal do Forms Identificador do serviço de metadados de rascunho formsportal.samplemetadataservice
    Serviço de Envio de Dados do Forms Portal Identificador para enviar serviço de dados formsportal.sampledataservice
    Serviço de metadados de envio do portal do Forms Identificador para enviar serviço de metadados formsportal.samplemetadataservice
    Serviço de Dados com Assinatura Pendente do Portal Forms Identificador do serviço de dados com assinatura pendente formsportal.sampledataservice
    Serviço de Metadados de Assinatura Pendente do Forms Portal Identificador do serviço de metadados com assinatura pendente formsportal.samplemetadataservice
    note note
    NOTE
    Os serviços são resolvidos pelos nomes mencionados como valor para o aem.formsportal.impl.prop da seguinte forma:
    code language-java
    @Service(value = {SubmitDataService.class, DraftDataService.class})
    @Property(name = "aem.formsportal.impl.prop", value = "formsportal.sampledataservice")
    @Service(value = { SubmitMetadataService.class, DraftMetadataService.class })
    @Property(name = "aem.formsportal.impl.prop", value = "formsportal.samplemetadataservice")
    

    É possível alterar os nomes das tabelas de dados e de metadados.

    Para fornecer um nome diferente para a tabela de metadados:

    • Na Configuração do console da Web, localize e clique em Implementação de amostra do serviço de metadados do portal do Forms. Você pode alterar os valores da fonte de dados, metadados/nome da tabela de metadados adicionais.

    Para fornecer um nome diferente para a tabela de dados:

    • Na Configuração do console da Web, localize e clique em Implementação de amostra do Forms Portal Data Service. Você pode alterar os valores da fonte de dados e o nome da tabela de dados.
    note note
    NOTE
    Se você alterar os nomes das tabelas, forneça-os na configuração do Portal de formulários.
  8. Deixe as outras configurações como estão e clique em Salvar.

  9. A conexão do banco de dados pode ser feita por meio da fonte de dados agrupada da conexão Apache Sling.

  10. Para conexão com o Apache Sling, localize e clique para abrir Fonte de dados agrupada da conexão Apache Sling no modo de edição, na Configuração do console da Web. Especifique os valores das propriedades conforme descrito na tabela a seguir:

Propriedade
Valor
Nome da fonte de dados

Um nome de fonte de dados para filtrar drivers do pool de fonte de dados

Nota: A implementação de amostra usa FormsPortal como o nome da fonte de dados.

Classe de driver JDBC
com.mysql.jdbc.Driver
URI da conexão JDBC
jdbc//[host]:[porta]/[schema_name]
Nome de usuário
Um nome de usuário para autenticar e executar ações em tabelas do banco de dados
Senha
Senha associada ao nome de usuário
Isolamento de transação
READ_COMMITTED
Máximo de conexões ativas
1000
Máximo de Conexões Ociosas
100
Mínimo de conexões ociosas
10
Tamanho inicial
10
Espera Máxima
100000
Teste ao tomar emprestado
Marcado
Teste enquanto ocioso
Marcado
Consulta de validação
Os valores de exemplo são SELECT 1(mysql), select 1 from dual(oracle), SELECT 1(MS Sql Server) (validationQuery)
Tempo limite de consulta de validação
10000
NOTE
  • O driver JDBC para MySQL não é fornecido com a amostra. Certifique-se de que você o provisionou e forneça as informações necessárias para configurar o pool de conexões JDBC.
  • Aponte suas instâncias de autor e publicação para usar o mesmo banco de dados. O valor do campo URI da conexão JDBC deve ser o mesmo para todas as instâncias do autor e de publicação.
  1. Deixe as outras configurações como estão e clique em Salvar.

  2. Se você já tiver uma tabela no esquema do banco de dados, pule para a próxima etapa.

    Caso contrário, se você ainda não tiver uma tabela no esquema do banco de dados, execute as seguintes instruções SQL para criar tabelas separadas para dados, metadados e metadados adicionais no esquema do banco de dados:

    note note
    NOTE
    Você não precisa de bancos de dados diferentes para as instâncias de criação e publicação. Use o mesmo banco de dados em todas as instâncias de autor e publicação.

    Instrução SQL para tabela de dados

    code language-sql
    CREATE TABLE `data` (
    `owner` varchar(255) DEFAULT NULL,
    `data` longblob,
    `metadataId` varchar(45) DEFAULT NULL,
    `id` varchar(45) NOT NULL,
    PRIMARY KEY (`id`)
    ) ENGINE=InnoDB DEFAULT CHARSET=utf8;
    

    Instrução SQL para tabela de metadados

    code language-sql
    CREATE TABLE `metadata` (
    `formPath` varchar(1000) DEFAULT NULL,
    `formType` varchar(100) DEFAULT NULL,
    `description` text,
    `formName` varchar(255) DEFAULT NULL,
    `owner` varchar(255) DEFAULT NULL,
    `enableAnonymousSave` varchar(45) DEFAULT NULL,
    `renderPath` varchar(1000) DEFAULT NULL,
    `nodeType` varchar(45) DEFAULT NULL,
    `charset` varchar(45) DEFAULT NULL,
    `userdataID` varchar(45) DEFAULT NULL,
    `status` varchar(45) DEFAULT NULL,
    `formmodel` varchar(45) DEFAULT NULL,
    `markedForDeletion` varchar(45) DEFAULT NULL,
    `showDorClass` varchar(255) DEFAULT NULL,
    `sling:resourceType` varchar(1000) DEFAULT NULL,
    `attachmentList` longtext,
    `draftID` varchar(45) DEFAULT NULL,
    `submitID` varchar(45) DEFAULT NULL,
    `id` varchar(60) NOT NULL,
    `profile` varchar(255) DEFAULT NULL,
    `submitUrl` varchar(1000) DEFAULT NULL,
    `xdpRef` varchar(1000) DEFAULT NULL,
    `agreementId` varchar(255) DEFAULT NULL,
    `nextSigners` varchar(255) DEFAULT NULL,
    `eSignStatus` varchar(45) DEFAULT NULL,
    `pendingSignID` varchar(45) DEFAULT NULL,
    `agreementDataId` varchar(255) DEFAULT NULL,
    `enablePortalSubmit` varchar(45) DEFAULT NULL,
    `submitType` varchar(45) DEFAULT NULL,
    `dataType` varchar(45) DEFAULT NULL,
    `jcr:lastModified` varchar(45) DEFAULT NULL,
    PRIMARY KEY (`id`),
    UNIQUE KEY `ID_UNIQUE` (`id`)
    ) ENGINE=InnoDB DEFAULT CHARSET=utf8;
    

    Instrução SQL para metadatatable adicional

    code language-sql
    CREATE TABLE `additionalmetadatatable` (
    `value` text,
    `key` varchar(255) NOT NULL,
    `id` varchar(60) NOT NULL,
    PRIMARY KEY (`id`,`key`),
    CONSTRAINT 'additionalmetadatatable_fk' FOREIGN KEY (`id`) REFERENCES `metadata` (`id`) ON DELETE CASCADE
    ) ENGINE=InnoDB DEFAULT CHARSET=utf8;
    

    Instrução SQL para tabela de comentários

    code language-sql
    CREATE TABLE `commenttable` (
    `commentId` varchar(255) DEFAULT NULL,
    `comment` text DEFAULT NULL,
    `ID` varchar(255) DEFAULT NULL,
    `commentowner` varchar(255) DEFAULT NULL,
    `time` varchar(255) DEFAULT NULL);
    
  3. Se você já tiver as tabelas (dados, metadados e metadatáveis adicionais) no esquema de banco de dados, execute as seguintes consultas de tabela de alteração:

    Instrução SQL para alterar a tabela de dados

    code language-sql
    ALTER TABLE `data` CHANGE `owner` `owner` VARCHAR(255) CHARACTER SET utf8 COLLATE utf8_general_ci NULL DEFAULT NULL;
    

    Instrução SQL para alterar a tabela de metadados

    code language-sql
    ALTER TABLE metadata add markedForDeletion varchar(45) DEFAULT NULL
    
    note note
    NOTE
    A consulta de adição de metadados ALTER TABLE falhará se você já a tiver executado e se a coluna markedforDeletion estiver presente na tabela.
    code language-sql
    ALTER TABLE metadata add agreementId varchar(255) DEFAULT NULL,
    add nextSigners varchar(255) DEFAULT NULL,
    add eSignStatus varchar(45) DEFAULT NULL,
    add pendingSignID varchar(45) DEFAULT NULL,
    add agreementDataId varchar(255) DEFAULT NULL,
    add enablePortalSubmit varchar(45) DEFAULT NULL,
    add submitType varchar(45) DEFAULT NULL,
    add dataType varchar(45) DEFAULT NULL;
    
    code language-sql
    ALTER TABLE `metadata` CHANGE `formPath` `formPath` VARCHAR(1000) CHARACTER SET utf8 COLLATE utf8_general_ci NULL DEFAULT NULL,
    CHANGE `formType` `formType` VARCHAR(100) CHARACTER SET utf8 COLLATE utf8_general_ci NULL DEFAULT NULL,
    CHANGE `description` `description` TEXT CHARACTER SET utf8 COLLATE utf8_general_ci NULL DEFAULT NULL,
    CHANGE `formName` `formName` VARCHAR(255) CHARACTER SET utf8 COLLATE utf8_general_ci NULL DEFAULT NULL,
    CHANGE `owner` `owner` VARCHAR(255) CHARACTER SET utf8 COLLATE utf8_general_ci NULL DEFAULT NULL,
    CHANGE `renderPath` `renderPath` VARCHAR(1000) CHARACTER SET utf8 COLLATE utf8_general_ci NULL DEFAULT NULL,
    CHANGE `showDorClass` `showDorClass` VARCHAR(255) CHARACTER SET utf8 COLLATE utf8_general_ci NULL DEFAULT NULL,
    CHANGE `sling:resourceType` `sling:resourceType` VARCHAR(1000) CHARACTER SET utf8 COLLATE utf8_general_ci NULL DEFAULT NULL,
    CHANGE `profile` `profile` VARCHAR(255) CHARACTER SET utf8 COLLATE utf8_general_ci NULL DEFAULT NULL,
    CHANGE `submitUrl` `submitUrl` VARCHAR(1000) CHARACTER SET utf8 COLLATE utf8_general_ci NULL DEFAULT NULL,
    CHANGE `xdpRef` `xdpRef` VARCHAR(1000) CHARACTER SET utf8 COLLATE utf8_general_ci NULL DEFAULT NULL;
    

    Instrução SQL para alterar a tabela de metadados adicional

    code language-sql
    ALTER TABLE `additionalmetadatatable` CHANGE `value` `value` TEXT CHARACTER SET utf8 COLLATE utf8_general_ci NULL DEFAULT NULL, CHANGE `key` `key` VARCHAR(255) CHARACTER SET utf8 COLLATE utf8_general_ci NOT NULL;
    

A implementação de amostra agora está configurada, que você pode usar para listar seus rascunhos e envios enquanto armazena todos os dados e metadados em um banco de dados. Agora vamos ver como os serviços de dados e metadados são configurados na amostra.

Instale o arquivo mysql-connector-java-5.1.39-bin.jar install-mysql-connector-java-bin-jar-file

Execute as seguintes etapas, em todas as instâncias de autor e publicação, para instalar o arquivo mysql-connector-java-5.1.39-bin.jar:

  1. Navegue até https://'[server]:[port]'/system/console/depfinder e procure pelo pacote com.mysql.jdbc.

  2. Na coluna Exportado por, verifique se o pacote foi exportado por algum pacote.

    Continue se o pacote não for exportado por um pacote.

  3. Navegue até https://'[server]:[port]'/system/console/bundles e clique em Instalar/Atualizar.

  4. Clique em Escolher arquivo e navegue para selecionar o arquivo mysql-connector-java-5.1.39-bin.jar. Além disso, Iniciar pacote e Atualizar pacotes caixas de seleção.

  5. Clique em Instalar ou atualizar. Após a conclusão, reinicie o servidor.

  6. (Somente Windows) Desative o firewall do sistema para o seu sistema operacional.

NOTE
É recomendável usar o comando "Ctrl + C" para reiniciar o SDK. Reiniciar o SDK do AEM usando métodos alternativos, por exemplo, parar processos Java, pode levar a inconsistências no ambiente de desenvolvimento do AEM.

Exemplo de código para o serviço de dados e metadados do portal de formulários sample-code-for-forms-portal-data-and-metadata-service

O zip a seguir contém FormsPortalSampleDataServiceImpl e FormsPortalSampleMetadataServiceImpl (classes de implementação) para interfaces de serviço de dados e metadados. Além disso, contém todas as classes necessárias para a compilação das classes de implementação mencionadas acima.

Obter arquivo

Verificar comprimento do nome do arquivo verify-length-of-the-file-name

A implementação do banco de dados do Forms Portal usa uma tabela de metadados adicional. A tabela tem uma chave primária composta com base nas colunas Chave e id da tabela. O MySQL permite chaves primárias com até 255 caracteres. Você pode usar o script de validação do lado do cliente a seguir para verificar o comprimento do nome de arquivo anexado ao dispositivo de arquivo. A validação é executada quando um arquivo é anexado. O script fornecido no procedimento a seguir exibe uma mensagem quando o nome do arquivo é maior que 150 (incluindo a extensão). Você pode modificar o script para verificá-lo quanto a um número diferente de caracteres.

Execute as seguintes etapas para criar uma biblioteca do cliente e use o script:

  1. Faça logon no CRXDE e navegue até /etc/clientlibs/

  2. Criar um nó do tipo cq:ClientLibraryFolder e forneça o nome do nó. Por exemplo, validation.

    Clique em Salvar tudo.

  3. Clique com o botão direito do mouse no nó e clique em criar novo arquivo, e crie um arquivo com a extensão .txt. Por exemplo, js.txtAdicione o seguinte código ao arquivo .txt recém-criado e clique em Salvar tudo.

    code language-javascript
    #base=util
     util.js
    

    No código acima, util é o nome da pasta e util.js nome do arquivo na variável util pasta. A variável util pasta e util.js O arquivo será criado nas etapas seguintes.

  4. Clique com o botão direito do mouse no cq:ClientLibraryFolder criado na etapa 2, selecione Criar > Criar pasta. Crie uma pasta chamada util. Clique em Salvar tudo. Clique com o botão direito do mouse no util selecione Criar > Criar arquivo. Crie um arquivo chamado util.js. Clique em Salvar tudo.

  5. Adicione o seguinte código ao arquivo util.js e clique em Salvar tudo. O comprimento de validação do código do nome do arquivo.

    code language-javascript
    /*
     * ADOBE CONFIDENTIAL
     * ___________________
     *
     * Copyright 2016 Adobe Systems Incorporated
     * All Rights Reserved.
     *
     * NOTICE:  All information contained herein is, and remains
     * the property of Adobe Systems Incorporated and its suppliers,
     * if any.  The intellectual and technical concepts contained
     * herein are proprietary to Adobe Systems Incorporated and its
     * suppliers and may be covered by U.S. and Foreign Patents,
     * patents in process, and are protected by trade secret or copyright law.
     * Dissemination of this information or reproduction of this material
     * is strictly forbidden unless prior written permission is obtained
     * from Adobe Systems Incorporated.
     *
     */
    (function () {
        var connectWithGuideBridge = function (gb) {
            gb.connect(function () {
                //For first time load
                window.guideBridge.on("elementValueChanged" , function(event, payload) {
            var component = payload.target; // Field whose value has changed
                    if(component.name == 'fileAttachment' && component.parent) {
                        var fileItems = $('#'+payload.target.parent.id).find(".guide-fu-fileItem");
                        for (i = 0;i<fileItems.length;i++) {
                            var filename = $(fileItems[i]).find(".guide-fu-fileName").text();
                            //check whether it is previously attached file or a newly  attached one
                            if(filename.length > 150 && filename.indexOf("fp.attach.jsp") < 0) {
                                window.alert("filename is larger than 150 : "+filename);
                                 $(fileItems[i]).find(".guide-fu-fileClose.close").click();
                            }
                        }
                    }
    
       });
            });
        };
    
        if (window.guideBridge) {
            connectWithGuideBridge(window.guideBridge);
        } else {
            window.addEventListener("bridgeInitializeStart", function (event) {
                connectWithGuideBridge(event.detail.guideBridge);
            });
        }
    })();
    
    note note
    NOTE
    O script é para o componente de widget de anexo pronto para uso. Se você personalizou o widget de anexo pronto para uso, altere o script acima para incorporar as respectivas alterações.
  6. Adicione a seguinte propriedade à pasta criada na etapa 2 e clique em Salvar tudo.

    • Nome: categorias

    • Tipo: String

    • Valor: fp.validation

    • multiopção: Ativado

  7. Navegue até /libs/fd/af/runtime/clientlibs/guideRuntimee anexe a variável fp.validation para a propriedade embed.

  8. Navegue até /libs/fd/af/runtime/clientlibs/guideRuntimeWithXFA e anexe o fp.validation valor para incorporar a propriedade.

    note note
    NOTE
    Se você estiver usando bibliotecas de clientes personalizadas em vez das bibliotecas de clientes guideRuntime e guideRuntimeWithXfa, use o nome da categoria para incorporar a biblioteca de clientes criada neste procedimento às bibliotecas personalizadas carregadas no tempo de execução.
  9. Clique em Salvar tudo. Agora, quando o nome do arquivo tiver mais de 150 caracteres (incluindo a extensão), uma mensagem será exibida.

recommendation-more-help
19ffd973-7af2-44d0-84b5-d547b0dffee2