创建包含可重复部分的表单(核心组件) repeat-panel

版本
文章链接
AEM 6.5
单击此处
AEM as a Cloud Service
本文

可重复部分是指可为同一数据的多个实例收集信息而重复或多次重复的表单的一部分。

例如,请看一个用于收集个人工作经验信息的表单。您可以设置一个可重复的分区,用于记录以前每份工作的详细信息。可重复分区通常包含公司名称、职位、就业日期和工作职责等字段。用户可以在可重复分区中添加多个实例,以输入有关他们所做过的每项工作的信息。

重复性

读完本文后,您将学会:

  • 在自适应表单中创建可重复部分
  • 设置自适应表单组件的最小或最大重复次数
  • 使用规则编辑器为可重复部分配置添加或删除操作

您可以使用面板折叠水平选项卡垂直选项卡向导组件使自适应表单的部分可重复。 可将子组件添加到这些组件中,以在表单中创建可重复部分。

此文档中的示例基于面板组件。 您可以执行相同的步骤,以使面板折叠水平制表符垂直制表符向导组件可重复。

添加或删除表单中的可重复部分 add-or-delete-repeatable-section-in-panel-container

要在表单中重复面板或删除可重复面板,表单作者使用按钮组件添加或删除面板的实例。 在表单中添加或删除可重复部分(面板):

使面板容器可重复 make-panel-container-repeatable

“辅助功能”选项卡

要使面板可重复,请执行以下步骤:

  1. 选择一个面板容器,然后选择 cmppr

  2. 单击​ 重复面板,然后打开切换开关以​ 使面板可重复

  3. 将最小可重复部分的​ 最小重复次数 ​设置为必需,您可以将面板的非重复的​ 最小重复次数 ​设置为零,或者删除重复的面板。 默认情况下,最小重复次数值为0。

  4. 设置​ 最大重复次数 ​以重复面板所需的次数,此值默认为无限。

    note note
    NOTE
    • 最小重复次数不能为 — ve值。
    • 要创建不可重复的面板,请将最大和最小字段的值设置为1。

使用实例管理器(通过脚本)添加可重复部分 add-repeatable-section-using-instance-manager-via-scripts

要重复的面板的父级应包含一个“添加”按钮来管理面板的重复实例。 执行以下步骤将按钮插入到父代,并在按钮上启用脚本:

  1. 将​ 按钮组件 ​添加到面板的父面板。 在下面的示例视频中,使用了标签名为​ Add ​且字段名为​ AddPanel ​的按钮组件。 选择该组件并选择 edit-rules 。 按钮组件的规则将在规则编辑器中打开。

  2. 在“规则编辑器”窗口中,单击​ 创建

    在“表单对象和函数”行中选择​ 可视编辑器

    1. 在规则区域的WHEN下,选择状态​ 被单击
    2. 在THEN下,选择​ 添加实例,并使用 切换侧面板 拖放面板,或使用​ 拖放对象或在此处选择。

    在“表单对象和函数”行中选择​ 代码编辑器。 单击“编辑规则”,在代码区中:

    • 若要创建添加面板按钮,请指定this.panel.instanceManager.addInstance()

    单击​ 完成

使用实例管理器(通过脚本)删除可重复部分 delete-repeatable-section-using-instance-manager-via-scripts

面板的父级应包含一个删除按钮,用于删除可重复面板的实例。 执行以下步骤以将按钮插入到父项,并在按钮上启用脚本以删除可重复的面板:

  1. 向面板的父项添加​ 按钮组件。在下面的视频中,使用了标签名称为​ delete ​且字段名称为​ DeletePanel ​的按钮组件。 选择该组件并选择 edit-rules 。 按钮组件的规则将在规则编辑器中打开。

  2. 在“规则编辑器”窗口中,单击​ 创建

    在“表单对象和函数”行中选择​ 可视编辑器

    1. 在规则区域的WHEN DeletePanel ​下,已单击​ 选择状态
    2. 在THEN下,选择​ 删除实例,并使用 切换侧面板 拖放面板,或使用​ 拖放对象或在此处选择。

    在“表单对象和函数”行中选择​ 代码编辑器。 单击“编辑规则”,在代码区中:

    • 要创建删除面板按钮,请指定this.panel.instanceManager.removeInstance(this.panel.instanceIndex)

    单击​ 完成

NOTE
如果某个字段属于可重复面板,则无法在脚本中使用该字段名称直接访问该字段。 要访问该字段,请在InstanceManager中使用instances API指定该字段所属的可重复实例。 在InstanceManager中使用instances API的语法为:
<panelName>.instanceManager.instances[<instanceNumber>].<fieldname>
例如,创建一个带有文本框的可重复面板的自适应表单。 使用三个可重复的文本框预填表单时,您需要以下xml:
<panel1><textbox1>AA1</panel1></textbox1>
<panel1><textbox1>AA2</panel1></textbox1>
<panel1><textbox1>AA3</panel1></textbox1>
要读取AA1数据,请指定:
Panel1.instanceManager.instances[0].textbox.value
要读取AA2数据,请指定:
Panel1.instanceManager.instances[1].textbox.value
NOTE
从自适应表单中删除面板的所有实例时,要添加已删除面板的实例,请使用_panelName语法捕获面板的实例管理器,并使用实例管理器的addInstance API添加已删除的实例。 例如,_panelName.addInstance()。 它会添加已删除面板的一个实例。

使用表单模板中的重复子表单(XDP/XSD) using-repeating-subforms-from-form-template-xdp-xsd

可重复子表单类似于自适应Forms中的可重复面板。 在AEM Forms Designer中,执行以下步骤以创建重复的子表单:

  1. 在层级调色板中,选择要重复的子表单的父子表单。
  2. 在“对象”面板中,单击“子表单”选项卡,然后在“内容”列表中选择“流式”。
  3. 选择要重复的子表单。
  4. 在“对象”面板中,单击“子表单”选项卡,然后在“内容”列表中选择“已定位”或“已流动”。
  5. 单击“绑定”选项卡,并为每个数据项选择“重复子表单”。
  6. 要指定最小重复次数,请选择最小计数,然后在关联的框中键入一个数字。 如果将此选项设置为0,并且在数据合并时没有为子表单中的对象提供数据,则在呈现表单时不会放置子表单。
  7. 要指定子表单重复的最大次数,请选择“最大”,然后在相关框中键入一个数字。 如果未在“最大值”框中指定值,则子表单的重复次数将无限制。
  8. 要指定一组子表单重复次数,而不考虑数据量,请选择初始计数,然后在关联框中键入一个数字。 如果选择此选项,并且没有可用数据或存在的数据条目少于指定的初始计数值,则子表单的空实例仍会放置在表单上。
  9. 在父子表单中添加两个按钮 — 一个用于添加实例,另一个用于删除可重复子表单的实例。 有关详细步骤,请参阅生成操作
  10. 现在,将表单模板链接到自适应表单。 有关详细步骤,请参阅基于模板创建自适应表单
  11. 使用在第9步中创建的按钮添加和删除子表单。

附加的.zip文件包含一个示例可重复的子表单。

获取文件

使用XML架构(XSD)的重复设置 using-repeat-settings-of-an-xml-schema-xsd-br

您可以从XML架构和任何复杂类型元素的minOccours和maxOccurs属性创建可重复面板。 有关XML架构的详细信息,请参阅使用XML架构作为表单模型创建自适应表单

在以下代码中,SampleType面板使用minOccours和maxOccurs属性。

<?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="leaderName" type="xs:string" default="Enter Name"/>
                <xs:element name="assignmentStartDate" type="xs:date"/>
                <xs:element name="gender" type="GenderEnum"/>
                <xs:element name="noOfProjectsAssigned" type="IntType"/>
                <xs:element name="assignmentDetails" type="AssignmentDetails"
                                            minOccurs="0" maxOccurs="10"/>
            </xs:sequence>
        </xs:complexType>

        <xs:complexType name="AssignmentDetails">
            <xs:attribute name="name" type="xs:string" use="required"/>
            <xs:attribute name="durationOfAssignment" type="xs:unsignedInt" use="required"/>
            <xs:attribute name="numberOfMentees" type="xs:unsignedInt" use="required"/>
             <xs:attribute name="descriptionOfAssignment" type="xs:string" use="required"/>
             <xs:attribute name="financeRelatedProject" type="xs:boolean"/>
       </xs:complexType>
  <xs:simpleType name="IntType">
            <xs:restriction base="xs:int">
            </xs:restriction>
        </xs:simpleType>
  <xs:simpleType name="GenderEnum">
            <xs:restriction base="xs:string">
                <xs:enumeration value="Female"/>
                <xs:enumeration value="Male"/>
            </xs:restriction>
        </xs:simpleType>
    </xs:schema>

另请参阅 see-also

recommendation-more-help
fbcff2a9-b6fe-4574-b04a-21e75df764ab