AEM Forms portal草稿和提交组件允许用户将其表单另存为草稿,并稍后从任何设备提交。 此外,用户还可以在门户上查看他们提交的表单。 为了启用此功能,AEM Forms提供数据和元数据服务,以存储用户填写的表单数据,以及与草稿和已提交表单关联的表单元数据。 默认情况下,此数据存储在CRX存储库中。 但是,当用户通过AEM发布实例(通常位于企业防火墙之外)与表单进行交互时,组织可能希望自定义数据存储以便使其更加安全和可靠。
本文档中讨论的示例是自定义数据和元数据服务的参考实现,用于将草稿和提交组件与数据库集成。 示例实施中使用的数据库是 MySQL 5.6.24. 但是,您可以将草稿和提交组件与所选的任何数据库集成。
在所有创作和发布实例上执行以下步骤,以安装和配置示例:
下载以下内容 aem-fp-db-integration-sample-pkg-6.1.2.zip 包到您的文件系统。
用于数据库集成的示例包
转到AEM包管理器,网址为https://[主机]:[端口]/crx/packmgr/.
单击 上传包.
浏览以选择 aem-fp-db-integration-sample-pkg-6.1.2.zip 打包并单击 确定.
单击 安装 到包旁边以安装包。
转到 AEM Web控制台配置
页面:https://[主机]:[端口]/system/console/configMgr.
单击以打开 Forms Portal草稿和提交配置 在编辑模式下。
按照下表中的说明指定属性的值:
属性 | 描述 | 值 |
---|---|---|
Forms Portal草稿数据服务 | 草稿数据服务的标识符 | formsportal.sampledataservice |
Forms Portal草稿元数据服务 | 草稿元数据服务的标识符 | formsportal.samplemetadataservice |
Forms门户提交数据服务 | 提交数据服务的标识符 | formsportal.sampledataservice |
Forms门户提交元数据服务 | 提交元数据服务的标识符 | formsportal.samplemetadataservice |
Forms Portal挂起的签名数据服务 | 待处理签名数据服务的标识符 | formsportal.sampledataservice |
Forms Portal挂起的签名元数据服务 | 待处理签名元数据服务的标识符 | formsportal.samplemetadataservice |
服务名称作为服务的值来解析 aem.formsportal.impl.prop
键如下所示:
@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")
您可以更改数据和元数据表的名称。
要为元数据表提供其他名称,请执行以下操作:
为数据表提供不同的名称:
如果更改表名,请在表单门户配置中提供它们。
保留其他配置不变,然后单击 保存.
可以通过Apache Sling连接池数据源建立数据库连接。
对于Apache Sling连接,请查找并单击以打开 Apache Sling连接池化数据源 在“Web控制台配置”的编辑模式下。 按照下表中的说明指定属性的值:
属性 | 价值 |
数据源名称 | 用于从数据源池筛选驱动程序的数据源名称 注意: 示例实施使用FormsPortal作为数据源名称。 |
JDBC驱动程序类 | com.mysql.jdbc.Driver |
JDBC连接URI |
jdbc:mysql://[主机]:[端口]/[schema_name] |
用户名 | 用于对数据库表进行身份验证和执行操作的用户名 |
密码 | 与用户名关联的密码 |
事务隔离 | READ_COMMITTED |
最大活动连接数 | 1000 |
最大空闲连接数 | 100 |
最小空闲连接数 | 10 |
初始大小 | 10 |
最大等待 | 100000 |
借入测试 | 已选中 |
空闲时测试 | 已选中 |
验证查询 | 示例值为SELECT 1(mysql),从dual(oracle)中选择1,SELECT 1(MS Sql Server) (validationQuery) |
验证查询超时 | 10000 |
保留其他配置不变,然后单击 保存.
如果数据库模式中已有表,请跳至下一步。
否则,如果数据库模式中还没有表,请执行以下SQL语句,为数据库模式中的数据、元数据和其他元数据创建单独的表:
创作实例和发布实例不需要不同的数据库。 在所有创作实例和发布实例上使用相同的数据库。
数据表的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;
元数据表的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;
SQL语句for additionalmetadatable
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;
注释表的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);
如果数据库模式中已有表(数据、元数据和additionalmetadatable),请执行以下更改表查询:
用于更改数据表的SQL语句
ALTER TABLE `data` CHANGE `owner` `owner` VARCHAR(255) CHARACTER SET utf8 COLLATE utf8_general_ci NULL DEFAULT NULL;
用于更改元数据表的SQL语句
ALTER TABLE metadata add markedForDeletion varchar(45) DEFAULT NULL
如果您已运行ALTER TABLE元数据添加查询,并且表中存在marketforDeletion列,则该查询会失败。
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;
用于更改additionalmetadatable表的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;
现在已配置示例实施,您可以在将所有数据和元数据存储在数据库中时,使用该实施列出草稿和提交内容。 现在,让我们查看示例中数据和元数据服务的配置方式。
在所有创作实例和发布实例上执行以下步骤,安装mysql-connector-java-5.1.39-bin.jar文件:
导航到 https://'[server]:[port]'/system/console/depfinder
和搜索com.mysql.jdbc包。
在“导出方式”列中,检查是否按任意包导出包。
如果包未由任何捆绑包导出,请继续。
导航到 https://'[server]:[port]'/system/console/bundles
并单击 安装/更新.
单击 选择文件 并浏览以选择mysql-connector-java-5.1.39-bin.jar文件。 此外,选择 启动捆绑包 和 刷新包 复选框。
单击 安装或更新. 完成后,重新启动服务器。
(仅限Windows)关闭操作系统的系统防火墙。
以下zip文件包含 FormsPortalSampleDataServiceImpl
和 FormsPortalSampleMetadataServiceImpl
(实现类)用于数据和元数据服务接口。 此外,它还包含编译上述实现类所需的所有类。
Forms Portal的数据库实施使用其他元数据表。 该表具有基于表的键和ID列的复合主键。 MySQL允许主键长度不超过255个字符。 您可以使用以下客户端验证脚本来验证附加到文件小部件的文件名的长度。 在附加文件时运行验证。 当文件名大于150(包括扩展名)时,以下过程中提供的脚本将显示一条消息。 您可以修改脚本以检查其他字符数。
执行以下步骤以创建 客户端库 并使用脚本:
登录到CRXDE并导航到/etc/clientlibs/
创建节点类型 cq:ClientLibraryFolder 并提供节点的名称。 例如:validation
。
单击 全部保存.
右键单击节点,然后单击 创建新文件,并创建一个扩展名为.txt的文件。 例如, js.txt
将以下代码添加到新创建的.txt文件中,然后单击 全部保存.
#base=util
util.js
在上述代码中, util
是文件夹的名称,并且 util.js
中文件的名称 util
文件夹。 此 util
文件夹和 util.js
文件是在后续步骤中创建的。
右键单击 cq:ClientLibraryFolder
在步骤2中创建的节点,选择创建>创建文件夹。 创建名为的文件夹 util
. 单击 全部保存. 右键单击 util
文件夹,选择“创建”>“创建文件”。 创建名为的文件 util.js
. 单击 全部保存.
将以下代码添加到util.js文件,然后单击 全部保存. 代码验证文件名的长度。
/*
* 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);
});
}
})();
该脚本用于现成(OOTB)附件小部件组件。 如果您自定义了OOTB附件小组件,请更改上述脚本以包含相应的更改。
将以下属性添加到在步骤2中创建的文件夹,然后单击 全部保存.
名称: 类别
类型: 字符串
值: fp.validation
多选项: 已启用
导航到 /libs/fd/af/runtime/clientlibs/guideRuntime
并附加 fp.validation
值。
导航到/libs/fd/af/runtime/clientlibs/guideRuntimeWithXFA并附加 fp.validation
值到嵌入属性。
如果您使用的是自定义客户端库,而不是guideRuntime和guideRuntimeWithXfa客户端库,请使用类别名称将此过程中创建的客户端库嵌入在运行时加载的自定义库中。
单击 全部保存。 现在,当文件名大于150(包括扩展名)字符时,会显示一条消息。