组件中的任何数据都保存为 <context> 变量。变量可以在组件的工作流或步骤范围内声明和初始化,具体取决于您需要它们的位置:

<context> 
    <参数名称=“标题”类型=“字符串”>请选择一个</param>
</context>

可用的数据类型: string、 bool、 long  double和 。 object

注意最佳做法始终是指定数据类型。

示例组件

使用操作  setvar 数据。此操作还可用于声明和设置未声明的变量。

<setvar id=“next_step”>
    <context_of>workflow</context_of>       
<!--可能的值:step、workflow、root、user_session、global -->
    <context_update>
        <param name=“current_step_index” type=“long”>#{current_step} + 1</param>
        <param name=“string_concat” type=“string”>步骤 #{step_name} 并带有说明: #{step_description}</param>
    </context_update>
</setvar>
  • <context_of> 元素允许您设置变量的存储范围。每当要在“根”、“user_session”或“全局”范围内存储数据时,都会使用此操作。使用这些作用域时,请小心变量命名。确保使用相同变量名称的其他组件/工作流不会导致副作用(尤其是在重用访问这些范围的组件时)

提示和技巧:在组件之间传递数据时,通常应该在操作中使用 finish_workflow 输出参数。在这种情况下,输出将在后续组件的开始步骤的步骤范围内可用。仅当根作用域对您来说还不够,并且管理输出参数变得过于复杂时,才使用根作用域。

上面的示例还显示了如何访问数据变量:

在标记中 context_update ,使用相同的 setvar 操作设置了两个变量。

  • 第一个参数 current_step_index 是通过访问上下文变量 #{current_step} 并将其递增 1 来设置的。
  • 第二个变量 string_concat显示了字符串与现有上下文变量的连接示例。

访问数据变量的工作原理是将其名称括起来,以 “#{” 开头,以 “}”结尾。

  • 最后,特殊范围 user_session 将全局保存该值,直到用户注销。即使在用户离开工作流并进入相同或另一个工作流后,也可以访问它。可以使用 #{user_session::my_value}访问它。

📌分配

作业 1:让我们测试根上下文的工作原理:

  • 使用该 setvar 操作将用户的选择保存在根变量 choice中。
  • 在工作流中插入“代码比较”组件。
  •  #{choice} 在组件配置输入字段“Labels -> Component Title”中输入。如果运行工作流,则所选值应显示在代码比较组件的“标头”中。
  • 尝试一下,并确保在“代码比较”组件中正确显示该选项。

任务 2:如前所述,应谨慎使用根上下文,并包含风险,尤其是在同一工作流中重用组件时。还原之前所做的更改(可以在工作流面板的“发布工作流”选项旁边选择较旧的版本)或更改现有代码。

  • 请改为将选项保存在工作流范围内。
  • 将该变量的内容作为操作的 finish_workflow 输出参数传递。
  • 将输出参数放入“代码比较”组件的配置面板中,并测试它是否有效。

下载组件(预分配)

帮助和资源

  • 操作的 setvar 文档。
  • 操作的 finish_workflow 文档。

解决方案说明

如您所见,您甚至可以在配置面板中使用上下文变量。这可以帮助您根据以前的用户操作配置组件。

 下载具有根变量的工作流(分配后) 

 下载具有输出参数的工作流(分配后)

常见问题

:我尝试插入一个与“代码比较”不同的组件,但标题现在显示 #{initialChoice} (或其他变量名称)而不是变量的实际内容。为什么?

答: 并非所有标准组件的编写方式都支持立即将变量计算到布局中。您可以更改任何组件以使其正常工作,但这涉及用户界面和组件配置知识,我们将在后面的课程中讨论。“代码比较”组件与其他一些组件的区别在于,代码比较组件将配置值直接插入到映射中,而其他组件则使用配置初始化上下文变量。使此功能适用于其他组件的一种简单方法是将配置值直接放入映射或布局中,例如:

<mapping>
    <ui_element name=“Topic”>
        <参数名称=“content”>§{configuration.labels.value.title.value}§</param>
    </ui_element>
</mapping>

现在你已经完成了第三课。下一课将深入探讨规则表达式。