2016-09-22 12 views
0

Camundaで使用しているコードでアクティブなタスクのリストを取得するにはどうすればよいですか?Camunda:アクティブタスクを取得

私はすでにこの回答 "How to query the position of a process instance?"を見ていますが、 "processInstanceId"とは何かを理解できず、このメソッドを動作させるためにはどうすればよいのでしょうか。あなたの助けを事前に

package org.camunda.bpm; 

import java.util.HashMap; 
import java.util.List; 
import java.util.Map; 
import org.camunda.bpm.engine.ProcessEngine; 
import org.camunda.bpm.engine.RepositoryService; 
import org.camunda.bpm.engine.RuntimeService; 
import org.camunda.bpm.engine.runtime.ProcessInstance; 
import org.camunda.bpm.model.bpmn.BpmnModelInstance; 
import org.camunda.bpm.model.xml.instance.ModelElementInstance; 

public class AllActiveActivities { 

public Map<String, String> getAllActiveActivities(String processInstanceId) { 
// get engine services 
ProcessEngine processEngine = BpmPlatform.getDefaultProcessEngine() 
RuntimeService runtimeService = processEngine.getRuntimeService(); 
RepositoryService repositoryService = processEngine.getRepositoryService(); 

// get the process instance 
ProcessInstance processInstance = 
    runtimeService.createProcessInstanceQuery() 
     .processInstanceId(processInstanceId) 
     .singleResult(); 

HashMap<String, String> activityNameByActivityId = new HashMap<String, String>(); 

// get all active activities of the process instance 
List<String> activeActivityIds = 
    runtimeService.getActiveActivityIds(processInstance.getId()); 

// get bpmn model of the process instance 
BpmnModelInstance bpmnModelInstance = 
    repositoryService.getBpmnModelInstance(processInstance.getProcessDefinitionId()); 

for (String activeActivityId : activeActivityIds) { 
    // get the speaking name of each activity in the diagram 
    ModelElementInstance modelElementById = 
     bpmnModelInstance.getModelElementById(activeActivityId); 
    String activityName = modelElementById.getAttributeValue("name"); 

    activityNameByActivityId.put(activeActivityId, activityName); 
} 

// map contains now all active activities 
return activityNameByActivityId; 
} 

} 

ありがとう:

は、ここで私は現在しようとしているコードです。

答えて

3

次の文は、すべてのアクティブなタスクを返します。

processEngine.getTaskService().createTaskQuery().active().list() 

あなたが.list()前の文に.processInstanceId(processInstanceId)を追加する必要があり、特定の実行中のプロセスに対応するすべてのアクティブなタスクを取得したい場合。 processInstanceIdは、プロセスインスタンスを識別するidです。プロセス/ワークフローを開始すると、一意のIDを持つプロセスインスタンスが作成されます。これらのidを取得するには、たとえば次の文を実行します。

int processInstanceId = processEngine.getRuntimeService() 
.createProcessInstanceQuery() 
.processDefinitionKey(processDefinitionKey) 
.singleResult() 
.getId() 

変数processDefinitionKeyはプロセス定義のXMLに設定されているIDです。

0

プロセスインスタンスは、プロセス定義の現在実行中の「インスタンス」です。 別の言い方をすれば、プロセスを開始するたびにプロセス "インスタンス"が作成されます。

したがって、任意のプロセス定義では、複数の「インスタンス」があり、各インスタンスにはアクティブな「タスク」が1つあります(サービスタスク、場合によってはタスク、時にはその他の待機状態タイマー)。

私があなたの質問に答える前に、私はあなたが取り出そうとしているものを理解する必要があります。

特定のプロセス定義のすべてのタスクを探していますか?そうであれば、これはすべての「インスタンス」のすべてのタスクに相当します。このために、すべてのインスタンスにプロセス定義を照会し、各インスタンスに対してすべてのタスクを照会します。

または、単一のインスタンスのタスクのみを探していますか?投稿したコードは単一のインスタンスのタスクを取得しますが、必要なクエリパラメータ(ビジネスデータ、プロセス変数、または単にプロセス定義など)と一致するよりもアクティブインスタンスのruntimeServiceをクエリして取得したインスタンスIDを渡す必要があります。

ご希望の場合は、具体的に達成しようとしていることをお知らせください。私たちが手助けできると確信しています。また、スタンドアロンのタスクをすることができ

よろしく、 グレッグ

関連する問題