处理表单数据模型

数据集成

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

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

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

注意

您必须是这两者的成员 fdm-authorforms-user 群组,以便能够创建和使用表单数据模型。 联系您的 Experience Manager 管理员成为组的成员。

添加数据模型对象和服务

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

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

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

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

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

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

    选定对象

    所选数据模型对象和服务

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

    模型选项卡

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

    注意

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

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

    services-tab

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

    注意

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

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

    注意

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

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

创建数据模型对象

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

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

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

  2. 点按 创建实体.

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

    新实体

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

添加子属性

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

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

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

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

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

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

    要手动将子属性与数据模型对象属性绑定,请点按 绑定引用 字段。 的 选择对象 对话框列出了父数据模型对象中的所有属性。 选择要与绑定的属性,然后点按勾号图标。 您只能选择与子属性具有相同数据类型的属性。

  5. 点按 完成 保存子属性并点按 保存 保存表单数据模型…… 子属性现已添加到数据模型对象。

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

绑定数据模型对象和属性

当要与表单数据模型集成的数据源可用时,可以按照 更新数据源. 然后,执行以下操作以绑定未绑定的数据模型对象和属性:

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

  2. 点按 编辑属性.

  3. 编辑属性 窗格,点按 绑定 字段。 它会打开 选择对象 对话框,其中列出了在表单数据模型中添加的数据源。

    select-object

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

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

    绑定模型对象

配置服务

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

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

    edit-properties

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

    的 编辑属性 对话框。

    edit-properties-2

    编辑属性对话框

    注意

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

    有关使用该服务的详细信息,请参阅 使用OData服务的导航属性.

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

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

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

    读写服务

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

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

  5. 点按 完成 为了保存参数, 完成 保存属性,然后 保存 保存表单数据模型。

绑定读取服务参数

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

文字值

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

在本例中,与 4367655678,作为 mobilenum 参数。 如果传递移动号码参数的值,则关联的详细信息可以包括客户名称、客户地址和城市等属性。

文字值

用户配置文件属性

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

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

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

用户个人资料

在本例中,指定 profile.empid绑定值 字段 grios 用户。

编辑参数

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 参数必须绑定到 id Employee数据模型对象的属性,以从Dependents数据模型对象中获取关联的依赖项详细信息。

    add-association-example-2

    更新了参数和绑定

    点按 完成 来保存参数。

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

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

注意

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

您可以通过选中对应的复选框并点按来编辑关联 编辑关联.

添加关联

编辑属性

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

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

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

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

    • 数据模型对象:指定读写服务和编辑参数。

    • 属性:指定属性的类型、子类型和格式。 您还可以指定所选属性是否是数据模型对象的主键。

    • 服务:指定服务的输入模型对象、输出类型和参数。 对于Get服务,您可以指定它是否需要返回数组。

      edit-properties-service
      获取服务的“编辑属性”对话框

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

创建计算属性

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

例如,您可以创建一个计算属性 全名 其值是现有 名字LastName 属性。 为此,请执行以下操作:

  1. 创建名为的新资产 FullName 其数据类型为字符串。

  2. 启用 计算 点按 完成 创建资产。

    计算

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

    computed-prop

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

  4. 在规则编辑器窗口中,点按 创建. A 设置值 规则窗口打开。

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

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

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

    规则

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

使用OData服务的导航属性

在OData服务中,导航属性用于定义两个数据模型对象之间的关联。 这些属性是在实体类型或复杂类型上定义的。 例如,在以下从示例的元数据文件提取的 TripPin OData示例服务中,人员实体包含三个导航属性 — 朋友、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服务示例中, Person 实体容器可使用一个 GET LINK 服务。

以下重点介绍 GET LINK of Person /People 表单数据模型中的服务,它是 Person TripPin OData服务的实体。

nav-prop-service

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

edit-prop-nav-prop

注意

中的可用值 默认值 字段 NavigationPropertyName 参数取决于 返回数组? 切换按钮。 启用后,将显示“收藏集”类型的导航属性。

在此示例中,您还可以将输出模型对象选为“人员”,将导航属性参数选为“好友”或“BestFriend”(取决于 返回数组? 启用或禁用)。

edit-prop-nav-prop2

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

add-association-nav-prop

生成和编辑示例数据

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

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

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

    生成示例数据

  2. 编辑示例数据 ,根据需要编辑数据,然后点按 保存.

测试数据模型对象和服务

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

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

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

    测试数据模型

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

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

    测试结果

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

自动验证输入数据

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

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

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

如果未为 ValidationOptions标志, 基本 对输入数据执行验证。

以下示例将验证标志设置为 完整:

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"
   }
   ]

如果输入数据不符合验证条件,则会显示异常。 如果日志级别设置为 调试,则会将错误记录到 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)"]}}

下面的步骤

您有一个工作正常的表单数据模型,该模型现已准备好在自适应Forms中使用 工作流。 有关更多信息,请参阅 使用表单数据模型.

在此页面上