首页 > 解决方案 > 如何将表单中选择的字符串标识符分配给Flowable 3.6.1中的子流程?

问题描述

我检查了这个主题:https ://forum.flowable.org/t/how-to-assign-as-sub-process-initiators-users-groups-that-have-been-selected-in-a-form /1429但它的答案尚未得到验证(我也无法验证)。

我想要做的只是构建一个简单的流程,其中包含动态数量的子流程,将根据开始表单中的选择动态指定受让人。实际上,子流程的数量与开始形式的选择完全相同。例如,我选择了 3 个用户标识符 A、B、C,将有 3 个子流程,一个分配给 A,一个分配给 B,另一个分配给 C。

但是,经过长时间的尝试,我发现标识符字符串“A”(与B和c相同)仅被视为a TextNode,而受让人是字符串标识符“A”而不是真正的标识符“A”。当我调试我的可流动安装时,我在源代码中进行了评估并使用:{“jsonValue”:{“id”:“A”}JsonIndexVariableType#setValue构建了一个新的,它最终向我展示了子流程实例中的确切用户。ObjectNodeA

我很想知道实现这一目标的实用方法,任何帮助将不胜感激。


在此处输入图像描述 在此处输入图像描述

标签: flowable

解决方案


经过多次反复尝试,我终于找到了实现这一目标的解决方案。解决方案很简单,只需放置${user.textValue()}而不是${user}TextNode.

请记住,该变量不是纯字符串值,它实际上是 的一个实例TextNode,这意味着toString()方法将返回""<id>""(双引号导致无法找到合适的受让人)。


源代码位于:

org.flowable.engine.impl.bpmn.behavior.UserTaskActivityBehavior#handleAssignments( TaskService taskService, String assignee, String owner, List<String> candidateUsers, List<String> candidateGroups, TaskEntity task, ExpressionManager expressionManager, DelegateExecution execution, ProcessEngineConfigurationImpl processEngineConfiguration)


另一种方法是使用Script Task,Groovy脚本,例如:

execution.setVariable("user", user.textValue())

然后你可以分配给${user}user这里已经是纯字符串,这与以前的解决方案不同)。


推荐阅读