添加迭代元素

在迭代元素中使用 do while 条件属性以在模板中创建循环,而不是复制并粘贴模板块来复制部分。
限制: “新功能”图标 迭代元素只在 V2 模板中提供。

开始之前

关于此任务

迭代通过两个阶段来处理已应用于它们或其子元素的查询。首先,在文档生成期间,将这些元素处理一次。其次,处理已应用于迭代元素的条件。如果条件为 true,那么将再次处理迭代元素及其子元素。 将继续处理各个部分,直到条件不再为 true 为止。

在第一个阶段中,条件中所使用的数据必须更改,以便使步骤数目有限。此条件就是使各个部分的处理结束而不是继续循环。在下面示例的第 5 步中,条件是 teamList 变量不为空。所以,只要有 teamList 变量的数据条目,该条件就为 true。当没有数据条目时,该条件为 false 并将结束重复。

要让查询执行多次,请在循环容器中添加动态数据源配置元素以强制初始化查询多次。

过程

  1. “迭代”图标 迭代元素添加至模板内容编辑器。
    注: 不能将迭代元素放入母版页。
  2. 选择要复制的模板部分,并将其拖到迭代元素中。
  3. 选择迭代元素。
  4. 在“属性”视图中,选择特定选项卡。
  5. do while 条件值中,单击配置图标。
  6. 选择脚本表达式选项卡。 无法在“简单值”选项卡中输入脚本,因为这会创建无限循环。
  7. 选择变量。 使用变量创建循环可确保应用循环达指定次数,或者使用此变量应用相同数量的数据值。
  8. 输入脚本。
  9. 单击确定
  10. 保存更改。

示例

创建要使用的团队成员列表:
  1. 创建名为 teamList 的外部变量。
  2. 创建名为 currentMember 的外部变量。
  3. 创建表元素并应用条件:
    1. “表”图标 表元素添加至模板内容编辑器。
    2. 输入 1 列和 2 行。
    3. 右键单击表元素,然后选择数据 > 编辑条件
    4. 选择 teamList 变量。
    5. 对于左侧的操作数,请选择 teamList 变量。
    6. 对于运算符,请选择不等于
    7. 对于右侧的操作数,请不要输入值。
    8. 单击添加。脚本结果为:teamList != ""
    9. 单击确定
  4. 在第一个单元格中,为列添加标题:
    1. “文本”图标 文本元素添加至单元格。
    2. 双击文本元素以打开内容编辑器。
    3. 输入 Team Member List 作为标题名称。
    4. 单击确定
    5. 在“属性”视图中,选择字体选项卡。
    6. 单击粗体属性。
    7. 选择 True,然后单击确定
  5. 添加迭代元素:
    1. 从“选用板”视图拖动 “迭代”图标 迭代元素,并将该元素放在表行之间。
    2. 选择迭代元素。
    3. 在“属性”视图中,为 do while 条件属性输入此脚本:teamList != ""
    4. 在迭代元素中添加两个 “容器”图标 容器元素。第一个容器用于计算列表中要用在当前行中的第一个名称。第二个容器用于结束循环以免不必要地继续。
    5. 将第二行及其内容拖到迭代元素中,并将其放在容器元素后面。
  6. 将变量分配给第一个容器元素:
    1. 右键单击第一个容器元素。
    2. 选择数据 > 编辑分配
    3. 单击添加
    4. 选择 currentMember 变量,然后单击确定
    5. 选择脚本表达式选项卡。
    6. 选择 teamList 变量,然后输入脚本:
      var pos = teamList.indexOf( ",");
      
      if ( pos >=0)
      {
         // get the first member ( till the first comma)
          teamList.substr( 0, pos);
      }
      else
      {
          // last member
          teamList;
      }
    7. 单击确定,再次单击确定
  7. 将变量分配给第二个容器元素:
    1. 右键单击第二个容器元素。
    2. 选择数据 > 编辑分配
    3. 单击添加
    4. 选择 teamList 变量,然后单击确定
    5. 选择脚本表达式选项卡。
    6. 选择 teamList 变量,然后输入脚本:
      var pos = teamList.indexOf( ",");
      
      if ( pos >=0 && pos < teamList.length)
      {
         // get the first author ( till the first comma)
          teamList.substr( pos + 1);
      }
      else
      {
          // last member, remove it
          ""
      }
  8. currentMember 变量从“大纲”视图拖到第二行中的单元格。
  9. 测试输出。

反馈