AEM 6.4 ha llegado al final de la compatibilidad ampliada y esta documentación ya no se actualiza. Para obtener más información, consulte nuestra períodos de asistencia técnica. Buscar las versiones compatibles here.
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.
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:
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 |
Los servicios se resuelven con sus nombres mencionados como valor de la clave aem.formsportal.impl.prop
como se indica a continuación:
@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:
Para proporcionar un nombre diferente para la tabla de datos:
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:
Propiedad | Valor |
Nombre de la fuente de datos | Un nombre de fuente de datos para filtrar los controladores del grupo de fuentes de datos Nota: La implementación de ejemplo utiliza el portal de formularios como nombre de la fuente de datos. |
Clase de controlador JDBC | com.mysql.jdbc.Driver |
URI de conexión JDBC |
jdbc:mysql://[host]:[port]/[schema_name] |
Nombre de usuario | Un nombre de usuario para autenticar y realizar acciones en tablas de base de datos |
Contraseña | La contraseña asociada al nombre de usuario |
Aislamiento de transacciones | READ_COMMITTED |
Máximo de conexiones activas | 1000 |
Conexiones máximas inactivas | 100 |
Conexiones mínimas inactivas | 10 |
Tamaño inicial | 10 |
Espera máxima | 100 000 |
Prueba a la vista previa | Comprobado |
Prueba mientras está inactiva | Comprobado |
Consulta de validación | Los valores de ejemplo son SELECT 1(mysql), select 1 from dual(oracle), SELECT 1(MS Sql Server) (validationQuery) |
Tiempo de espera de consulta de validación | 10 000 |
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:
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
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
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
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
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
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
ALTER TABLE metadata add markedForDeletion varchar(45) DEFAULT NULL
La consulta ALTER TABLE metadata add falla si ya la ha ejecutado y la columna markedforDeletion está presente en la tabla.
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;
Instrucción SQL para alterar la tabla de metadatos adicional
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.
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.
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.
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.
#base=util
util.js
En el código anterior, util
es el nombre de la carpeta y util.js
el nombre del archivo en la carpeta util
. La carpeta util
y el archivo util.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 nombre util
. Haga clic en Guardar todo. Haga clic con el botón derecho en la carpeta util
y seleccione Crear > Crear archivo. Cree un archivo con el nombre util.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.
/*
* 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);
});
}
})();
El script está diseñado para el componente del widget de archivos adjuntos predeterminado (OOTB). Si ha personalizado el widget de archivos adjuntos OOTB, cambie el script anterior para agregar 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 valor fp.validation
a la propiedad embed.
Vaya a /libs/fd/af/runtime/clientlibs/guideRuntimeWithXFA y añada el valor fp.validation
a la propiedad embed.
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.