Adobe Experience Manager(AEM)表单可以帮助您将复杂的交易转变为简单、愉悦的数字体验。 但是,它需要协调一致地努力来实施、建立、执行和维护一个高效和富有成效的AEM Forms生态系统。
本文档提供了管理员、作者和开发人员在与AEM Forms协作时可从中受益的准则和建议,尤其是自适应表单组件。 它讨论了从设置表单开发项目到配置、自定义、创作和优化AEM Forms的最佳实践。 这些最佳做法共同有助于AEM Forms生态系统的整体绩效。
此外,以下是一般AEM最佳实践的推荐读法:
简化和标准化的项目结构可以显着减少开发和维护工作。 Apache Maven是建立AEM项目时推荐的开放源码工具。
使用Apache Maven aem-project-archetype
为AEM项目创建和管理结构。 它为AEM项目创建推荐的结构和模板。 此外,它还提供构建自动化和更改控制系统以帮助管理项目。
archetype:generate
命令生成初始结构。eclipse:eclipse
命令生成eclipse项目文件并将项目导入eclipse。有关详细信息,请参阅如何使用Apache Maven构建AEM项目。
FileVault工具或VLT可帮助您将CRX或AEM实例的内容映射到文件系统。 它提供变更控制管理操作,如AEM项目内容的登记和注销。 请参阅如何使用VLT工具。
如果您使用Eclipse集成开发环境,则可以使用AEM开发人员工具将Eclipse IDE与AEM实例无缝集成以创建AEM应用程序。 有关详细信息,请参阅用于Eclipse的AEM开发人员工具。
设置AEM项目后,请定义用于创作和自定义自适应表单模板和组件的策略。
自适应表单模板是一个专门的AEM页面,它定义自适应表单的结构和页眉和页脚信息。 模板具有预配置的自适应表单布局、样式和基本结构。 AEM Forms提供现成的模板和组件,您可以使用这些模板和组件创作自适应表单。 但是,您可以根据需要创建自定义模板和组件。 建议收集您在自适应表单中需要的其他模板和组件的要求。 有关详细信息,请参阅自定义自适应表单和组件。
AEM Forms允许您根据以下表单模型创建自适应表单。 表单模型充当表单与AEM系统之间数据交换的接口,并为自适应表单内外的数据流提供基于XML的结构。 此外,表单模型以模式和XFA约束的形式对自适应表单施加规则和约束。
请务必仔细选择不仅符合您的要求,而且扩展您在XFA和XSD资产中的现有投资(如果有)的数据模型。 建议使用XSD模型创建表单模板,因为生成的XML包含由模式定义的XPATH的数据。 使用XSD模型作为表单数据模型的默认选择也有帮助,因为它将表单设计从后端系统分离出来,后端系统处理和消耗数据,并且由于表单字段的一到一映射,它改善了表单的性能。 此外,字段的BindRef可以作为XML中其数据值的XPATH。
有关详细信息,请参阅创建自适应表单。
AEM Forms提供现成的自适应表单模板,您可以使用这些模板创建自适应表单。 您还可以创建自己的模板。 AEM提供静态和可编辑模板。
要设置特定字段或面板实例的样式,请使用内联样式。 或者,您可以在CSS文件中定义类,并在组件的CSS类属性中指定类名。
在组件中包含一个客户端库,以便跨使用该组件的自适应表单或片段一致地应用样式。 有关详细信息,请参阅创建自适应表单页面组件。
通过在自适应表单容器属性的CSS文件路径字段中指定到客户端库的路径,应用在客户端库中定义的样式来选择自适应表单。
要创建样式的客户端库,可在“主题编辑器”基clientlib或“表单容器”属性中配置自定义CSS文件。
自适应表单提供面板布局,如响应式、选项卡式、折叠式和向导,以控制表单组件在面板中的布局方式。 您可以创建自定义面板布局并使它们可供表单作者使用。 有关详细信息,请参阅为自适应表单创建自定义布局组件。
您还可以自定义特定的自适应表单组件,如字段和面板布局。
有关处理PII数据的建议,请参阅处理个人可识别信息。
使用提要栏中的对象浏览器快速访问表单层次结构中的深层字段。 您可以使用搜索框在表单或对象树中搜索对象,以便从一个对象导航到另一个对象。
要在提要栏中的组件浏览器中视图和编辑组件的属性,请选择该组件,然后单击。 您还可以多次单击组件,在属性浏览器中视图其属性。
使用键盘快捷键对表单执行快速操作。 请参阅AEM Forms键盘快捷键。
建议仅在自适应表单页面中使用自适应表单组件。 这些组件对其父层次结构具有依赖关系。 因此,请勿在AEM页面中使用它们。
另请参阅创作自适应表单的简介中的组件说明和最佳实践。
AEM Forms提供了一个规则编辑器,它允许您创建规则,将动态行为添加到自适应表单组件。 使用这些规则,您可以评估条件并触发对组件的操作,如显示或隐藏字段、计算值、动态更改下拉列表等。
规则编辑器提供了用于编写规则的可视编辑器和代码编辑器。 使用代码编辑器模式编写规则时,请考虑以下事项:
为表单字段和组件使用有意义的唯一名称,以避免在编写规则时出现任何可能的冲突。
对组件使用this
运算符可在规则表达式中引用它自己。 它确保即使组件名称发生更改,规则仍然有效。 例如,field1.valueCommit script: this.value > 10
。
引用其他表单组件时使用组件名称。 使用value
属性获取字段或组件的值。 例如,field1.value
。
按相对唯一层次结构引用组件以避免任何冲突。 例如,parentName.fieldName
。
处理复杂或常用的规则时,请考虑将业务逻辑编写为单独的客户端库中的函数,您可以在自适应表单中指定和重用这些函数。 客户端库应为自包含库,除jQuery和Downloader.js外,不应具有任何外部依赖关系。 您还可以使用客户端库强制对提交的表单数据执行服务器端重新验证。
自适应表单提供一组API,您可以使用这些API与自适应表单通信并对其执行操作。 一些关键API如下。 有关详细信息,请参阅适用于Adaptive Forms的JavaScript库API参考。
guideBridge.reset()
:重置表单。
guideBridge.submit()
:提交表单。
guideBridge.setFocus(somExp, focusOption, runCompletionExp)
:将焦点设置到字段。
guideBridge.validate(errorList, somExpression, focus)
:验证表单。
guideBridge.getDataXML(options)
:将表单数据获取为XML。
guideBridge.resolveNode(somExpression)
:获取表单对象。
guideBridge.setProperty(somList, propertyName, valueList)
:设置表单对象的属性。
此外,您还可以使用以下字段属性:
field.value
更改字段的值。ield.enabled
启用/禁用字段。field.visible
更改字段的可见性。自适应表单作者可能需要编写JavaScript代码才能在表单中构建业务逻辑。 虽然JavaScript功能强大且有效,但它可能会在安全预期上做出妥协。 因此,您必须确保表单作者是可信任的角色,在将表单投入生产之前,需要审核和批准JavaScript代码。 管理员可以根据用户组的角色或功能限制对规则编辑器的访问权限。 请参阅授予规则编辑器对选择用户组的访问权限。
您可以在规则中使用表达式来使自适应表单变为动态表单。 所有表达式都是有效的JavaScript表达式,并使用自适应表单脚本模型API。 这些表达式返回某些类型的值。 有关表达式及其最佳实践的详细信息,请参阅自适应表单表达式。
主题自适应功能允许您创建可跨表单应用的可重用样式,以实现一致的外观和样式。 建议使用主题定义表单组件和面板的样式。 围绕主题的一些最佳实践如下:
有关详细信息,请参阅主题。
表单作者和最终用户通常在创作模式下或运行时加载大型表单时会遇到性能问题。 随着表单中对象(字段和面板)数量的增加,创作和运行时体验开始会降低。 它还可防止多个作者同时协作和创作表单。
请考虑以下最佳实践,以克服大型表单的性能问题:
建议使用XSD表单数据模型创建自适应表单,即使将XFA转换为自适应表单(如果可能)也是如此。
在自适应表单中仅包括那些从用户处捕获信息的字段和面板。 请考虑将静态内容保持为最小值,或使用URL在单独的窗口中打开它们。
虽然每个表单都是为特定目的而设计的,但大多数表单中有一些常见的细分。 例如,个人详细信息、地址、雇佣详细信息等。 为常见表单元素和章节创建自适应表单片段并在表单之间使用它们。 您还可以将现有表单中的面板另存为片段。 片段中的任何更改都会反映在所有关联的自适应表单中。 它促进协作创作,因为多个作者可以同时处理组成表单的不同片段。
使用“保存并恢复并自动保存”定期保存自适应表单,并允许用户以后重新访问以完成表单。
配置片段以延迟加载。 在运行时,标记为延迟加载的片段仅在需要时才呈现。 它显着缩短了大型表单的加载时间。 在具有可重复面板的片段中也支持此功能。 有关详细信息,请参阅配置延迟加载。
您可以使用从后端获取的数据预填自适应表单字段,帮助用户快速填写表单并避免键入错误。
AEM Forms提供预填服务,从预定义的数据XML文件读取数据,并使用预填XML文件中的内容预填自适应表单的字段。
预填数据XML必须与与自适应表单关联的表单模型的模式兼容。
在预填XML中包括afBoundedData
和afUnBoundedData
部分,以在自适应表单中预填绑定字段和未绑定字段。
对于基于表单数据模型的自适应表单,AEM Forms提供现成的表单数据模型预填服务。 预填服务查询自适应表单中数据模型对象的数据源,并在呈现表单时预填字段值。
您还可以使用文件、crx、服务或http协议预填自适应表单。
AEM Forms支持自定义预填服务,您可以将其作为OSGi服务插入以预填自适应表单。
有关详细信息,请参阅预填自适应表单字段。
自适应表单需要提交操作才能处理用户指定的数据。 “提交”操作决定对您使用自适应表单提交的数据执行的任务。
您可以采用自适应表单来利用Adobe Sign的多签名体验。 在自适应表单中配置Adobe Sign时,请考虑以下事项。 有关详细信息,请参阅以自适应形式使用Adobe Sign。
记录文档(DoR)是自适应表单的拼合PDF版本,您可以打印、签署或存档。
根据自适应表单所基于的表单数据模型,您可以按如下方式为DoR配置模板:
直接从自适应表单编辑器的“记录”选项卡的“文档”中配置页眉、页脚、图像、颜色、字体等。
使用DoRService
以编程方式生成DoR。
从DoR中排除隐藏字段。
使用afAcceptLang
请求参数在其他区域设置中视图DoR。
AEM Chrome插件是 Google Chrome的浏览器扩展,提供调试自适应表单的工具。表单作者和开发人员可以使用这些工具:
有关详细信息,请参阅AEM Chrome插件——自适应表单。
Calvin SDK是供自适应Forms开发人员测试自适应Forms的实用程序API. Calvin SDK构建于Hobbes.js测试框架之上。 您可以使用框架测试以下内容:
有关详细信息,请参阅自动测试自适应表单。
需要进行服务器端验证,以防止任何尝试绕过客户端上的验证,以及任何可能危及数据提交和业务规则违规的行为。 通过加载所需的客户端库,在服务器上执行服务器端验证。
AEM提供翻译工作流,您可以使用它来本地化自适应表单。 有关信息,请参阅使用AEM转换工作流本地化自适应表单。
本地化自适应表单时的一些最佳实践如下:
将自适应表单片段用于表单中的常见元素,并本地化片段。 它确保您对片段进行一次本地化,它反映在使用本地化片段的所有表单中。
任何修改(如添加新组件或在本地化表单中应用脚本)不会自动本地化。 因此,您必须在将表单本地化之前完成表单的定版,以避免多个本地化周期。
使用afAcceptLang
请求参数覆盖浏览器区域设置并在指定区域设置中呈现表单。 例如,以下URL将强制以日语区域设置呈现表单,而不管在浏览器设置中指定的区域设置如何:
https://[*server*]:[*port*]/<*contextPath*>/<*formFolder*>/<*formName*>.html?wcmmode=disabled&afAcceptLang=ja
AEM Forms目前支持本地化适应表单内容,语言版本有英语(en)、西班牙语(es)、法语(fr)、意大利语(it)、德语(de)、日语(ja)、巴西葡萄牙语(pt-BR)、中文(zh-CN)、中国台湾(zh-TW)和韩语(ko-KR)。 但是,您可以在运行时为自适应表单添加新区域设置支持。 有关详细信息,请参阅支持自适应表单的新语言环境本地化。
您可以配置位于安全区域中防火墙后的AEM Forms服务器的其他实例。 您可以将此实例用于:
您通常需要将AEM项目从一个环境移到另一个。 移动时要记住的一些关键事项如下:
配置AEM以改进总体性能的一些最佳实践如下:
从Felix控制台启用JavaScript和CSS的HTML客户端库压缩。 请参见Clientlibs,如示例说明。
将所有客户端库缓存在/etc.clientlibs/fd
和AEM dispatcher上的任何其他自定义客户端库,以提高已发布表单的响应性和安全性。 有关详细信息,请参阅 Dispatcher。
不缓存/content/forms/af/
和/content/dam/formsanddocuments/*
路径。 有关配置自适应表单缓存的详细信息,请参阅缓存自适应表单。
通过Web服务器压缩模块启用HTML。 有关详细信息,请参阅AEM Forms服务器的性能调整。
增加大型表单的每个请求配置调用数。 请参阅优化大型和复杂表单的性能。
创建由错误处理程序](https://helpx.adobe.com/experience-manager/6-2/sites-developing/customizing-errorhandler-pages.html)显示的[自定义错误页。
保护AEM Forms服务器。
nosamplecontent
运行模式确保生产服务器上没有部署示例内容和示例用户。 请参阅在生产就绪模式下运行AEM。将堆大小保持为最小8 GB。 有关其他设置,请参阅AEM Forms服务器的性能调整。
使用服务用户会话而不是管理员会话来执行服务级别任务。 有关详细信息,请参阅服务身份验证。
在生产环境中,建议不要将提交的表单数据存储在AEM存储库中。 Forms门户商店、商店内容和商店PDF提交操作的默认实施将表单数据存储在AEM存储库中。 这些提交操作仅用于演示目的。 此外,默认情况下,“保存并恢复”和“自动保存”功能使用门户存储。 因此,请考虑以下建议:
存储草稿数据:如果您使用自适应表单的“草稿”功能,则应实现自定义服务提供接口(SPI),以将草稿存储存储在更安全的环境中,如数据库。有关详细信息,请参阅将草稿和提交组件与数据库集成的示例。
存储提交数据:如果您使用表单门户提交存储,则应实现自定义SPI以将提交数据存储在数据库中。有关示例集成,请参阅将草稿和提交组件与数据库集成的示例。
您还可以编写自定义提交操作,在安全存储中存储表单数据和附件。 有关详细信息,请参阅编写自适应表单的自定义提交操作。
组织面临的一个主要挑战是如何处理个人身份识别(PII)数据。 帮助您处理此类数据的一些最佳实践如下: