2017-03-09 306 views
1

我在我们的应用程序中将Camunda引擎与Spring集成在一起。我想查找分配给正在运行的流程实例的每个活动任务的属性。我可以用下面的代码关于Camunda-Spring集成TaskDefinition对于活动任务是空的

List<Task> tasks = this.taskService.createTaskQuery().processInstanceId("12").list() 

获得任务实例,但如果我投的任务对象为TaskEntity然后用getTaskDefinition(),我得到null。 其他获取任务细节的方法是通过ProcessDefinitionEntity.getTaskDefinitions(),但它也会返回null

我该如何得到任务细节?

+1

你的目标是帮助吗? – jklee

+0

@jklee 在对工作流建模(在.bpmn文件中)期间,我在每个任务中添加了一些属性,我想访问这些属性以及当前活动任务的文档属性。 – Tejas

回答

1

以上回答给了我一个提示,但并没有完全解决问题,所以这里是我的代码,它是服务于此目的。 我在.bpmn文件usertask样子:

<bpmn:userTask id="Task_063x95d" name="Tech Task"> 
    <bpmn:documentation>SUCCESS,FAIL</bpmn:documentation> 
    <bpmn:extensionElements> 
    <camunda:inputOutput> 
     <camunda:inputParameter name="language">Java</camunda:inputParameter> 
     <camunda:outputParameter name="Platform">Linux</camunda:outputParameter> 
    </camunda:inputOutput> 
    <camunda:properties> 
     <camunda:property name="user" value="Test_User" /> 
    </camunda:properties> 
    </bpmn:extensionElements> 
    <bpmn:incoming>SequenceFlow_1xjoyjq</bpmn:incoming> 
    <bpmn:outgoing>SequenceFlow_028pkxo</bpmn:outgoing> 
</bpmn:userTask> 

我已经分析了.bpmn文件,然后就渲染它的元素与下面的代码

// Active tasks for currently running instanceId(input to below code) 
List<Task> tasks = this.taskService.createTaskQuery().processInstanceId(instanceId).list(); 

String documentation= null; 

for (Task task : tasks) 
{ 
//This gives [documentation][1] field. 
documentation = task.getDescription(); 

UserTaskImpl modelElementById = (UserTaskImpl) bpmnModelInstance.getModelElementById(tasks.get(0) 
    .getTaskDefinitionKey()); 
ExtensionElements childElementsByType2 = modelElementById.getExtensionElements(); 
Collection<ModelElementInstance> elements = childElementsByType2.getElements(); 
for (ModelElementInstance elem : elements) 
{ 
    //To access all properties. 
    if (elem instanceof CamundaPropertiesImpl) 
    { 
     CamundaPropertiesImpl camundaPropertiesImpl = (CamundaPropertiesImpl) elem; 
     Collection<CamundaProperty> camundaProperties = camundaPropertiesImpl.getCamundaProperties(); 
     for (CamundaProperty test : camundaProperties) 
     { 
      System.out.println("camunda property name :" + test.getCamundaName() + " $ " + test.getCamundaValue()); 
     } 

    } 
    else if (elem instanceof CamundaInputOutputImpl) 
    { 
     // To access input/output param 
     CamundaInputOutputImpl camundaInputOutputImpl = (CamundaInputOutputImpl) elem; 
     for (CamundaInputParameter test : camundaInputOutputImpl.getCamundaInputParameters()) 
     { 
      log.info("camunda input params name :" + test.getCamundaName() + " $ " + test.getTextContent()); 
     } 
     for (CamundaOutputParameter test : camundaInputOutputImpl.getCamundaOutputParameters()) 
     { 
      log.info("camunda output params name :" + test.getCamundaName() + " $ " + test.getTextContent()); 
     } 
    } 
} 
} 
2

有关读取属性和文档属性,请使用BPMN Model API

本示例使用elementId来读取两者。

String processDefinitionId = repositoryService.createProcessDefinitionQuery() 
.processDefinitionKey(DEFINITON_KEY).singleResult().getId(); 

BpmnModelInstance bpmnModelInstance = repositoryService.getBpmnModelInstance(processDefinitionId); 
ServiceTask serviceTask = (ServiceTask) bpmnModelInstance.getModelElementById(ELEMENT_ID); 

// Documentation, is a collection, but the modeler supports only one attribute 
Collection<Documentation> documentations = serviceTask.getDocumentations(); 

// Properties 
Collection<Property> properties = serviceTask.getProperties();