2015-05-04 24 views
1

我使用的是JBPM 5.4,我可以爲特定用戶獲取分配的任務 和候選任務。jbpm 5.4完成特定用戶的任務

我想知道我怎樣才能爲用戶完成的任務,他的輸出

List<TaskSummary> tasks = taskSummaryResponseHandler.getResults(); 
finsihTask(taskId,"Mahmoud"); 

responseHandler.waitTillDone(1000); 
System.out.println("looping on mahmoud tasks "+tasks.size()); 

for(TaskSummary taskSummary : tasks){ 
    System.out.println("status is "+taskSummary.getStatus()); 
    System.out.println("created by "+taskSummary.getCreatedBy()); 
    System.out.println("created date "+taskSummary.getCreatedOn()); 

    if("InProgress".equalsIgnoreCase(taskSummary.getStatus().name())){ 
     System.out.println("user will finish task "+taskSummary.getName()); 
     finsihTask(taskSummary.getId(), "Mahmoud"); 
    } 

    if("Reserved".equalsIgnoreCase(taskSummary.getStatus().name())){ 
     System.err.println("user will take task "+taskSummary.getName()); 
    } 
} 

回答

0

您可能實現一個ProcessEventListener。 afterNodeLeft方法應在任何節點完成後執行,因此如果您正在查找特定節點和/或用戶,則可能需要添加一些檢查。

public class CustomProcessEventListener implements ProcessEventListener {  

    public void afterNodeLeft(ProcessNodeLeftEvent event) { 
     NodeInstance ni = event.getNodeInstance(); 

     //Only check for User Tasks 
     if (ni instanceof HumanTaskNodeInstance) { 
      HumanTaskNodeInstance htni = (HumanTaskNodeInstance)ni; 
      Map<String, Object> results = htni.getWorkItem().getResults(); 

      //Get the userId of the actor 
      String actorId = (String)htni.getWorkItem().getResult("ActorId"); 

      //You can filter for a specific user 
      if (actorId.equals("YOUR_USER")) { 
       //TODO: cycle through results map to find 
      } 

      //You can also certain nodes 
      if (htni.getNodeName().equals("NODE_NAME") { 
       .... 
      } 
     } 
    } 

    //other unimplemented methods not shown 
} 

當您創建它時,您需要將偵聽器註冊到會話中。

KieSession ksession = //however you gain access to your ksession 
ksession.addEventListener(new CustomProcessEventListener());