首页 > 解决方案 > 如何以嵌入式形式访问流程变量

问题描述

我想以嵌入式形式访问流程变量,但我无法这样做。我浏览了 https://docs.camunda.org/manual/7.8/reference/embedded-forms/javascript/examples/ 上的文档以及 https://github.com/camunda/camunda-bpm-的示例examples/tree/master/usertask/task-form-embedded-serialized-java-object我想我掌握了它,但是下面的代码不起作用,即使它看起来是 1:1 与文档。

也许问题是我试图访问的变量是 LinkedHashMap(mVariables = ['something': 'foo']在 Groovy 中创建)

以下代码片段在 Camunda 任务列表中没有显示任何内容。

<form role="form" name="form" xmlns="http://www.w3.org/1999/html">
    <script cam-script type="text/form-script">
        camForm.on('form-loaded', function() {
            camForm.variableManager.fetchVariable('mVariables');
        });
        camForm.on('variables-fetched', function() {
            $scope.mVariables= camForm.variableManager.variable('mVariables').value;
        });
    </script>

    <h1>{{mVariables.something}}</h1>
    <p ng-bind="mVariables.something"></p>
<form>

任何人都可以提供一个读取 LinkedHashMap 过程变量的最小工作示例吗?

标签: camunda

解决方案


实际上,LinkedHashMap 不能像我建议的那样通过。它写在本文档站点顶部的灰色框中:https ://docs.camunda.org/manual/7.8/reference/embedded-forms/java-objects/

我通过将 Map 拆分为单独的变量来解决我的问题,然后可以以嵌入式形式读取这些变量,如下所示:

<form role="form" name="form" xmlns="http://www.w3.org/1999/html">
    <script cam-script type="text/form-script">
        camForm.on('form-loaded', function() {
            camForm.variableManager.fetchVariable('mVariableFoo');
            camForm.variableManager.fetchVariable('mVariableBar');
        });
        camForm.on('variables-fetched', function() {
            $scope.mVariableFoo = camForm.variableManager.variable('mVariableFoo').value;
            $scope.mVariableBar = camForm.variableManager.variable('mVariableBar').value;
        });
    </script>

    <h1>{{mVariableFoo}}</h1>
    <p>{{mVariableBar}}</p>
<form>

推荐阅读