• 關于iMatrix平臺流程引擎之辦理人設置進一步觀點

    1
    Java .NET XML C/C++ iMatrix平臺 1122 次瀏覽
      學習了幾天iMatrix平臺的功能,自己有幾分見解,在這里跟大家分享下。
    1)        流程設計器設置:
         
       可以有四種配置:文檔創建人、上一環節辦理人指定、文檔字段中指定的人員、按條件篩選。
    2)        辦理人設置的監聽類:
      xml中配置監聽類,如下:
    <task name="填單"g="251,75,80,40">
        <assignment-handlerclass="com.norteksoft.wf.engine.core.AssignmentHandler"/>
             … … … …
    </task>
      監聽類AssignmentHandler實現jbpm的org.jbpm.api.task.AssignmentHandler接口
    public classAssignmentHandler implements org.jbpm.api.task.AssignmentHandler
    {
    … … … …
    //根據流程設計器配置的辦理人,獲得辦理人列表:
    candidates = TransactorConditionHandler.processCondition(conditions,execution,paramMap);
    … … … …
    if(candidates.size() == 1){
    //將獲得的辦理人設置到jbpm任務中
         assignable.setAssignee(candidates.iterator().next());
    }else if(candidates.size() == 0){
          //沒有辦理人時拋出異常信息
         throw newWorkflowException(WorkflowException.NO_TRANSACTOR);
    }else{
         for(String candidate :candidates){
         //將獲得的辦理人設置到jbpm任務的辦理人候選人列表中
                assignable.addCandidateUser(candidate);
         }
    }
    … … … …
    }
    我們再來看看TransactorConditionHandler.processCondition的實現:
    publicstatic  Set<String>processCondition(Map<TaskTransactorCondition, String> conditions,OpenExecution execution,Map<String,String> param){
    … … … …
    if("${documentCreator}".equals(userCondition)){
         //文檔創建人,即為發起實例的人的登錄名
         candidates.add(param.get(DOCUMENT_CREATOR));
      }else if("${previousTransactorAssignment}".equals(userCondition)){
         //上一環節辦理人指定,當是這種情況時,需要彈出選人界面讓上一環節辦理人選擇該環節的辦理人
         candidates.add(CommonStrings.TRANSACTOR_ASSIGNMENT);
      }else if(userCondition.startsWith("${field[")){
         //文檔字段中指定//${field[name_zn[name_en]]}
         … … … …
    }else{
        //按條件篩選
    … … … …
    }
    }
    生成任務時的處理方式是,根據jbpm任務生成imatrix的任務實體:
    TaskService.java的generateTask方法:
    public void generateTask(WorkflowInstance instance, StringexecutionId, String parentExecutionId){
      … … … …
      for(org.jbpm.api.task.Tasktask : jbpmTasks){
                … … … …
                if(task.getAssignee()== null){//任務有多個辦理人
                         //獲得jbpm任務的候選人列表,此處獲得的人員列表為監聽類AssignmentHandler中addCandidateUser中的人員
    Iterator<ParticipationImpl> it =((TaskImpl)task).getParticipations().iterator();
    … … … …
    while(it.hasNext()){
         //創建imatrix的任務實體
         wfTask = createTask(instanceId, task.getExecutionId(),it.next().getUserId(), task.getActivityName(),groupNum);
    //審批任務有多個辦理人,且流程設計器中設置為多人辦理時,將imatrix的認為設置為待領取
         if(!wfTask.getMoreTransactor()){                                                                                                     wfTask.setActive(TaskState.DRAW_WAIT.getIndex());
         }
    … … … …
    }else{//任務只有一個辦理人
         tasks.add(createTask(instanceId, task.getExecutionId(),task.getAssignee(), task.getActivityName(),groupNum));
    }
    }
    }

    相似問題

    相關經驗

    相關資訊

    相關文檔

  • sesese色