您可以使用现有数据预填自适应表单的字段。 用户打开表单时,将预填这些字段的值。 要在自适应表单中预填数据,请以符合自适应表单数据结构预填格式的预填XML/JSON形式提供用户数据。
自适应表单可以混合绑定和未绑定字段。 绑定字段是从“内容查找器”选项卡中拖动的字段,在字段编辑对话框中包含非空bindRef
属性值。 未绑定字段将直接从Sidekick的组件浏览器中拖动,并且值bindRef
为空。
您可以预填自适应表单的绑定和未绑定字段。 预填数据包含afBoundData和afUnBoundData部分,用于预填自适应表单的绑定和未绑定字段。 afBoundData
部分包含绑定字段和面板的预填数据。 此数据必须与关联的表单模型模式兼容:
<?xml version="1.0" encoding="UTF-8"?>
<afData>
<afBoundData>
<employeeData>
.
</employeeData>
</afBoundData>
<afUnboundData>
<data>
<textbox>Hello World</textbox>
.
.
<numericbox>12</numericbox>
.
.
</data>
</afUnboundData>
</afData>
{
"afBoundData": {
"employeeData": { }
},
"afUnboundData": {
"data": {
"textbox": "Hello World",
"numericbox": "12"
}
}
}
对于具有相同绑定字段或未绑定字段且其名称相同的绑定字段,在XML标记或JSON对象中指定的数据将填充所有字段。 例如,表单中的两个字段将映射到预填数据中的名称textbox
。 在运行时期间,如果第一个文本框字段包含“A”,则第二个文本框中会自动填写“A”。 此链接称为自适应表单域的实时链接。
基于XFA的自适应表单的预填XML和提交的XML的结构如下:
预填XML结构:基于XFA的自适应表单的预填XML必须与XFA表单模板的数据模式兼容。要预填未绑定的字段,请将预填XML结构包含在/afData/afBoundData
标签中。
已提交的XML结构:当未使用预填充XML时,提交的XML包含包装器标签中绑定字段和未绑定字段 afData
的数据。如果使用预填XML,则提交的XML与预填XML的结构相同。 如果用afData
根标签预填XML开始,则输出XML也具有相同的格式。 如果预填充XML没有afData/afBoundData
包装器,而是直接从模式根标签(如employeeData
)中开始,则提交的XML也会使用employeeData
标签进行开始。
Prefill-Submit-Data-ContentPackage.zip
获取包
含预填数据和已提交数据的FileSample
基于XML模式的自适应表单预填XML和提交XML的结构如下:
afData
的数据。如果使用预填XML,则提交的XML与预填XML的结构相同。 如果XML开始预填afData
根标签,则输出XML的格式相同。 如果预填充XML没有afData/afBoundData
包装器,而是直接从employeeData
等模式根标签中开始,则提交的XML也会使用employeeData
标签进行开始。<?xml version="1.0" encoding="utf-8" ?>
<xs:schema targetNamespace="https://adobe.com/sample.xsd"
xmlns="https://adobe.com/sample.xsd"
xmlns:xs="https://www.w3.org/2001/XMLSchema">
<xs:element name="sample" type="SampleType"/>
<xs:complexType name="SampleType">
<xs:sequence>
<xs:element name="noOfProjectsAssigned" type="xs:string"/>
</xs:sequence>
</xs:complexType>
</xs:schema>
对于模型为XML模式的字段,数据预填到afBoundData
标签中,如以下示例XML中所示。 它可用于使用一个或多个未绑定文本字段预填自适应表单。
<?xml version="1.0" encoding="UTF-8"?><afData>
<afUnboundData>
<data>
<textbox>Ignorance is bliss :) </textbox>
</data>
</afUnboundData>
<afBoundData>
<data>
<noOfProjectsAssigned>twelve</noOfProjectsAssigned>
</data>
</afBoundData>
</afData>
建议不要在绑定面板(具有非空bindRef
的面板,该面板是通过从Sidekick或“数据源”选项卡拖动组件而创建的)中使用未绑定字段。 它可能导致这些未绑定字段的数据丢失。 此外,建议各字段的名称在表单中是唯一的,对于未绑定的字段尤为如此。
<?xml version="1.0" encoding="UTF-8"?><config>
<assignmentDetails descriptionOfAssignment="Some Science Project" durationOfAssignment="34" financeRelatedProject="1" name="Lisa" numberOfMentees="1"/>
<assignmentDetails descriptionOfAssignment="Kidding, right?" durationOfAssignment="4" financeRelatedProject="1" name="House" numberOfMentees="3"/>
</config>
对于基于JSON模式的自适应表单,预填JSON和提交JSON的结构如下所述。 有关详细信息,请参阅使用JSON模式创建自适应表单。
{
"id": "https://some.site.somewhere/entry-schema#",
"$schema": "https://json-schema.org/draft-04/schema#",
"type": "object",
"properties": {
"address": {
"type": "object",
"properties": {
"name": {
"type": "string"
},
"age": {
"type": "integer"
}}}}}
对于使用JSON模式模型的字段,数据预填入afBoundData对象,如以下示例JSON中所示。 它可用于使用一个或多个未绑定文本字段预填自适应表单。 以下是包装afData/afBoundData
的数据示例:
{
"afData": {
"afUnboundData": {
"data": { "textbox": "Ignorance is bliss :) " }
},
"afBoundData": {
"data": { {
"user": {
"address": {
"city": "Noida",
"country": "India"
}}}}}}}
下面是一个没有afData/afBoundData
包装器的示例:
{
"user": {
"address": {
"city": "Noida",
"country": "India"
}}}
建议在绑定面板中使用未绑定字段(通过从Sidekick或“数据源”选项卡拖动组件创建的具有非空bindRef的面板),因为它可能导致未绑定字段的数据丢失。建议在表单中具有唯一的字段名称,尤其是对于未绑定的字段。
对于没有表单模型的自适应表单,所有字段的数据位于<afUnboundData> tag
的<data>
标记下。
还注意到:
为各个字段提交的用户数据的XML标签使用字段的名称生成。 因此,字段名称必须是唯一的。
<?xml version="1.0" encoding="UTF-8"?><afData>
<afUnboundData>
<data>
<radiobutton>2</radiobutton>
<repeatable_panel_no_form_model>
<numericbox>12</numericbox>
</repeatable_panel_no_form_model>
<repeatable_panel_no_form_model>
<numericbox>21</numericbox>
</repeatable_panel_no_form_model>
<checkbox>2</checkbox>
<textbox>Nopes</textbox>
</data>
</afUnboundData>
<afBoundData/>
</afData>
要启用预填服务,请在AEM Web控制台配置中指定默认预填服务配置。 使用以下步骤配置预填服务:
“预填服务配置”适用于自适应表单、HTML5表单和HTML5表单集。
使用以下URL打开Adobe Experience Manager Web控制台配置:
https://<server>:<port>/system/console/configMgr
搜索并打开默认预填服务配置。
输入数据文件位置的数据位置或正则表达式(常规表达式)。 有效数据文件位置的示例包括:
默认情况下,允许通过crx文件预填所有类型的自适应Forms(XSD、XDP、JSON、FDM,且不基于表单模型)。 只允许对JSON和XML文件使用预填。
现在已为表单配置预填服务。
crx协议负责预填数据的安全,因此默认情况下允许使用。 使用通用正则表达式通过其他协议预填充可能会导致漏洞。 在配置中,指定用于保护数据的安全URL配置。
通常,绑定(表单模式)和未绑定字段在同一自适应表单中创作,但以下是一些例外,以防绑定可重复:
根据经验法则,如果绑定和未绑定字段与最终用户在未绑定字段中填写的数据交叉,则不要混合这些字段。 如果可能,您应修改模式或XFA表单模板并为未绑定字段添加一个条目,以便它也会被绑定,并且其数据与已提交数据中的其他字段一样可用。
在配置了有效正则表达式时,可以通过以下协议以预填数据格式预填自适应表单:
https://localhost:4502/content/forms/af/xml.html?wcmmode=disabled&dataRef=crx:///tmp/fd/af/myassets/sample.xml
指定的节点必须具有名为jcr:data
的属性并保存数据。
https://localhost:4502/content/forms/af/someAF.html?wcmmode=disabled&dataRef=file:///C:/Users/form-user/Downloads/somesamplexml.xml
引用的文件必须位于同一台服务器上。
https://localhost:4502/content/forms/af/xml.html?wcmmode=disabled&dataRef=https://localhost:8000/somesamplexmlfile.xml
https://localhost:4502/content/forms/af/abc.html?wcmmode=disabled&dataRef=service://[SERVICE_NAME]/[IDENTIFIER]
不支持传递身份验证参数。
您还可以在slingRequest
中设置data
属性,其中data
属性是包含XML或JSON的字符串,如以下示例代码(示例为XML)所示:
<%
String dataXML="<afData>" +
"<afUnboundData>" +
"<data>" +
"<first_name>"+ "Tyler" + "</first_name>" +
"<last_name>"+ "Durden " + "</last_name>" +
"<gender>"+ "Male" + "</gender>" +
"<location>"+ "Texas" + "</location>" +
"</data>" +
"</afUnboundData>" +
"</afData>";
slingRequest.setAttribute("data", dataXML);
%>
您可以编写一个包含所有数据的简单XML或JSON字符串,并在slingRequest中设置它。 您可以在呈示器JSP中为任何组件轻松完成此操作,您要在其中设置slingRequest数据属性的页面中包含这些组件。
例如,您希望页面具有特定类型标题的特定设计的位置。 为此,您可以编写自己的header.jsp
,并将其包含在页面组件中并设置data
属性。
另一个好示例是您希望通过Facebook、Twitter或LinkedIn等社交帐户在登录时预填数据的用例。 在这种情况下,您可以在header.jsp
中包含一个简单的JSP,它从用户帐户中获取数据并设置数据参数。
prefill-page component.zip
在页
面组件中获取FileSample prefill.jsp
您可以在场景中使用自定义预填服务,在场景中,您经常从预定义的源读取数据。 预填服务从定义的数据源读取数据,并用预填数据文件的内容预填自适应表单的字段。 它还可以帮助您将预填数据与自适应表单永久关联。
预填服务是OSGi服务,通过OSGi捆绑包进行打包。 您创建OSGi捆绑包,上传它并将其安装到AEM Forms捆绑包。 在开始创建捆绑包之前:
下载样板程序包
将数据(预填数据)文件放在crx-repository中。 可以将文件放置在crx-repository的\contents文件夹中的任意位置。
样板文件包(示例预填充服务包)包含AEM Forms预填充服务的示例实现。 在代码编辑器中打开样板文件包。 例如,在Eclipse中打开样板项目进行编辑。 在代码编辑器中打开样板包后,请执行以下步骤以创建服务。
打开src\main\java\com\adobe\test\Prefill.java文件进行编辑。
在代码中,设置以下值:
nodePath:
指向crx-repository位置的节点路径变量包含数据(预填)文件的路径。例如,/content/prefilldata.xmllabel:
label参数指定服务的显示名称。例如,默认预填服务保存并关闭Prefill.java
文件。
将AEM Forms Client SDK
包添加到样板项目的构建路径中。
编译项目并为包创建.jar。
要开始预填服务,请将JAR文件上载到AEM Forms Web Console,然后激活该服务。 现在,在自适应表单编辑器中显示的服务开始。 要将预填服务与自适应表单关联,请执行以下操作:
在您预填自适应表单时,AEM Forms服务器会将数据与自适应表单合并,并将填写的表单发送给您。 默认情况下,数据合并操作在服务器上进行。
您可以配置AEM Forms服务器以在客户端而不是服务器上执行数据合并操作。 它显着缩短了预填和渲染自适应表单所需的时间。 默认情况下,该功能处于禁用状态。 您可以从Configuration Manager或命令行中启用它。
要启用,请运行以下cURL命令:
curl -u admin:admin -X POST -d apply=true \ -d propertylist=af.clientside.datamerge.enabled \ -d af.clientside.datamerge.enabled=true \ http://${crx.host}:${crx.port}/system/console/configMgr/Adaptive%20Form%20and%20Interactive%20Communication%20Web%20Channel%20Configuration
要禁用,请运行以下cURL命令:
curl -u admin:admin -X POST -d apply=true \ -d propertylist=af.clientside.datamerge.enabled \ -d af.clientside.datamerge.enabled=false \ http://${crx.host}:${crx.port}/system/console/configMgr/Adaptive%20Form%20and%20Interactive%20Communication%20Web%20Channel%20Configuration
要充分利用客户端上的预填充数据,请更新预填充服务以返回FileAttachmentMap和CustomContext