客户通常需要提交多个表单才能申请服务或优惠。 包括寻找所有相关的形式,并单独填写、提交和跟踪这些内容。 此外,还需要在表单中多次填写常见详细信息。 如果整个过程涉及大量表单,则会变得繁琐且容易出错。 AEM Forms的表单集功能有助于简化此类场景中的用户体验。
表单集是一组HTML5表单,这些表单分组在一起,并作为一组表单提供给最终用户。 当最终用户开始填写表单集时,他们将从一个表单无缝地转换为另一个表单。 最后,只需单击一下即可提交所有表单。
AEM Forms为表单作者提供了一个直观的用户界面,用于创建、配置和管理表单集。 作为作者,您可以按您希望最终用户关注的特定顺序对表单进行订购。 此外,您可以对单个表单应用条件或资格表达式,以根据用户输入控制其可见性。 例如,您可以将配偶详细信息表单配置为仅在婚姻状态指定为“已婚”时显示。
此外,您还可以配置不同表单中的公用字段以共享公用数据绑定。 在适当的数据绑定到位后,最终用户只需填写在后续表单中自动填写的公共信息。
AEM Forms应用程序还支持表单集,让您的现场员工脱机创建表单集、访问客户、输入数据,并稍后与AEM Forms服务器同步,以便将表单数据提交到业务流程。
您可以将使用设计器创建的多个XDP或表单模板关联到一个表单集中。 然后,可以根据用户在初始表单中输入的值及其用户档案,使用表单集来选择性地呈现XDP。
使用AEM Forms用户界面管理所有表单、表单集和相关资产。
要创建表单集,请执行以下操作:
选择“Forms”>“Forms”和“文档”。
选择“创建”>“表单集”。
在添加属性页面中,添加以下详细信息,然后单击下一步。
“选择表单”屏幕显示可用的XDP表单或XDP文件。 搜索并选择要包含在表单集中的表单,然后单击“添加到表单集”。 如有必要,请再次搜索要添加的表单。 将所有表单添加到表单集后,单击“下一步”。
确保XDP表单中的字段名称不包含点字符。 否则,任何尝试解析具有点字符的字段的脚本都无法解析它们。
在“配置表单”页中,您可以执行以下操作:
fs.valueOf(<form Identifier="">, <fieldsom expression="">> <value>
例如,如果表单集中有两个表单:商务费用和差旅费用,您可以在“资格表达式”字段中为这两个表单添加一个JavaScript代码片段,以检查用户在表单中输入的费用类型。 如果用户选择“业务费用”,则“业务费用”表单将呈现给最终用户。 或者,如果用户选择旅行费用,则向最终用户呈现不同的表单。 有关详细信息,请参阅资格表达式。
此外,作者还可以选择使用每行右角的删除图标从表单集中删除表单,或使用工具栏中的“+”图标添加另一组表单。 此“+”图标将用户引回到向导中的上一步,该步骤用于“选择表单”。 将保留现有选择,并且必须使用该页面上的“添加到表单集”图标将所做的任何其他选择添加到表单集。
表单集中使用的所有表单都由AEM Forms用户界面管理。
创建表单集后,您可以对该表单集执行以下操作:
要编辑表单集,请执行以下操作:
选择“Forms”>“Forms”和“文档”。
找到要编辑的表单集。 将鼠标悬停在它上方,然后选择“编辑”()。
在“配置表单”页中,您可以编辑以下内容:
您还可以单击相关的删除图标,从表单集中删除表单。
在使用AEM Forms管理用户界面创建表单集后,您可以在开始点中使用表单集,或使用工作台分配任务活动。
设计流程时,在“分配任务/开始点”的“演示和数据”部分下,选择使用CRX资产。 出现CRX资产浏览器。
选择表单集以过滤AEM存储库(CRX)中的表单集。
选择一个表单集,然后单击“确定”。
表单集中的资格表达式用于定义和动态控制显示给用户的表单。 例如,仅当用户属于特定年龄组时,才显示特定表单。 使用表单管理器指定和编辑资格表达式。
资格表达式可以是任何返回布尔值的有效JavaScript语句。 JavaScript代码片断中的最后一条语句被视为布尔值,该布尔值根据JavaScript代码片断的其余部分(前几行)的处理确定表单的资格。 如果表达式的值为true,则表单有资格显示给用户。 此类表单称为合格表单。
不执行表单集中第一个表单的资格表达式。 无论第一个表单的资格表达式如何,始终显示该表单。
除了标准JavaScript函数外,表单集还公开fs.valueOf API,它提供对表单集中表单字段值的访问。 使用此API访问表单集中表单字段的值。 API语法为fs.valueOf(formUid, fieldSOM),其中:
formUid和fieldSOM参数都必须是字符串文本。
API的有效使用:
fs.valueOf("form1", "xfa.form.form1.subform1.field1")
API的使用无效:
var formUid = "form1";
var fieldSOM = “xfa.form.form1.subform1.field1"; fs.valueOf(formUid, fieldSOM);
表单集是多个HTML5表单的集合,这些表单具有通用或不同的模式。 表单集支持使用XML文件预填表单字段。 您可以将XML文件与表单集关联,这样当您在表单集中打开表单时,表单中的一些字段将被预置。
预填XML文件使用表单集URL的dataRef参数指定。 dataRef参数指定与表单集合并的数据XML文件的绝对路径。
例如,表单集中有三个表单(form1、form2和form3),其结构如下:
form1
字段
form1field
form2
字段
form2field
form3
字段
form3field
每个表单都有一个公用的命名字段,名为“field”,一个唯一命名的字段,名为“form<i>field”。
您可以使用具有以下结构的XML预填此表单集:
<?xml version="1.0" encoding="UTF-8" ?>
<formSetRootTag>
<field>common field value</field>
<form1field>value1</form1field>
<form2field>value2</form2field>
<form3field>value3</form3field>
</formSetRootTag>
XML根标记可以具有任何名称,但与字段对应的元素标记必须与字段同名。 XML的层次结构必须模仿表单的层次结构,这意味着XML必须具有用于封装子表单的相应标记。
上面的XML代码片断显示,表单集的预填XML是单个表单的预填XML代码片段的合并。 如果不同表单中的某些字段具有彼此相似的数据层次结构/模式,则这些字段会预填相同的值。 在此示例中,所有三个表单都预填充了公用字段“field”的相同值。 这是一种将数据从一种形式转发到另一种形式的简单方法。 这也可以通过将字段绑定到同一模式或数据引用来实现。 如果要根据表单的模式来隔离表单集数据。 在创建表单集时,可以通过指定表单的“数据根”属性(默认值为“/”,它映射到表单集根标记)来实现此目的。
在上一个示例中,如果指定数据根:“/form1”、“/form2”和“/form3”分别用于这三个表单,您需要使用以下结构的预填XML:
<?xml version="1.0" encoding="UTF-8" ?>
<formSetRootTag>
<form1>
<field>field value1</field>
<form1field>value1</form1field>
</form1>
<form2>
<field>field value2</field>
<form2field>value2</form2field>
</form2>
<form3>
<field>field value3</field>
<form3field>value3</form3field>
</form3>
</formSetRootTag>
在表单集中,XML使用以下语法定义了XML模式:
<formset>
<fs_data>
<xdp:xdp xmlns:xdp="https://ns.adobe.com/xdp/">
<xfa:datasets xmlns:xfa="https://www.xfa.org/schema/xfa-data/1.0/">
<xfa:data>
<rootElement>
... data ....
</rootElement>
</xfa:data>
</xfa:datasets>
</xdp:xdp>
</fs_data>
<fs_draft>
... private data...
</fs_draft>
</formset>
如果存在两个具有重叠数据根的表单,或者一个表单的元素层次结构与另一个表单的数据根层次结构重叠,则在预填充xml中,将合并重叠元素的值。 提交XML的结构与预填XML类似,但提交XML有更多包装标签,并在结尾处附加一些表单集上下文数据标签。
用于创建预填充XML文件的语法规则:
parent elements:
null
cardinality: [0,1]
submitXML: P
prefillXML: O
children: fs_data
表单集XML的根元素。 建议不要将此单词用作表单集中任何表单的rootSubform的名称。
parent elements:
formset
基数:[1]
submitXML:P
prefillXML:O
children: xdp:xdp/rootElement
子树指示表单集中表单的数据。 仅当表单集元素不存在时,该元素在预填XML中是可选的
parent elements: fs_data/null
cardinality: [0,1]
submitXML: O
prefillXML: O
children: xfa:datasets
此标签指示HTML5表单XML的开始。 如果提交XML中存在预填XML或没有预填XML,则会在该XML中添加它。 可从预填XML中删除此标签。
parent elements: xdp:xdp
cardinality: [1]
submitXML: O
prefillXML: O
children: xfa:data
parent elements: xfa:datasets
cardinality: [1]
submitXML: O
prefillXML: O
children: rootElement
parent elements: xfa:datasets/fs_data/null
cardinality: [0,1]
submitXML: P
prefillXML: O
children: controlled by the Forms in Form set
名称rootElement只是占位符。 实际名称是从表单集中使用的表单中选取的。 开始了rootElement的子树包含表单集中Forms内的字段和子表单的数据。 有多种因素决定rootElement及其子元素的结构。
在预填XML中,此标记是可选的,但如果缺少,则忽略整个XML。
根元素标记的名称
如果预填充XML中有根元素,则该元素的名称也会在提交XML中使用。 如果没有预填充xml,则rootElement的名称是表单集中第一个表单的根子表单的名称,该表单集中的dataRoot属性设置为“/”。 如果没有这样的形式,则rootElement名称为fs_dummy_root,它是保留关键字。
AEM Forms应用允许现场工作人员将他们的移动设备与AEM Forms服务器同步并在任务上工作。 即使设备处于脱机状态,应用程序也会通过在设备上本地保存数据而正常工作。 使用照片等注释功能,现场工作人员可以提供准确的信息以集成到业务流程中。
有关AEM Forms应用程序的详细信息,请参阅AEM Forms应用程序。
表单集中不完全支持以下数据模式:
表单集中不完全支持模式 | 示例 |
输入大小和图案大小不匹配 | 当pattern= num{z,zzz}时 输入= 12,345或 1,23 |
带括号"(" ")"的图片子句模式 | num{(zz,zzz)} |
多种数据模式 | num{zz,zzzz} | num{z,zzz,zzzz} |
速记模式 | num.integer{}, num.decimal{}, num.%{}或 num.currency{} |