Camunda:如何将json文件数据导入嵌入表单?

时间:2018-02-05 13:16:16

标签: javascript angularjs json camunda camunda-modeler

我有json文件,其中我从我的数据库中重写数据,所以在其中我有几个json对象(我​​的意思是我的json文件中有json数组)我想为一个json对象制作一个表单我使用embedde表单我的意思是用户任务表单和角度ui,这是我的代码: v

ar jsonFile;
inject([ ‘$scope’, ‘$http’, ‘$location’, ‘Uri’, function($scope, $http, $location, Uri) {

    camForm.on('form-loaded', function () {
        $http.get(Uri.appUri("engine://engine/:engine/process-definition/key/my-process-key/startForm")).success(function(result){
            var contextPath = result.contextPath + '/forms/';       
            var filePath = contextPath + 'data.json';
            $.getJSON(filePath, function(json) {
                jsonFile = json;
            });
        }); 
    });
   var jsonData1=JSON.stringify(jsonFile); 
   var rawData=JSON.parse(jsonData1);
    var documentData = $scope.documentData = {
    "id":rawData[i]["id"],
    "organizationNameGE":rawData[i]["organizationNameGE"],
    "organizationNameEN":rawData[i]["organizationNameEN"],
    "cardNumber":rawData[i]["cardNumber"]
    };

camForm.on('form-loaded', function() {

      camForm.variableManager.createVariable({
        name: 'documentData',
        type: 'json',
        value: documentData
      });

    });

但它抛出异常,我有意想不到的输入结束,但当我用自定义数据替换文件数据时,它工作得很好,我在这里缺少什么? 我怎样才能一次为每个json数据对象生成一个表单? 我也试过这个: 我在java中的用户任务进程中添加了TaskListener,它看起来像这个

public class FormListener implements TaskListener {
    public void notify(DelegateTask arg0) {

        long id = (Long) arg0.getVariable("id");
        String organizationNameGE=(String) arg0.getVariable("organizationNameGE");
        String organizationNameEN=(String) arg0.getVariable("organizationNameEM");
        String cardNumber=(String) arg0.getVariable("cardNumber");
        arg0.setVariable("id",id);
        arg0.setVariable("organizationNameGE",organizationNameGE);
        arg0.setVariable("organizationNameEN",organizationNameEN);
        arg0.setVariable("cardNumber",cardNumber);


    }
}

我在嵌入式表单脚本中也有这个代码:

inject(['$scope', '$http', function($scope, $http) {
    var variableManager = camForm.variableManager;

    // OnFormLoaded
    camForm.on('form-loaded', function() {
      // Fetch Variables
      // - General
      variableManager.fetchVariable('processInitiator'); // set by the engine
      // - Process
      variableManager.fetchVariable('id'); // set in an earlier form
      variableManager.fetchVariable('organizationNameGE');
      variableManager.fetchVariable('organizationNameEN');
      variableManager.fetchVariable('cardNumber');
    });

    // OnVariablesFetched
    camForm.on('variables-fetched', function() {
      // After the variables are fetched, bind the value to the angular scope
      // - General
      $scope.processInitiator = variableManager.variable('processInitiator').value;

      // - Process
      $scope.id = variableManager.variable('id').value;
      $scope.organizationNameGE= variableManager.variable('organizationNameGE').value;
      $scope.organizationNameEN = variableManager.variable('organizationNameEN').value;
      $scope.cardNumber=variableManager.variable('cardNumber').value;

    });

但它确实; t给了我任何结果,我的意思是它像这样拖出异常 SPIN / JACKSON-JSON-01004无法找到'id' 我应该改变什么来使我的代码工作?

1 个答案:

答案 0 :(得分:0)

只需创建一个在用户任务开始时执行的执行列表器,就可以在图中创建它。在Listner实现中,将JSON读作键值对,将键设置为camunda变量名和值。现在在表单中给出cam变量作为Listner实现中给出的键。您可以在JavaScript / Java中实现Listner。