使用表单数据模型

数据集成

表单数据模型编辑器提供了直观的用户界面和工具,用于编辑和配置表单数据模型。 使用编辑器,您可以在表单数据模型中添加和配置来自关联数据源的数据模型对象、属性和服务。 此外,它还允许您创建数据模型对象和属性,而不使用数据源,并在以后将它们与相应的数据模型对象和属性绑定。 您还可以为数据模型对象属性生成和编辑示例数据,在预览时,可以使用这些属性预填充自适应表单和交互式通信。 您可以测试在表单数据模型中配置的数据模型对象和服务,以确保它与数据源正确集成。

如果您是Forms数据集成的新用户,并且尚未配置数据源或创建表单数据模型,请参阅以下主题:

有关可以使用表单数据模型编辑器执行的各种任务和配置的详细信息,请阅读。

注意

您必须是​fdm-author​和​forms-user​组的成员,才能创建和使用表单数据模型。 请联系您的AEM管理员以成为组的成员。

添加数据模型对象和服务

如果您使用数据源创建表单数据模型,则可以使用表单数据模型编辑器添加数据模型对象和服务,配置其属性,在数据模型对象之间构建关联,以及测试表单数据模型和服务。

您可以在表单数据模型中添加来自可用数据源的数据模型对象和服务。 添加的数据模型对象显示在“模型”选项卡中,添加的服务则显示在“服务”选项卡中。

要添加数据模型对象和服务,请执行以下操作:

  1. 登录AEM创作实例,导航到​Forms >数据集成,然后打开要在其中添加数据模型对象的表单数据模型。

  2. 在“数据源”窗格中,展开数据源以查看可用的数据模型对象和服务。

  3. 选择要添加到表单数据模型的数据模型对象和服务,然后点按​添加选定项

    选定对象

    所选数据模型对象和服务

    “模型”(Model)选项卡显示所有数据模型对象及其添加到表单数据模型的属性的图形表示。 每个数据模型对象由表单数据模型中的一个框表示。

    模型选项卡

    “模型”选项卡显示添加的数据模型对象

    注意

    您可以按住并拖动数据模型对象框,以在内容区域中对其进行组织。 在表单数据模型中添加的所有数据模型对象在“数据源”窗格中都呈灰显状态。

    “服务”选项卡列出了添加的服务。

    services-tab

    “服务”选项卡显示数据模型服务

    注意

    除了数据模型对象和服务之外,OData服务元数据文档还包括定义两个数据模型对象之间关联的导航属性。 有关更多信息,请参阅使用OData服务的导航属性

  4. 点按​Save​以保存表单模型对象。

    注意

    您可以使用自适应表单规则调用在表单数据模型的“服务”选项卡中配置的服务。 已配置的服务可在规则编辑器的Invoke services操作中使用。有关在自适应表单规则中使用这些服务的详细信息,请参阅在规则编辑器中调用服务和设置规则值。

创建数据模型对象和子属性

创建数据模型对象

虽然可以从配置的数据源添加数据模型对象,但也可以创建没有数据源的数据模型对象或实体。 当您未在表单数据模型中配置数据源时,此功能会特别有用。

要创建不含数据源的数据模型对象,请执行以下操作:

  1. 登录AEM创作实例,导航到​Forms >数据集成,然后打开要在其中创建数据模型对象或实体的表单数据模型。

  2. 点按​创建实体

  3. 在创建数据模型对话框中,指定数据模型对象的名称,然后点按​添加。 数据模型对象被添加到表单数据模型中。 请注意,新添加的数据模型对象未绑定到数据源,并且没有如下图所示的任何属性。

    新实体

接下来,可以在未绑定数据模型对象中添加子属性。

添加子属性

表单数据模型编辑器允许您在数据模型对象中创建子属性。 创建时的资产不会绑定到数据源中的任何资产。 您稍后可以将子属性与包含数据模型对象中的其他属性绑定。

要创建子属性,请执行以下操作:

  1. 在表单数据模型中,选择数据模型对象,然后点按​创建子属性

  2. 在​创建子属性​对话框中,分别在​名称​和​类型​字段中为属性指定名称和数据类型。 您可以选择为属性指定标题和描述。

  3. 如果属性是计算属性,则启用计算。 计算属性的值基于规则或表达式。 有关更多信息,请参阅编辑属性

  4. 如果数据模型对象绑定到数据源,则添加的子属性将自动绑定到具有相同名称和数据类型的父数据模型对象的属性。

    要使用数据模型对象属性手动绑定子属性,请点按​Bind Reference​字段旁边的浏览图标。 选择对象​对话框列出父数据模型对象中的所有属性。 选择要与绑定的属性,然后点按勾号图标。 请注意,您只能选择与子属性具有相同数据类型的属性。

  5. 点按​Done​以保存子属性,然后点按​Save​以保存表单数据模型。 子属性现已添加到数据模型对象。

创建数据模型对象和属性后,可以继续根据表单数据模型创建自适应表单和交互式通信。 之后,当您配置了可用的数据源后,您便可以将表单数据模型与数据源绑定。 绑定将在关联的自适应表单和交互式通信中自动更新。 有关使用表单数据模型创建自适应表单和交互式通信的更多信息,请参阅使用表单数据模型

绑定数据模型对象和属性

当要与表单数据模型集成的数据源可用时,可以按照更新数据源中所述,将其添加到表单数据模型。 然后,执行以下操作以绑定未绑定的数据模型对象和属性:

  1. 在表单数据模型中,选择要与数据源绑定的未绑定数据源。

  2. 点按​编辑属性

  3. 在​编辑属性​窗格中,点按​绑定​字段旁边的浏览图标。 此时将打开​选择对象​对话框,其中列出了表单数据模型中添加的数据源。

    select-object

  4. 展开数据源树并选择要与其绑定的数据模型对象,然后点按勾号图标。

  5. 点按​完成​以保存属性,然后点按​保存​以保存表单数据模型。 数据模型对象现在与数据源绑定。 请注意,数据模型对象不再标记为未绑定。

    绑定模型对象

配置服务

要读取和写入数据模型对象的数据,请执行以下操作以配置读取和写入服务:

  1. 选中数据模型对象顶部的复选框以将其选中,然后点按​编辑属性

    edit-properties

    编辑属性以配置数据模型对象的读取和写入服务

    此时将打开编辑属性对话框。

    edit-properties-2

    编辑属性对话框

    注意

    除了数据模型对象和服务之外,OData服务元数据文档还包括定义两个数据模型对象之间关联的导航属性。 向表单数据模型添加OData服务数据源时,表单数据模型中有一项服务可用于数据模型对象中的所有导航属性。 您可以使用此服务读取相应数据模型对象的导航属性。

    有关使用服务的更多信息,请参阅使用OData服务的导航属性

  2. 切换​顶级对象​以指定数据模型对象是否为顶级模型对象。

    在表单数据模型中配置的数据模型对象可用于基于表单数据模型的自适应表单内容浏览器的“数据模型对象”选项卡中。 在两个数据模型对象之间添加关联时,与之关联的数据模型对象将嵌套在“数据模型对象”(Data Model Objects)选项卡中与之关联的数据模型对象下。 如果嵌套数据模型是顶级对象,则它也将单独显示在“数据模型对象”(Data Model Objects)选项卡中。 因此,您将看到其两个条目,一个位于嵌套层次结构内部,另一个位于嵌套层次结构外部,这可能会令表单作者感到困惑。 要使关联的数据模型对象仅显示在嵌套层次结构中,请禁用顶级对象属性。

  3. 为选定的数据模型对象选择读取和写入服务。 将显示服务的参数。

    读写服务

    为员工数据源配置的读写服务

  4. 点按aem_6_3_edit ,将读取服务参数绑定到用户配置文件属性、请求属性或文字值,然后指定绑定值。

  5. 点按​Done​以保存参数,点按​Done​以保存属性,然后点按​Save​以保存表单数据模型。

绑定读取服务参数

根据绑定值将读取服务参数绑定到用户配置文件属性、请求属性或文字值。 该值将作为参数传递到服务,以从数据源获取与指定值关联的详细信息。

文字值

从​绑定到​下拉菜单中选择​文字,然后在​绑定值​字段中输入值。 与值关联的详细信息将从数据源中检索。 使用此选项可检索与静态值关联的详细信息。

在此示例中,与​4367655678​关联的详细信息(作为mobilenum参数的值)将从数据源中检索。 如果传递移动号码参数的值,则关联的详细信息可以包括客户名称、客户地址和城市等属性。

文字值

用户配置文件属性

从​绑定到​下拉菜单中选择​用户配置文件属性,然后在​绑定值​字段中输入属性名称。 登录到AEM实例的用户的详细信息将基于属性名称从数据源中检索。

在​绑定值​字段中指定的属性名称必须包含完整的绑定路径,直到用户的属性名称为止。 打开以下URL以访问有关CRXDE的用户详细信息:

https://[server-name]:[port]/crx/de/index.jsp#/home/users/

用户个人资料

在此示例中,在​​用户的“绑定值grios”字段中指定profile.empid

编辑参数

id参数采用用户配置文件的empid属性的值,并将其作为参数传递给读取服务。 它从与登录用户关联的empid的员工数据模型对象中读取并返回关联属性的值。

请求属性

使用请求属性从数据源检索关联的属性。

  1. 从​绑定到​下拉菜单中选择​请求属性,然后在​绑定值​字段中输入属性名称。

  2. 为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

    注意
    • 如果使用静态模板,请在以下位置叠加head.jsp:
      /libs/fd/af/components/page2/afStaticTemplatePage/head.jsp
    • 如果您使用可编辑的模板,请在以下位置叠加aftemplatedpage.jsp:
      /libs/fd/af/components/page2/aftemplatedpage/aftemplatedpage.jsp
  3. 为请求属性设置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数据源中的预定义关联不会保留在表单数据模型中。 您必须手动创建它们。

添加关联:

  1. 选中数据模型对象顶部的复选框以将其选中,然后点按​添加关联。 将打开添加关联对话框。

    添加关联

    注意

    除了数据模型对象和服务之外,OData服务元数据文档还包括定义两个数据模型对象之间关联的导航属性。 在表单数据模型中添加关联时,可以使用这些导航属性。 有关更多信息,请参阅使用OData服务的导航属性

    将打开添加关联对话框。

    add-association-2

    “添加关联”对话框

  2. 在添加关联窗格中:

    • 指定关联的标题。
    • 选择关联类型 — 一对一或一对多。
    • 选择要与其关联的数据模型对象。
    • 选择读取服务以从所选模型对象读取数据。 将显示读取服务参数。 编辑以根据需要更改参数,并将其绑定到要关联的数据模型对象的属性。

    在以下示例中,Dependents数据模型对象的读取服务的默认参数为dependentid

    add-association-example

    依赖项读取服务的默认参数为dependientd

    但是,参数必须是关联数据模型对象之间的通用属性,在此示例中为Employeeid。 因此,必须将Employeeid参数绑定到Employee数据模型对象的id属性,以从Dependents数据模型对象中获取关联的依赖项详细信息。

    add-association-example-2

    更新了参数和绑定

    点按​Done​以保存参数。

  3. 点按​完成​以保存关联,然后点按​保存​以保存表单数据模型。

  4. 根据需要重复这些步骤以创建更多关联。

注意

添加的关联将出现在数据模型对象框中,其中具有指定的标题和连接关联数据模型对象的线条。

您可以编辑关联,方法是选中该关联对应的复选框,然后点按​编辑关联

添加关联

编辑属性

您可以编辑在表单数据模型中添加的数据模型对象的属性、其属性和服务。

要编辑属性,请执行以下操作:

  1. 选中表单数据模型中的数据模型对象、属性或服务旁边的复选框。

  2. 点按​编辑属性。 将打开选定模型对象、属性或服务的​编辑属性​窗格。

    • 数据模型对象:指定读写服务和编辑参数。
    • 属性:指定属性的类型、子类型和格式。您还可以指定所选属性是否是数据模型对象的主键。
    • 服务:指定服务的输入模型对象、输出类型和参数。对于Get服务,您可以指定它是否需要返回数组。

    edit-properties-service

    获取服务的“编辑属性”对话框

  3. 点按​完成​以保存属性,然后点按​保存​以保存表单数据模型。

创建计算属性

computed属性是根据规则或表达式计算其值的属性。 使用规则,您可以将计算属性的值设置为文本字符串、数字、数学表达式的结果或表单数据模型中其他属性的值。

例如,您可以创建计算属性​FullName,其值是现有​FirstName​和​LastName​属性串联的结果。 为此,请执行以下操作:

  1. 创建名为FullName且其数据类型为String的新属性。

  2. 启用​Computed​并点按​Done​以创建属性。

    计算

    将创建FullName计算属性。 请注意属性旁边的图标,以描述计算属性。

    computed-prop

  3. 选择FullName属性,然后点按​编辑规则。 随即会打开规则编辑器窗口。

  4. 在规则编辑器窗口中,点按​创建。 将打开​Set Value​规则窗口。

    从选择选项下拉列表中,选择​数学表达式。 其他可用选项包括​表单数据模型对象​和​字符串

  5. 在数学表达式中,分别选择第一和第二对象中的​FirstName​和​LastName。 选择​plus​作为运算符。

    点按​完成,然后点按​关闭​以关闭规则编辑器窗口。 该规则类似于以下内容。

    规则

  6. 在表单数据模型上,点按​保存。 已配置计算属性。

使用OData服务的导航属性

在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实体中三个导航属性的组合服务。

nav-prop-service

GET LINK服务添加到表单数据模型的“服务”选项卡后,可以编辑属性以选择要在服务中使用的输出模型对象和导航属性。 例如,以下示例中的以下GET LINK of Person /People服务使用“行程”作为输出模型对象,使用导航属性作为“行程”。

edit-prop-nav-prop

注意

NavigationPropertyName​参数的​Default Value​字段中可用的值取决于​Return数组的状态? 切换按钮。启用后,将显示“收藏集”类型的导航属性。

在此示例中,您还可以将输出模型对象选为Person,将导航属性参数选为Friends或BestFriend(取决于​Return数组? 启用或禁用)。

edit-prop-nav-prop2

同样,在表单数据模型中添加关联时,您可以选择GET LINK服务并配置其导航属性。 但是,要能够选择导航属性,请确保将​Binding To(绑定到)字段​设置为​Literal

add-association-nav-prop

生成和编辑示例数据

表单数据模型编辑器允许您为表单数据模型中的所有数据模型对象属性(包括计算属性)生成示例数据。 它是一组符合为每个属性配置的数据类型的随机值。 您还可以编辑和保存数据,即使重新生成示例数据,该数据也会保留。

执行以下操作以生成和编辑示例数据:

  1. 打开表单数据模型,然后点按​编辑示例数据。 它会在“编辑示例数据”窗口中生成并显示示例数据。

    生成示例数据

  2. 在​编辑示例数据​窗口中,根据需要编辑数据,然后点按​保存

接下来,您可以使用示例数据根据表单数据模型预填和测试交互式通信。 有关更多信息,请参阅使用表单数据模型

测试数据模型对象和服务

您的表单数据模型已配置,但在投入使用之前,您可能希望测试配置的数据模型对象和服务是否按预期工作。 要测试数据模型对象和服务,请执行以下操作:

  1. 在表单数据模型中选择数据模型对象或服务,然后分别点按​测试模型对象​或​测试服务

    “测试表单数据模型”(Test Form Data Model)窗口打开。

    测试数据模型

  2. 在“测试表单数据模型”窗口中,从“输入”窗格中选择要测试的数据模型对象或服务。

  3. 在测试代码中指定参数值,然后点按​Test。 成功的测试会在“输出”窗格中返回输出。

    测试结果

同样,您也可以测试表单数据模型中的其他数据模型对象和服务。

自动验证输入数据

表单数据模型验证在调用DermisBridge API时作为输入接收的数据(基于表单数据模型中可用的验证标准)。 验证基于查询对象中设置的ValidationOptions标记,该对象用于调用API。

标记可以设置为以下任意值:

  • 完整:FDM根据所有约束执行验证
  • 关闭:无验证
  • 基本:FDM基于“必需”和“可为空”约束执行验证

如果没有为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)"]}}

下面的步骤

您有一个工作表单数据模型,该模型现已准备好在自适应表单和交互式通信工作流中使用。 有关更多信息,请参阅使用表单数据模型

在此页面上