Flowable 3.6.1 如何将表单中选择的字符串标识符赋值给sub-processes?

How to assign string identifiers selected in form to sub-processes in 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 但它的答案还没有被验证(我也无法验证它)。

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

但是试了半天,发现标识符串"A"(同B和c)只被当作一个TextNode,受让人是一个字符串标识符'"A"' 不是真正的标识符 'A'。当我调试我的 flowable 安装时,我在源代码 JsonIndexVariableType#setValue 上进行了评估,并构建了一个新的 ObjectNode : {"jsonValue":{"id":"A"} 并且它最后在 sub-process 实例中向我显示确切的用户 A

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


经过多次反复尝试,我终于找到了实现这个目标的解决方案。解决方案很简单,只需用 ${user.textValue()} 代替 ${user} 即可从 TextNode.

中提取真正的受让人标识符

REMEMBER,变量不是纯字符串值,它实际上是TextNode的一个实例,也就是说toString()方法会return ""<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 TaskGroovy 脚本,例如:

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

然后就可以assignee给${user}user这里已经是纯字符串了,和之前的方案不同)