原先条件判断在主表单是可以正常的判断的,但用节点的表单就出现问题了。

出现下面错误:

       就起原因还是在complete里出现问题了。

      通过跟踪还是下面的代码出现报错

private void taskFormComplete(FlowTaskVo taskVo) {
    	if(taskVo.getValues() !=null && taskVo.getValues().containsKey("taskformvalues")) {//有任务节点表单
    		@SuppressWarnings("unchecked")
			Map<String , Object> taskformvalues = (Map<String, Object>) taskVo.getValues().get("taskformvalues");
    		taskService.complete(taskVo.getTaskId(),taskformvalues,true);//保存taskformvalues到变量表里
    	}
    	else {
    		taskService.complete(taskVo.getTaskId());
    	}
    }

其中 taskService.complete(taskVo.getTaskId(),taskformvalues,true);//保存taskformvalues到变量表里  这里报错了,看官方说明就是

void org.flowable.engine.TaskService.complete(String taskId, Map<String, Object> variables, boolean localScope)

localScope If true, the provided variables will be stored task-local, instead of process instance wide (which is the default for complete(String, Map)).

这里true跟通常缺省的还是不一样,所以应该要去掉这个参数或变成false,同时增加下面一句

taskService.setVariableLocal(taskVo.getTaskId(), "taskformvalues", taskformvalues);

这样既保留原来的功能,又能正常运行。如下:

/**
     * 任务节点有表单的操作
     *
     * @param taskVo
     */
    private void taskFormComplete(FlowTaskVo taskVo) {
    	if(taskVo.getValues() !=null && taskVo.getValues().containsKey("taskformvalues")) {//有任务节点表单
    		@SuppressWarnings("unchecked")
			Map<String , Object> taskformvalues = (Map<String, Object>) taskVo.getValues().get("taskformvalues");
    		taskService.setVariableLocal(taskVo.getTaskId(), "taskformvalues", taskformvalues);
    		taskService.complete(taskVo.getTaskId(),taskformvalues);//保存taskformvalues到变量表里
    	}
    	else {
    		taskService.complete(taskVo.getTaskId());
    	}
    }

效果图如下:

 利用节点表单里的表单内容money值来走不通的流程