论坛首页 Java企业应用论坛

针对iMatrix平台流程引擎之办理人设置分析

浏览 1979 次
精华帖 (0) :: 良好帖 (0) :: 新手帖 (0) :: 隐藏帖 (0)
作者 正文
   发表时间:2013-07-19   最后修改:2013-07-29

 学习了几天iMatrix平台的功能,自己对iMatrix平台的流程引擎下的办理人设置有几点研究,在这里跟大家分享下。

 

1)流程设计器设置:




 
 

 

可以有四种配置:文档创建人、上一环节办理人指定、文档字段中指定的人员、按条件筛选。

 

2) 办理人设置的监听类:


         xml中配置监听类,如下:

 

<task name="填单" g="251,75,80,40">

 

    <assignment-handler class="com.norteksoft.wf.engine.core.AssignmentHandler"/>

 

         … … … …

 

</task>

 

          监听类AssignmentHandler实现jbpmorg.jbpm.api.task.AssignmentHandler 接口

 

public class AssignmentHandler implements org.jbpm.api.task.AssignmentHandler

 

{

 

… … … …

 

//根据流程设计器配置的办理人,获得办理人列表:

 

candidates = TransactorConditionHandler.processCondition(conditions, execution,paramMap);

 

… … … …

 

if(candidates.size() == 1){

 

//将获得的办理人设置到jbpm任务中

 

     assignable.setAssignee(candidates.iterator().next());

 

}elseif(candidates.size() == 0){

 

      //没有办理人时抛出异常信息

 

     thrownew WorkflowException(WorkflowException.NO_TRANSACTOR);

 

}else{

 

     for(String candidate : candidates){

 

     //将获得的办理人设置到jbpm任务的办理人候选人列表中

 

            assignable.addCandidateUser(candidate);

 

     }

 

}

 

… … … …

 

}

 

我们再来看看TransactorConditionHandler.processCondition的实现:

 

public static  Set<String> processCondition(Map<TaskTransactorCondition, String> conditions, OpenExecution execution,Map<String,String> param){

 

… … … …

 

if("${documentCreator}".equals(userCondition)){

 

     //文档创建人,即为发起实例的人的登录名

 

     candidates.add(param.get(DOCUMENT_CREATOR));

 

  }elseif("${previousTransactorAssignment}".equals(userCondition)){

 

     //上一环节办理人指定,当是这种情况时,需要弹出选人界面让上一环节办理人选择该环节的办理人

 

     candidates.add(CommonStrings.TRANSACTOR_ASSIGNMENT);

 

  }elseif(userCondition.startsWith("${field[")){

 

     //文档字段中指定//${field[name_zn[name_en]]}

 

     … … … …

 

}else{

 

    //按条件筛选

 

… … … …

 

}

 

}

 

       生成任务时的处理方式是,根据jbpm任务生成imatrix的任务实体:

 

   TaskService.javagenerateTask方法:

 

    public void generateTask(WorkflowInstance instance, String executionId, String parentExecutionId){

 

     … … … …


 

    for(org.jbpm.api.task.Task task : jbpmTasks){

 

            … … … …

 

            if(task.getAssignee() == null){//任务有多个办理人

 

                     //获得jbpm任务的候选人列表,此处获得的人员列表为监听类AssignmentHandleraddCandidateUser中的人员

 

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));

 

}

 

}

 

}

       

  • 大小: 75.8 KB
论坛首页 Java企业应用版

跳转论坛:
Global site tag (gtag.js) - Google Analytics