Activiti 7.0.0.SR1中getTaskFormKey方法的替代方法

时间:2019-06-08 18:00:32

标签: activiti

以前,我们使用activiti-5.15.1版本,并且具有formService.java类,因此下面的代码可以在其中工作。

FormService fs = ServiceFactory.getFormService();

fs.getTaskFormKey(task.getProcessDefinitionId(),task.getTaskDefinitionKey());

现在,我们正在升级activiti-7.0.0.SR1。但是没有FormService.java类。

我们尝试了ProcessDefinition类,并使用了getFormKey()方法,但该方法无法在其中使用。

我们正在寻找activiti-7.0.0.SR1中任务的获取表单密钥。 请提出实现此目标的方法。

1 个答案:

答案 0 :(得分:0)

formProperties存在于BpmnModel中,您可以访问它以获取它;

希望为您提供帮助:

package com.goahead.demoactiviti7.controller.service;

import org.activiti.bpmn.model.BpmnModel;
import org.activiti.bpmn.model.FlowElement;
import org.activiti.bpmn.model.FormProperty;
import org.activiti.bpmn.model.UserTask;
import org.activiti.engine.RepositoryService;
import org.activiti.engine.TaskService;
import org.activiti.engine.task.Task;
import org.springframework.beans.factory.annotation.Autowired;

import java.util.Collection;
import java.util.List;

public class FormService {

    @Autowired
    private TaskService taskService;

    @Autowired
    private RepositoryService repositoryService;

    public List<FormProperty> getFormPropertiesFromBpmn(String  processDefinitionId,String taskId) {
        BpmnModel bpmnModel = repositoryService.getBpmnModel(processDefinitionId);
        Collection<FlowElement> flowElementCollection = bpmnModel.getMainProcess().getFlowElements();
        Task task = taskService.createTaskQuery().taskId(taskId).singleResult();
        if (task == null) {
            System.out.println("taskid XXX is not existed.");
            return null;
        }
        String taskDefinitionKey = task.getTaskDefinitionKey();
        for (FlowElement flowElement: flowElementCollection) {
            if ("UserTask".equals(flowElement.getClass().getSimpleName()) && taskDefinitionKey.equals(flowElement.getId())) {
                return ((UserTask)flowElement).getFormProperties();
            }
        }
        return null;
    }
}