Ejemplo para integrar el componente Borradores y envíos con la base de datos sample-for-integrating-drafts-submissions-component-with-database
Información general sobre el ejemplo sample-overview
El componente Borradores y envíos del portal de AEM Forms permite a los usuarios guardar sus formularios como borradores y enviarlos más tarde desde cualquier dispositivo. Asimismo, los usuarios pueden ver los formularios que han enviado en el Portal. Para habilitar esta funcionalidad, AEM Forms proporciona servicios de metadatos y datos para almacenar los datos rellenados por un usuario en el formulario y los metadatos de formulario asociados a los borradores y los formularios enviados. De forma predeterminada, estos datos se almacenan en el repositorio CRX. Sin embargo, a medida que los usuarios interactúen con los formularios a través de la instancia de publicación de AEM, que generalmente se encuentra fuera del cortafuegos de la empresa, es posible que las organizaciones deseen personalizar el almacenamiento de datos para que sea más seguro y fiable.
El ejemplo que se analiza en este documento es una implementación de referencia de servicios personalizados de metadatos y datos para integrar componente Borradores y envíos con una base de datos. La base de datos utilizada en la implementación de ejemplo es MySQL 5.6.24. Sin embargo, puede integrar el componente Borradores y envíos con cualquier base de datos de su elección.
- Los ejemplos y configuraciones explicados en este documento corresponden a MySQL 5.6.24. y debe sustituirlos adecuadamente por su sistema de base de datos.
- Asegúrese de que ha instalado la última versión del paquete de complementos de AEM Forms. Para ver la lista de paquetes disponibles, consulte el artículo Versiones de AEM Forms.
- El paquete de ejemplo solo es compatible con las acciones de envío de los formularios adaptables.
Configuración del ejemplo set-up-and-configure-the-sample
Realice los siguientes pasos en todas las instancias de autor y publicación para instalar y configurar el ejemplo:
-
Descargue el siguiente paquete aem-fp-db-integration-sample-pkg-6.1.2.zip en su sistema de archivos.
Paquete de muestra para la integración de bases de datos
-
Vaya a al Administrador de paquetes de AEM en https://[host]:[port]/crx/packmgr/.
-
Haga clic en Cargar paquete.
-
Busque y seleccione el paquete aem-fp-db-integration-sample-pkg-6.1.2.zip y haga clic en Aceptar.
-
Haga clic en la opción Instalar que aparece junto al paquete para instalarlo.
-
Vaya a la página de configuración de la consola web de AEM
en https://[host]:[port]/system/console/configMgr. -
Haga clic para abrir Configuración de borradores y envíos del portal de formularios en el modo Edición.
-
Especifique los valores de las propiedades tal como se describe en la siguiente tabla:
table 0-row-3 1-row-3 2-row-3 3-row-3 4-row-3 5-row-3 6-row-3 Propiedad Descripción Valor Servicio de datos de borrador del portal de formularios Identificador del servicio de datos de borrador formsportal.sampledataservice Servicio de metadatos de borrador del portal de formularios Identificador del servicio de metadatos de borrador formsportal.samplemetadataservice Servicio de envío de datos del portal de formularios Identificador del servicio de envío de datos formsportal.sampledataservice Servicio de envío de metadatos del portal de formularios Identificador del servicio de envío de metadatos formsportal.samplemetadataservice Servicio de datos de firma pendiente del portal de formularios Identificador del servicio de datos de firma pendiente formsportal.sampledataservice Servicio de metadatos de firma pendiente del portal de formularios Identificador del servicio de metadatos de firma pendiente formsportal.samplemetadataservice note note NOTE Los servicios se resuelven con sus nombres mencionados como valor de la clave aem.formsportal.impl.prop
como se indica a continuación: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")
Puede cambiar los nombres de las tablas de datos y metadatos.
Para proporcionar un nombre diferente para la tabla de metadatos:
- En la configuración de la consola web, busque y haga clic en Implementación de ejemplo del servicio de metadatos del portal de formularios. Puede cambiar los valores de la fuente de datos, los metadatos o el nombre de la tabla de metadatos adicional.
Para proporcionar un nombre diferente para la tabla de datos:
- En la configuración de la consola web, busque y haga clic en Implementación de ejemplo del servicio de datos del portal de formularios. Puede cambiar los valores de la fuente de datos y el nombre de la tabla de datos.
note note NOTE Si cambia los nombres de las tablas, proporciónelos en la configuración del portal de formularios. -
Deje el resto de las configuraciones tal como están y haga clic en Guardar.
-
La conexión a la base de datos se puede realizar mediante la fuente de datos agrupada de la conexión de Apache Sling.
-
Para utilizar la conexión de Apache Sling, busque y haga clic en la Fuente de datos obtenida de una conexión Apache Sling para abrirla en el modo de edición en la configuración de la consola web. Especifique los valores de las propiedades tal como se describe en la siguiente tabla:
- El controlador JDBC para MySQL no se proporciona con el ejemplo. Asegúrese de que lo ha aprovisionado y proporcione la información necesaria para configurar el grupo de conexiones JDBC.
- Asigne instancias de autor y publicación para utilizar la misma base de datos. El valor del campo URI de conexión JDBC debe ser el mismo para todas las instancias de autor y publicación.
-
Deje el resto de las configuraciones tal como están y haga clic en Guardar.
-
Si ya tiene una tabla en el esquema de la base de datos, vaya al paso siguiente.
De lo contrario, si aún no tiene una tabla en el esquema de la base de datos, ejecute las siguientes instrucciones SQL para crear tablas independientes para los datos, los metadatos y los metadatos adicionales en el esquema de la base de datos:
note note NOTE No necesita bases de datos diferentes para las instancias de autor y publicación. Utilice la misma base de datos en todas las instancias de autor y publicación. Instrucción SQL para la tabla de datos
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;
Instrucción SQL para la tabla de metadatos
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;
Instrucción SQL para la tabla de metadatos 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;
Instrucción SQL para la tabla de comentarios
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);
-
Si ya tiene las tablas (la tabla de datos, la tabla de metadatos y la tabla de metadatos adicional) en el esquema de la base de datos, ejecute las siguientes consultas ALTER TABLE:
Instrucción SQL para modificar la tabla de datos
code language-sql ALTER TABLE `data` CHANGE `owner` `owner` VARCHAR(255) CHARACTER SET utf8 COLLATE utf8_general_ci NULL DEFAULT NULL;
Instrucción SQL para modificar la tabla de metadatos
code language-sql ALTER TABLE metadata add markedForDeletion varchar(45) DEFAULT NULL
note note NOTE La consulta ALTER TABLE metadata add falla si ya la ha ejecutado y la columna markedforDeletion está presente en la tabla. 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;
Instrucción SQL para alterar la tabla de metadatos 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;
La implementación de ejemplo ya está configurada. Puede utilizarla para ver una lista de los borradores y los envíos mientras almacena todos los datos y metadatos en una base de datos. Ahora veamos cómo se configuran los servicios de datos y metadatos en el ejemplo.
Instale el archivo mysql-connector-java-5.1.39-bin.jar. install-mysql-connector-java-bin-jar-file
Realice los siguientes pasos en todas las instancias de autor y publicación para instalar el archivo mysql-connector-java-5.1.39-bin.jar:
-
Vaya a
https://'[server]:[port]'/system/console/depfinder
y busque el paquete com.mysql.jdbc. -
En la columna Exportado por, compruebe si el paquete lo exporta algún otro paquete.
Continúe si el paquete no se exporta mediante ningún paquete.
-
Vaya a
https://'[server]:[port]'/system/console/bundles
y haga clic en Instalar/actualizar. -
Haga clic en Elegir archivo y busque el archivo mysql-connector-java-5.1.39-bin.jar para seleccionarlo. Seleccione también las casillas de verificación Iniciar paquete y Actualizar paquetes.
-
Haga clic en Instalar o actualizar. Una vez finalizado, reinicie el servidor.
-
(Solo Windows) Desactive el cortafuegos de su sistema operativo.
Código de ejemplo para el servicio de metadatos y datos del portal de formularios sample-code-for-forms-portal-data-and-metadata-service
El siguiente zip contiene FormsPortalSampleDataServiceImpl
y FormsPortalSampleMetadataServiceImpl
(clases de implementación) para las interfaces del servicio de metadatos y datos. También contiene todas las clases necesarias para compilar las clases de implementación mencionadas anteriormente.
Comprobar la longitud del nombre de archivo verify-length-of-the-file-name
La implementación de la base de datos del portal de formularios utiliza tablas de metadatos adicionales. La tabla tiene una clave principal compuesta basada en las columnas Clave e ID de la tabla. MySQL admite claves principales con una longitud de hasta 255 caracteres. Puede utilizar el siguiente script de validación del lado del cliente para verificar la longitud del nombre del archivo adjunto al widget de archivos. La validación se ejecuta cuando se adjunta un archivo. El script proporcionado en el siguiente procedimiento muestra un mensaje cuando el nombre del archivo tiene más de 150 caracteres (incluida la extensión). Puede modificar el script para comprobar si hay un número diferente de caracteres.
Siga los siguientes pasos para crear una biblioteca cliente y utilizar el script:
-
Inicie sesión en CRXDE y vaya a /etc/clientlibs/.
-
Cree un nodo de tipo cq:ClientLibraryFolder y proporcione un nombre para él. Por ejemplo,
validation
.Haga clic en Guardar todo.
-
Haga clic con el botón derecho en el nodo, luego haga clic en Crear nuevo archivo y cree un archivo con la extensión .txt. Por ejemplo,
js.txt
agregue el siguiente código al archivo .txt recién creado y haga clic en Guardar todo.code language-javascript #base=util util.js
En el código anterior,
util
es el nombre de la carpeta yutil.js
el nombre del archivo en la carpetautil
. La carpetautil
y el archivoutil.js
se crean en pasos sucesivos. -
Haga clic con el botón derecho en el nodo
cq:ClientLibraryFolder
creado en el paso 2 y seleccione Crear > Crear carpeta. Cree una carpeta con el nombreutil
. Haga clic en Guardar todo. Haga clic con el botón derecho en la carpetautil
y seleccione Crear > Crear archivo. Cree un archivo con el nombreutil.js
. Haga clic en Guardar todo. -
Agregue el siguiente código al archivo util.js y haga clic en Guardar todo. El código valida la longitud del nombre del archivo.
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 El script es para el componente del widget de archivos adjuntos predeterminado. Si ha personalizado el widget de archivos adjuntos predeterminado, cambie el script anterior para incorporar los cambios correspondientes. -
Añada la siguiente propiedad a la carpeta creada en el paso 2 y haga clic en Guardar todo.
-
Nombre: categories
-
Tipo: cadena
-
Valor: fp.validation
-
multiopción: Habilitado
-
-
Vaya a
/libs/fd/af/runtime/clientlibs/guideRuntime
y añada el valorfp.validation
a la propiedad embed. -
Vaya a /libs/fd/af/runtime/clientlibs/guideRuntimeWithXFA y añada el valor
fp.validation
a la propiedad embed.note note NOTE Si está utilizando bibliotecas de cliente personalizadas en lugar de las bibliotecas de cliente guideRuntime y guideRuntimeWithXfa, utilice el nombre de categoría para incrustar la biblioteca de cliente creada en este procedimiento en las bibliotecas personalizadas cargadas durante la ejecución. -
Haga clic en Guardar todo. A partir de ahora, cuando el nombre de archivo tiene más de 150 caracteres (incluyendo la extensión), se muestra un mensaje.