表单数据模型编辑器提供了直观的用户界面和工具,用于编辑和配置表单数据模型。 使用编辑器,您可以在表单数据模型中添加和配置来自关联数据源的数据模型对象、属性和服务。 此外,它还允许您创建数据模型对象和属性,而不使用数据源,并在以后将它们与相应的数据模型对象和属性绑定。 您还可以为数据模型对象属性生成和编辑示例数据,在预览时,可以使用这些属性预填充自适应表单和交互式通信。 您可以测试在表单数据模型中配置的数据模型对象和服务,以确保它与数据源正确集成。
如果您是Forms数据集成的新用户,并且尚未配置数据源或创建表单数据模型,请参阅以下主题:
有关可以使用表单数据模型编辑器执行的各种任务和配置的详细信息,请阅读。
您必须是fdm-author和forms-user组的成员,才能创建和使用表单数据模型。 请联系您的AEM管理员以成为组的成员。
如果您使用数据源创建表单数据模型,则可以使用表单数据模型编辑器添加数据模型对象和服务,配置其属性,在数据模型对象之间构建关联,以及测试表单数据模型和服务。
您可以在表单数据模型中添加来自可用数据源的数据模型对象和服务。 添加的数据模型对象显示在“模型”选项卡中,添加的服务则显示在“服务”选项卡中。
要添加数据模型对象和服务,请执行以下操作:
登录AEM创作实例,导航到Forms >数据集成,然后打开要在其中添加数据模型对象的表单数据模型。
在“数据源”窗格中,展开数据源以查看可用的数据模型对象和服务。
选择要添加到表单数据模型的数据模型对象和服务,然后点按添加选定项。
所选数据模型对象和服务
“模型”(Model)选项卡显示所有数据模型对象及其添加到表单数据模型的属性的图形表示。 每个数据模型对象由表单数据模型中的一个框表示。
“模型”选项卡显示添加的数据模型对象
您可以按住并拖动数据模型对象框,以在内容区域中对其进行组织。 在表单数据模型中添加的所有数据模型对象在“数据源”窗格中都呈灰显状态。
“服务”选项卡列出了添加的服务。
“服务”选项卡显示数据模型服务
除了数据模型对象和服务之外,OData服务元数据文档还包括定义两个数据模型对象之间关联的导航属性。 有关更多信息,请参阅使用OData服务的导航属性。
点按Save以保存表单模型对象。
您可以使用自适应表单规则调用在表单数据模型的“服务”选项卡中配置的服务。 已配置的服务可在规则编辑器的Invoke services操作中使用。有关在自适应表单规则中使用这些服务的详细信息,请参阅在规则编辑器中调用服务和设置规则值。
虽然可以从配置的数据源添加数据模型对象,但也可以创建没有数据源的数据模型对象或实体。 当您未在表单数据模型中配置数据源时,此功能会特别有用。
要创建不含数据源的数据模型对象,请执行以下操作:
登录AEM创作实例,导航到Forms >数据集成,然后打开要在其中创建数据模型对象或实体的表单数据模型。
点按创建实体。
在创建数据模型对话框中,指定数据模型对象的名称,然后点按添加。 数据模型对象被添加到表单数据模型中。 请注意,新添加的数据模型对象未绑定到数据源,并且没有如下图所示的任何属性。
接下来,可以在未绑定数据模型对象中添加子属性。
表单数据模型编辑器允许您在数据模型对象中创建子属性。 创建时的资产不会绑定到数据源中的任何资产。 您稍后可以将子属性与包含数据模型对象中的其他属性绑定。
要创建子属性,请执行以下操作:
在表单数据模型中,选择数据模型对象,然后点按创建子属性。
在创建子属性对话框中,分别在名称和类型字段中为属性指定名称和数据类型。 您可以选择为属性指定标题和描述。
如果属性是计算属性,则启用计算。 计算属性的值基于规则或表达式。 有关更多信息,请参阅编辑属性。
如果数据模型对象绑定到数据源,则添加的子属性将自动绑定到具有相同名称和数据类型的父数据模型对象的属性。
要使用数据模型对象属性手动绑定子属性,请点按Bind Reference字段旁边的浏览图标。 选择对象对话框列出父数据模型对象中的所有属性。 选择要与绑定的属性,然后点按勾号图标。 请注意,您只能选择与子属性具有相同数据类型的属性。
点按Done以保存子属性,然后点按Save以保存表单数据模型。 子属性现已添加到数据模型对象。
创建数据模型对象和属性后,可以继续根据表单数据模型创建自适应表单和交互式通信。 之后,当您配置了可用的数据源后,您便可以将表单数据模型与数据源绑定。 绑定将在关联的自适应表单和交互式通信中自动更新。 有关使用表单数据模型创建自适应表单和交互式通信的更多信息,请参阅使用表单数据模型。
当要与表单数据模型集成的数据源可用时,可以按照更新数据源中所述,将其添加到表单数据模型。 然后,执行以下操作以绑定未绑定的数据模型对象和属性:
在表单数据模型中,选择要与数据源绑定的未绑定数据源。
点按编辑属性。
在编辑属性窗格中,点按绑定字段旁边的浏览图标。 此时将打开选择对象对话框,其中列出了表单数据模型中添加的数据源。
展开数据源树并选择要与其绑定的数据模型对象,然后点按勾号图标。
点按完成以保存属性,然后点按保存以保存表单数据模型。 数据模型对象现在与数据源绑定。 请注意,数据模型对象不再标记为未绑定。
要读取和写入数据模型对象的数据,请执行以下操作以配置读取和写入服务:
选中数据模型对象顶部的复选框以将其选中,然后点按编辑属性。
编辑属性以配置数据模型对象的读取和写入服务
此时将打开编辑属性对话框。
编辑属性对话框
除了数据模型对象和服务之外,OData服务元数据文档还包括定义两个数据模型对象之间关联的导航属性。 向表单数据模型添加OData服务数据源时,表单数据模型中有一项服务可用于数据模型对象中的所有导航属性。 您可以使用此服务读取相应数据模型对象的导航属性。
有关使用服务的更多信息,请参阅使用OData服务的导航属性。
切换顶级对象以指定数据模型对象是否为顶级模型对象。
在表单数据模型中配置的数据模型对象可用于基于表单数据模型的自适应表单内容浏览器的“数据模型对象”选项卡中。 在两个数据模型对象之间添加关联时,与之关联的数据模型对象将嵌套在“数据模型对象”(Data Model Objects)选项卡中与之关联的数据模型对象下。 如果嵌套数据模型是顶级对象,则它也将单独显示在“数据模型对象”(Data Model Objects)选项卡中。 因此,您将看到其两个条目,一个位于嵌套层次结构内部,另一个位于嵌套层次结构外部,这可能会令表单作者感到困惑。 要使关联的数据模型对象仅显示在嵌套层次结构中,请禁用顶级对象属性。
为选定的数据模型对象选择读取和写入服务。 将显示服务的参数。
为员工数据源配置的读写服务
点按 ,将读取服务参数绑定到用户配置文件属性、请求属性或文字值,然后指定绑定值。
点按Done以保存参数,点按Done以保存属性,然后点按Save以保存表单数据模型。
根据绑定值将读取服务参数绑定到用户配置文件属性、请求属性或文字值。 该值将作为参数传递到服务,以从数据源获取与指定值关联的详细信息。
从绑定到下拉菜单中选择文字,然后在绑定值字段中输入值。 与值关联的详细信息将从数据源中检索。 使用此选项可检索与静态值关联的详细信息。
在此示例中,与4367655678关联的详细信息(作为mobilenum
参数的值)将从数据源中检索。 如果传递移动号码参数的值,则关联的详细信息可以包括客户名称、客户地址和城市等属性。
从绑定到下拉菜单中选择用户配置文件属性,然后在绑定值字段中输入属性名称。 登录到AEM实例的用户的详细信息将基于属性名称从数据源中检索。
在绑定值字段中指定的属性名称必须包含完整的绑定路径,直到用户的属性名称为止。 打开以下URL以访问有关CRXDE的用户详细信息:
https://[server-name]:[port]/crx/de/index.jsp#/home/users/
在此示例中,在用户的“绑定值grios
”字段中指定profile.empid
。
id
参数采用用户配置文件的empid
属性的值,并将其作为参数传递给读取服务。 它从与登录用户关联的empid
的员工数据模型对象中读取并返回关联属性的值。
使用请求属性从数据源检索关联的属性。
从绑定到下拉菜单中选择请求属性,然后在绑定值字段中输入属性名称。
为head.jsp创建叠加。 要创建叠加,请打开CRX DE并将https://<server-name>:<port number>/crx/de/index.jsp#/libs/fd/af/components/page2/afStaticTemplatePage/head.jsp
文件复制到https://<server-name>:<port number>/crx/de/index.jsp#/apps/fd/af/components/page2/afStaticTemplatePage/head.jsp
/libs/fd/af/components/page2/afStaticTemplatePage/head.jsp
/libs/fd/af/components/page2/aftemplatedpage/aftemplatedpage.jsp
为请求属性设置paramMap。 例如,在apps文件夹的.jsp文件中包含以下代码:
<%Map paraMap = new HashMap();
paraMap.put("<request_attribute>",request.getParameter("<request_attribute>"));
request.setAttribute("paramMap",paraMap);
例如,使用以下代码从数据源检索petid的值:
<%Map paraMap = new HashMap();
paraMap.put("petId",request.getParameter("petId"));
request.setAttribute("paramMap",paraMap);%>
详细信息将根据请求中指定的属性名称从数据源中检索。
例如,在请求中指定属性为petid=100
将从数据源中检索与属性值关联的属性。
通常,数据源中的数据模型对象之间会构建关联。 关联可以是一对一或一对多。 例如,可以有多个与员工关联的依赖项。 它称为一对多关联,由1:n
在连接关联数据模型对象的行上描述。 但是,如果关联返回给定员工ID的唯一员工名称,则它称为一对一关联。
将数据源中的关联数据模型对象添加到表单数据模型时,它们的关联将保留并显示为通过箭头线连接。 您可以在表单数据模型中跨不同数据源在数据模型对象之间添加关联。
JDBC数据源中的预定义关联不会保留在表单数据模型中。 您必须手动创建它们。
添加关联:
选中数据模型对象顶部的复选框以将其选中,然后点按添加关联。 将打开添加关联对话框。
除了数据模型对象和服务之外,OData服务元数据文档还包括定义两个数据模型对象之间关联的导航属性。 在表单数据模型中添加关联时,可以使用这些导航属性。 有关更多信息,请参阅使用OData服务的导航属性。
将打开添加关联对话框。
“添加关联”对话框
在添加关联窗格中:
在以下示例中,Dependents数据模型对象的读取服务的默认参数为dependentid
。
依赖项读取服务的默认参数为dependientd
但是,参数必须是关联数据模型对象之间的通用属性,在此示例中为Employeeid
。 因此,必须将Employeeid
参数绑定到Employee数据模型对象的id
属性,以从Dependents数据模型对象中获取关联的依赖项详细信息。
更新了参数和绑定
点按Done以保存参数。
点按完成以保存关联,然后点按保存以保存表单数据模型。
根据需要重复这些步骤以创建更多关联。
添加的关联将出现在数据模型对象框中,其中具有指定的标题和连接关联数据模型对象的线条。
您可以编辑关联,方法是选中该关联对应的复选框,然后点按编辑关联。
您可以编辑在表单数据模型中添加的数据模型对象的属性、其属性和服务。
要编辑属性,请执行以下操作:
选中表单数据模型中的数据模型对象、属性或服务旁边的复选框。
点按编辑属性。 将打开选定模型对象、属性或服务的编辑属性窗格。
获取服务的“编辑属性”对话框
点按完成以保存属性,然后点按保存以保存表单数据模型。
computed属性是根据规则或表达式计算其值的属性。 使用规则,您可以将计算属性的值设置为文本字符串、数字、数学表达式的结果或表单数据模型中其他属性的值。
例如,您可以创建计算属性FullName,其值是现有FirstName和LastName属性串联的结果。 为此,请执行以下操作:
创建名为FullName
且其数据类型为String的新属性。
启用Computed并点按Done以创建属性。
将创建FullName计算属性。 请注意属性旁边的图标,以描述计算属性。
选择FullName属性,然后点按编辑规则。 随即会打开规则编辑器窗口。
在规则编辑器窗口中,点按创建。 将打开Set Value规则窗口。
从选择选项下拉列表中,选择数学表达式。 其他可用选项包括表单数据模型对象和字符串。
在数学表达式中,分别选择第一和第二对象中的FirstName和LastName。 选择plus作为运算符。
点按完成,然后点按关闭以关闭规则编辑器窗口。 该规则类似于以下内容。
在表单数据模型上,点按保存。 已配置计算属性。
在OData服务中,导航属性用于定义两个数据模型对象之间的关联。 这些属性是在实体类型或复杂类型上定义的。 例如,在以下从示例TripPin OData示例服务的元数据文件提取的中,人员实体包含三个导航属性 — Friends、BestFriend和Trips。
有关导航属性的更多信息,请参阅OData文档。
<edmx:Edmx xmlns:edmx="https://docs.oasis-open.org/odata/ns/edmx" Version="4.0">
<script/>
<edmx:DataServices>
<Schema xmlns="https://docs.oasis-open.org/odata/ns/edm" Namespace="Microsoft.OData.Service.Sample.TrippinInMemory.Models">
<EntityType Name="Person">
<Key>
<PropertyRef Name="UserName"/>
</Key>
<Property Name="UserName" Type="Edm.String" Nullable="false"/>
<Property Name="FirstName" Type="Edm.String" Nullable="false"/>
<Property Name="LastName" Type="Edm.String"/>
<Property Name="MiddleName" Type="Edm.String"/>
<Property Name="Gender" Type="Microsoft.OData.Service.Sample.TrippinInMemory.Models.PersonGender" Nullable="false"/>
<Property Name="Age" Type="Edm.Int64"/>
<Property Name="Emails" Type="Collection(Edm.String)"/>
<Property Name="AddressInfo" Type="Collection(Microsoft.OData.Service.Sample.TrippinInMemory.Models.Location)"/>
<Property Name="HomeAddress" Type="Microsoft.OData.Service.Sample.TrippinInMemory.Models.Location"/>
<Property Name="FavoriteFeature" Type="Microsoft.OData.Service.Sample.TrippinInMemory.Models.Feature" Nullable="false"/>
<Property Name="Features" Type="Collection(Microsoft.OData.Service.Sample.TrippinInMemory.Models.Feature)" Nullable="false"/>
<NavigationProperty Name="Friends" Type="Collection(Microsoft.OData.Service.Sample.TrippinInMemory.Models.Person)"/>
<NavigationProperty Name="BestFriend" Type="Microsoft.OData.Service.Sample.TrippinInMemory.Models.Person"/>
<NavigationProperty Name="Trips" Type="Collection(Microsoft.OData.Service.Sample.TrippinInMemory.Models.Trip)"/>
</EntityType>
在表单数据模型中配置OData服务时,实体容器中的所有导航属性都可通过表单数据模型中的服务提供。 在此TripPin OData服务示例中,可以使用表单数据模型中的一个GET LINK
服务读取Person
实体容器中的三个导航属性。
下面重点介绍表单数据模型中的GET LINK of Person /People
服务,该服务是TripPin OData服务Person
实体中三个导航属性的组合服务。
将GET LINK
服务添加到表单数据模型的“服务”选项卡后,可以编辑属性以选择要在服务中使用的输出模型对象和导航属性。 例如,以下示例中的以下GET LINK of Person /People
服务使用“行程”作为输出模型对象,使用导航属性作为“行程”。
NavigationPropertyName参数的Default Value字段中可用的值取决于Return数组的状态? 切换按钮。启用后,将显示“收藏集”类型的导航属性。
在此示例中,您还可以将输出模型对象选为Person,将导航属性参数选为Friends或BestFriend(取决于Return数组? 启用或禁用)。
同样,在表单数据模型中添加关联时,您可以选择GET LINK
服务并配置其导航属性。 但是,要能够选择导航属性,请确保将Binding To(绑定到)字段设置为Literal。
表单数据模型编辑器允许您为表单数据模型中的所有数据模型对象属性(包括计算属性)生成示例数据。 它是一组符合为每个属性配置的数据类型的随机值。 您还可以编辑和保存数据,即使重新生成示例数据,该数据也会保留。
执行以下操作以生成和编辑示例数据:
打开表单数据模型,然后点按编辑示例数据。 它会在“编辑示例数据”窗口中生成并显示示例数据。
在编辑示例数据窗口中,根据需要编辑数据,然后点按保存。
接下来,您可以使用示例数据根据表单数据模型预填和测试交互式通信。 有关更多信息,请参阅使用表单数据模型。
您的表单数据模型已配置,但在投入使用之前,您可能希望测试配置的数据模型对象和服务是否按预期工作。 要测试数据模型对象和服务,请执行以下操作:
在表单数据模型中选择数据模型对象或服务,然后分别点按测试模型对象或测试服务。
“测试表单数据模型”(Test Form Data Model)窗口打开。
在“测试表单数据模型”窗口中,从“输入”窗格中选择要测试的数据模型对象或服务。
在测试代码中指定参数值,然后点按Test。 成功的测试会在“输出”窗格中返回输出。
同样,您也可以测试表单数据模型中的其他数据模型对象和服务。
表单数据模型验证在调用DermisBridge API时作为输入接收的数据(基于表单数据模型中可用的验证标准)。 验证基于查询对象中设置的ValidationOptions
标记,该对象用于调用API。
标记可以设置为以下任意值:
如果没有为ValidationOptions
标志设置值,则对输入数据执行BASIC验证。
以下是将验证标志设置为FULL的示例:
operationOptions.setValidationOptions(ValidationOptions.FULL);
您为输入数据中的属性提供的值必须与元数据文档中为该属性定义的数据类型相匹配。
如果值与为属性定义的数据类型不匹配,则DermisBridge API会显示异常,与ValidationOptions
标记的值无关。 如果将日志级别设置为Debug ,则会将错误记录到error.log文件中。
表单数据模型基于数据类型约束列表验证输入数据。 输入数据的约束列表可能因数据源而异。
下表列出了基于数据源的输入数据约束:
约束 | 描述 | 输入数据源 |
必需 | 如果为true,则参数必须包含在输入数据中。 | Swagger、WSDL和数据库 |
null | 如果为true,则可以在输入数据中将参数的值设置为Null。 | WSDL、Odata和数据库 |
最大值 | 指定数值的上限。 指定为上界的最大值也可以分配给输入数据中的参数。 | Swagger和WSDL |
最小 | 指定数值的下限。 指定为下限的最小值也可以分配给输入数据中的参数。 | Swagger和WSDL |
exclusiveMaximum | 指定数值的上限。 指定为上限的最大值不得分配给输入数据中的参数。 | Swagger和WSDL |
exclusiveMinum | 指定数值的下限。 不能将指定为下限的最小值分配给输入数据中的参数。 | Swagger和WSDL |
minLength | 指定字符串中包含的字符数的下限。 指定为下限的最小值也可以分配给输入数据中的参数。 | Swagger和WSDL |
maxLength | 指定字符串中包含的字符数的上限。 指定为上界的最大值也可以分配给输入数据中的参数。 | Swagger、WSDL、Odata和数据库 |
图案 | 指定固定的字符序列。 仅当字符符合指定的模式时,才会成功验证输入字符串。 | Swagger |
minItems | 指定数组中的最小项数。 指定为下限的最小值也可以分配给输入数据中的参数。 | Swagger和WSDL |
maxItems | 指定数组中的最大项数。 指定为上界的最大值也可以分配给输入数据中的参数。 | Swagger和WSDL |
uniqueItems | 如果为true,则数组的所有元素在输入数据中必须是唯一的。 | Swagger |
枚举(字符串) |
将输入数据中参数的值限制为一组固定的字符串值。 它必须是至少具有一个元素的数组,其中每个元素都是唯一的。 | Swagger、WSDL和Odata |
枚举(数字) |
将输入数据中参数的值限制为一组固定的数字值。 它必须是至少具有一个元素的数组,其中每个元素都是唯一的。 | WSDL |
在此示例中,根据Swagger文件中定义的最大、最小和必需约束来验证输入数据。 仅当订单ID存在且其值介于1到10之间时,输入数据才符合验证标准。
parameters: [
{
name: "orderId",
in: "path",
description: "ID of pet that needs to be fetched",
required: true,
type: "integer",
maximum: 10,
minimum: 1,
format: "int64"
}
]
如果输入数据不符合验证条件,则会显示异常。 如果将日志级别设置为Debug,则错误将记录到error.log文件。 例如,
21.01.2019 17:26:37.411 *ERROR* com.adobe.aem.dermis.core.validation.JsonSchemaValidator {"errorCode":"AEM-FDM-001-044","errorMessage":"Input validations failed during operation execution.","violations":{"/orderId":["numeric instance is greater than the required maximum (maximum: 10, found: 16)"]}}
您有一个工作表单数据模型,该模型现已准备好在自适应表单和交互式通信工作流中使用。 有关更多信息,请参阅使用表单数据模型。