JBoss Community

Re: Human task : assign the good task to the launcher of a processInstance

created by Sandra Renaud in jBPM - View the full discussion

I think I find a way to retrieve the good task for my Requestor, but an upstream problem appears :

 

First the way to start the good task :

 

                               //Now the PM_PL process his task (it is already complete in reality)
                              List<String> groups = new ArrayList<String>();
                              groups.add(requestor.getRole());
                              System.out.println("Groups : ");
                              for(String grp : groups){
                                        System.out.println(" - "+grp);
                              }
  
                              BlockingTaskSummaryResponseHandler taskSummaryResponseHandler = new BlockingTaskSummaryResponseHandler();
                              amsKnowledgeSession.getClient()
                                                                                .getTasksAssignedAsPotentialOwner(requestor.getName(), groups, "en-UK", taskSummaryResponseHandler);
                              List<TaskSummary> potentialTasks = taskSummaryResponseHandler.getResults();
                              TaskSummary requestorTask = null;
                              for(TaskSummary task : potentialTasks){
                                        System.out.println("PM_PL can execute task " + task.getName() + " (" + task.getId() + " : " + task.getDescription() + ")");
                                        if(process.getId() == task.getProcessInstanceId()){
                                                  System.out.println("The task "+task.getId()+" "+task.getName()+" is the one the requestor have to take");
                                                  requestorTask = task;;
                                        }
                              }
                              BlockingTaskOperationResponseHandler taskOperationResponseHandler = new BlockingTaskOperationResponseHandler();
                              amsKnowledgeSession.getClient().start(requestorTask.getId(), requestor.getName(), taskOperationResponseHandler);
                              Thread.sleep(60000);
                              System.out.println("The PM_PL has well finish his task : call to complete");
                              amsKnowledgeSession.getClient().complete(requestorTask.getId(), requestor.getName(), null, taskOperationResponseHandler);

 

The problem now is that each task has the same processInstanceId, processSessionId and workItemId in the database. However I start a new KnowledgeSession and a new process each time :

 

            KnowledgeBase kbase = readKnowledgeBase();
            StatefulKnowledgeSession ksession = kbase.newStatefulKnowledgeSession();
            KnowledgeRuntimeLogger logger = KnowledgeRuntimeLoggerFactory.newThreadedFileLogger(ksession, "/log/loggerFile.log", 1000);
            HornetQHTWorkItemHandler hornetQHTWorkItemHandler = new HornetQHTWorkItemHandler(ksession);
            ksession.getWorkItemManager().registerWorkItemHandler("Human Task", hornetQHTWorkItemHandler);
            
            // start a new process instance
            Map<String, Object> params = new HashMap<String, Object>();
            params.put("userId", requestor.getName());
            params.put("userGroup", requestor.getRole());
            params.put("flowId", getFlowEntity().getFlowId());
  
            ProcessInstance process = ksession.startProcess("com.st.ams.flow.npl", params);
            System.out.println("process = "+process.getProcessId()+" : "+process.getProcessName()+" : state("+process.getState()+")");
            SystemEventListenerFactory.setSystemEventListener(new SystemEventListener());

 

If you have a little clue to help me progress...

 

Thanks

Reply to this message by going to Community

Start a new discussion in jBPM at Community