Show Menu
TÓPICOS×

Amostra para integrar o componente de rascunhos e envios ao banco de dados

Visão geral da amostra

O componente de rascunhos e envios do portal do AEM Forms permite que os usuários salvem seus formulários como rascunhos e enviem posteriormente de qualquer dispositivo. Além disso, os usuários podem visualização seus formulários enviados no portal. Para habilitar essa funcionalidade, o AEM Forms fornece serviços de dados e metadados para armazenar os dados preenchidos por um usuário no formulário e os metadados associados aos rascunhos e formulários enviados. Esses dados são armazenados no repositório CRX, por padrão. No entanto, à medida que os usuários interagem com formulários por meio da instância de publicação do AEM, que geralmente está fora do firewall da empresa, as organizações podem querer personalizar o armazenamento de dados para que ele 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 os componentes de rascunhos e envios a um banco de dados. O banco de dados usado na implementação de amostra é o MySQL 5.6.24 . No entanto, você pode integrar o componente de rascunhos e envios a qualquer banco de dados de sua escolha.
  • Os exemplos e configurações explicados neste documento são de acordo com o MySQL 5.6.24 e você deve substituí-los adequadamente para o seu sistema de banco de dados.
  • Verifique se você instalou a versão mais recente do pacote complementar AEM Forms. Para obter a lista dos pacotes disponíveis, consulte o artigo de versões do AEM Forms.
  • O pacote de amostra funciona somente com ações de envio de formulários adaptativos.

Configurar e configurar a amostra

Execute as seguintes etapas, em todas as instâncias de autor e publicação, para instalar e configurar a amostra:
  1. Baixe o seguinte pacote aem-fp-db-integration-sample-pkg-6.1.2.zip no seu sistema de arquivos.
    Pacote de amostra para integração de banco de dados
  2. Vá para o gerenciador de pacote do AEM em https:// #: #/crx/packmgr/.
  3. Clique em Carregar pacote .
  4. Navegue para selecionar o pacote aem-fp-db-integration-sample-pkg-6.1.2.zip e clique em OK .
  5. Clique em Instalar ao lado do pacote para instalar o pacote.
  6. Vá para a página Configuração do console da Web do AEM em https:// #: #/system/console/configMgr.
  7. Clique para abrir Configuração de rascunho e envio do Portal do Forms no modo de edição.
  8. Especifique os valores para as propriedades conforme descrito na tabela a seguir:
    Propriedade
    Descrição
    Valor
    Serviço de Dados de Rascunho do Portal de Formulários
    Identificador do serviço de dados de rascunho
    formsportal.sampledataservice
    Serviço de Metadados de Rascunho do Portal de Formulários
    Identificador do serviço de metadados de rascunho
    formsportal.samplemetadataservice
    Serviço de Dados de Envio de Portal de Formulários
    Identificador para enviar o serviço de dados
    formsportal.sampledataservice
    Serviço de Metadados de Envio do Portal de Formulários
    Identificador para o serviço de metadados de envio
    formsportal.samplemetadataservice
    Serviço de Dados de Assinatura Pendente do Portal de Formulários
    Identificador do serviço de dados de assinatura pendente
    formsportal.sampledataservice
    Serviço de Metadados de Assinatura Pendente do Portal de Formulários
    Identificador do serviço de metadados de assinatura pendente
    formsportal.samplemetadataservice
    Os serviços são resolvidos pelos nomes mencionados como valor da aem.formsportal.impl.prop chave, da seguinte forma:
    @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 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, dos metadados/do 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 serviço de dados do Portal do Forms. É possível alterar os valores da fonte de dados e do nome da tabela de dados.
    Se você alterar os nomes das tabelas, forneça-os na configuração do Portal de formulários.
  9. Deixe outras configurações como estão e clique em Salvar .
  10. A conexão com o banco de dados pode ser feita por meio da Fonte de Dados Pooling da Conexão Apache Sling.
  11. Para a conexão Apache Sling, localize e clique para abrir a Apache Sling Connection Pooling DataSource no modo de edição na Configuração do console da Web. Especifique os valores para as 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 fontes de dados
Observação: A implementação de amostra usa o FormsPortal como o nome da fonte de dados.
Classe de driver JDBC com.mysql.jdbc.Driver
URI de conexão JDBC jdbc:mysql://[ host ]:[ porta ]/[ schema_name ]
Nome de usuário Um nome de usuário para autenticar e executar ações em tabelas de banco de dados
Senha Senha associada ao nome de usuário
Isolamento da transação READ_COMMTED
Máximo de conexões ativas 1000
Máximo de conexões inativas 100
Conexões inativas mínimas 10
Tamanho inicial 10
Espera máxima 100000
Teste de emprestado Marcado
Testar enquanto ocioso Marcado
Query de validação Exemplos de valores são SELECT 1(mysql), select 1 from dual(oracle), SELECT 1(MS Sql Server) (validationQuery)
Tempo limite do Query de validação 10000
  • O driver JDBC para MySQL não é fornecido com a amostra. Certifique-se de que você o tenha provisionado 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 de conexão JDBC deve ser o mesmo para todas as instâncias de autor e publicação.
  1. Deixe outras configurações como estão e clique em Salvar .
  2. Se você já tiver uma tabela no schema do banco de dados, pule para a próxima etapa.
    Caso contrário, se você ainda não tiver uma tabela no schema do banco de dados, execute as seguintes instruções SQL para criar tabelas separadas para dados, metadados e metadados adicionais no schema do banco de dados:
    Você não exige bancos de dados diferentes para instâncias de autor 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
    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
    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 metadados adicionais
    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
    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 metadados adicionais) no schema de banco de dados, execute os seguintes query de tabela futura:
    Instrução SQL para alterar a tabela de dados
    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
    ALTER TABLE metadata add markedForDeletion varchar(45) DEFAULT NULL
    
    
    O query de adição de metadados ALTER TABLE falhará se você já o tiver executado e a coluna markedforDelete estiver presente na tabela.
    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;
    
    
    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 adicionais
    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 lista de rascunhos e envios enquanto armazena todos os dados e metadados em um banco de dados. Agora vamos ver como os dados e os serviços de metadados são configurados na amostra.

Instale o arquivo mysql-Connector-java-5.1.39-bin.jar

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 o pacote com.mysql.jdbc e procure-o.
  2. Na coluna Exportado por, verifique se o pacote é exportado por qualquer pacote.
    Continue se o pacote não for exportado por nenhum 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, marque as caixas de seleção Pacote de Start e Atualizar pacotes .
  5. Clique em Instalar ou atualizar . Após a conclusão, reinicie o servidor.
  6. (Somente para Windows) Desligue o firewall do sistema para o seu sistema operacional.

Código de amostra para dados do portal de formulários e serviço de metadados

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, ele contém todas as classes necessárias para a compilação das classes de implementação acima mencionadas.

Verifique o comprimento do nome do arquivo

A implementação do banco de dados do Portal do Forms 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 até o comprimento de 255 caracteres. Você pode usar o seguinte script de validação do lado do cliente para verificar a duração do nome de arquivo anexado ao widget 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 for maior que 150 (incluindo extensão). É possível modificar o script para verificar se há um número diferente de caracteres.
Execute as seguintes etapas para criar uma biblioteca do cliente e usar o script:
  1. Faça logon no CRXDE e navegue até /etc/clientlibs/
  2. Crie 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ó, clique em criar um novo arquivo e crie um arquivo com a extensão .txt. Por exemplo, js.txt adicione o seguinte código ao arquivo .txt recém-criado e clique em Salvar tudo .
    #base=util
     util.js
    
    
    No código acima, util é o nome da pasta e o util.js nome do arquivo na util pasta. A util util.js pasta e o arquivo são criados em etapas bem-sucedidas.
  4. Clique com o botão direito do mouse no cq:ClientLibraryFolder nó 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 na util pasta e 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.
    /*
     * 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);
            });
        }
    })();
    
    
    O script é para o componente de widget anexo OTB (out-out). Se você personalizou o widget de anexo OOTB, 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
    • várias opções: Ativado
  7. Navegue até /libs/fd/af/runtime/clientlibs/guideRuntime e anexe o fp.validation valor à propriedade embed.
  8. Navegue até /libs/fd/af/runtime/clientlibs/guideRuntimeWithXFA e anexe o fp.validation valor à propriedade embed.
    Se você estiver usando bibliotecas de cliente personalizadas em vez das bibliotecas de cliente guideRuntime e guideRuntimeWithXfa, use o nome da categoria para incorporar a biblioteca de cliente criada neste procedimento às bibliotecas personalizadas carregadas no tempo de execução.
  9. Clique em Salvar tudo. Agora, quando o nome do arquivo for maior que 150 caracteres (incluindo extensão), uma mensagem será exibida.