组件中的任何数据都会保存为<context>
变量。变量可根据需要在组件的工作流或步骤范围内声明和初始化:
<context>
<param name="Title" type="string">Please choose one</param>
</context>
可用数据类型:字符串
、布尔
、双
、长
和对象
(默认类型)。
组件示例
使用setvar
操作来操作数据。该操作还可用于声明和设置未声明的变量。
<setvar id="next_step">
<context_of>workflow</context_of>
<!-- possible values: 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 #{step_name} with description: #{step_description}</param>
</context_update>
</setvar>
- 通过 <context_of> 元素,可以设置变量的存储作用域。当你想在 "root"、"user_session "或 "global "作用域中存储数据时,就可以使用该操作。使用这些作用域时,请注意变量的命名。确保使用相同变量名的其他组件/工作流不会产生副作用(尤其是在重复使用访问这些作用域的组件时)。
提示和技巧:在组件间传递数据时,通常应在finish_workflow
操作中使用输出参数。在这种情况下,输出将在后续组件的起始步骤的步骤作用域中可用。只有当根作用域不够用,且管理输出参数变得过于复杂时,才使用根作用域。
上述示例还说明了如何访问数据变量:
在context_update
标记中,使用相同的 setvar 操作设置了两个变量。
- 第一个参数
current_step_index
是通过访问上下文变量#{current_step}
并将其递增 1 来设置的。 - 第二个变量
string_concatshows 展示
了与现有上下文变量进行字符串连接的示例。
访问数据变量的方法是将变量名括起来,以"#{"开头,以"}"结尾。
- 最后,特殊作用域
user_session
将全局保存该值,直到用户注销。即使用户离开工作流并进入同一个或另一个工作流后,也可以访问该值。可以使用#{user_session::my_value}
访问该值。
任务
作业 1:让我们测试一下根上下文是如何工作的:
- 使用
setvar
操作可将用户的选择保存在根变量选择
中。 - 在工作流程中插入 "代码比较 "组件。
- 将
#{choice}
输入组件配置输入框 "标签 -> 组件标题"。如果运行工作流程,您选择的值将显示在代码比较组件的标题中。 - 试一试,确保 "代码比较 "组件中的选择正确无误。
作业 2:如前所述,根上下文应少用并包含风险,尤其是在同一工作流中重复使用组件时。还原您之前所做的更改(您可以在工作流程面板中的发布工作流程选项旁选择旧版本)或更改现有代码。
- 将选择保存在工作流程范围中。
- 将该变量的内容作为
finish_workflow
操作的输出参数传递出去。 - 将输出参数放入 "代码比较 "组件的配置面板,并测试其是否有效。
下载组件(作业前)
帮助和资源
setvar
操作的文档。finish_workflow
操作的文档。
解决方案说明
如您所见,您甚至可以在配置面板中使用上下文变量。这可以帮助你根据用户之前的操作来配置组件。
下载带根变量的解决方案
下载带输出参数的解决方案
常见问题
问题我尝试插入一个与 "代码比较 "不同的组件,但标题现在显示的是#{initialChoice}
(或其他变量名),而不是变量的实际内容。为什么会这样?
请回答:并非所有标准组件的编写方式都支持将变量立即评估到布局中。你可以改变任何组件使其工作,但这涉及到用户界面和组件配置知识,我们将在以后的课程中讨论。代码比较 "组件与其他一些组件的不同之处在于,代码比较组件将配置值直接插入映射中,而其他组件则用配置值初始化一个上下文变量。让其他组件也能这样做的一个简单方法是将配置值直接插入映射或布局中,例如
<mapping>
<ui_element name="Topic">
<param name="content">§{configuration.labels.value.title.value}§</param>
</ui_element>
</mapping>
现在,您已经学完了第三课。下一课将深入探讨规则表达式。