jbpm的收文(包括会签的思想)

先定义流程
processdefinition.xml

<?xml version="1.0" encoding="UTF-8"?>

<process-definition
  xmlns=""  name="收文">

   <start-state name="开始">
   <task name="填写收文单">
     <controller>
            <variable name="docreceiveId" access="read,write,required" mapped-name="收文单ID"></variable>
         </controller>
         <assignment class="org.springmodules.workflow.jbpm31.JbpmHandlerProxy" config-type="bean">
            <factoryKey>jbpmConfiguration</factoryKey>
           <targetBean>receiveStartAssignment</targetBean>
         </assignment>
  </task>
      <transition name="提交给办公室领导" to="填写拟办意见"></transition>
   </start-state>
   <task-node name="填写拟办意见">
     <task name="拟办意见">
         <controller>
            <variable name="docreceiveId" access="read" mapped-name="拟办意见ID"></variable>
         </controller>
         <assignment class="org.springmodules.workflow.jbpm31.JbpmHandlerProxy" config-type="bean">
            <targetBean>receiveSetAssignment</targetBean>
            <factoryKey>jbpmConfiguration</factoryKey>
         </assignment> 
      </task>
      <transition name="提交" to="审核"></transition>
      <transition name="终止收文" to="end1">
      <action class="org.springmodules.workflow.jbpm31.JbpmHandlerProxy">
         <targetBean>receiveStopAction</targetBean>
            <factoryKey>jbpmConfiguration</factoryKey>
         </action>
      </transition>
      <transition name="处理" to="处理"></transition>
   </task-node>
   <task-node name="审核" signal="last-wait" create-tasks="false"  end-tasks="true">
   <task name="审核人审核">
     <controller>
            <variable name="docreceiveId" access="read" mapped-name="审核ID"></variable>
         </controller>
  </task>
    <event type="node-enter">
         <action class="org.springmodules.workflow.jbpm31.JbpmHandlerProxy" config-type="bean">
         <targetBean>receiveAuditAction</targetBean>
            <factoryKey>jbpmConfiguration</factoryKey>
         </action>
      </event> 
      <event type="task-end">
         <action class="org.springmodules.workflow.jbpm31.JbpmHandlerProxy" config-type="bean">
         <targetBean>receiveAuditEndAction</targetBean>
            <factoryKey>jbpmConfiguration</factoryKey>
         </action>
      </event>
      <transition name="不同意" to="end1">
        <action class="org.springmodules.workflow.jbpm31.JbpmHandlerProxy">
         <targetBean>receiveNotApproveAction</targetBean>
             <factoryKey>jbpmConfiguration</factoryKey>
          </action>
      </transition>
      <transition name="同意并返回" to="填写拟办意见"></transition>
   </task-node>
   <task-node name="处理">
   <task name="处理结果">
     <controller>
            <variable name="docreceiveId" access="read" mapped-name="处理ID"></variable>
         </controller>
         <assignment class="org.springmodules.workflow.jbpm31.JbpmHandlerProxy" config-type="bean">
            <targetBean>receiveDealAssignment</targetBean>
            <factoryKey>jbpmConfiguration</factoryKey>
         </assignment>
  </task>
      <transition name="提交给归档人" to="归档"></transition>
   </task-node>
   <task-node name="归档">
   <task name="归档文件">
   <controller>
            <variable name="docreceiveId" access="read" mapped-name="归档ID"></variable>
         </controller>
        <assignment class="org.springmodules.workflow.jbpm31.JbpmHandlerProxy" config-type="bean">
            <targetBean>receiveDocumentAssignment</targetBean>
            <factoryKey>jbpmConfiguration</factoryKey>
         </assignment>
         </task>
      <transition name="结束" to="end1">
        <action class="org.springmodules.workflow.jbpm31.JbpmHandlerProxy">
         <targetBean>receiveEndAction</targetBean>
             <factoryKey>jbpmConfiguration</factoryKey>
          </action>
      </transition> 
   </task-node>
   <end-state name="end1"></end-state>
</process-definition>


其中“审核人审核”包括会签的思想
ReceiveAuditAction.java(实现自actionhandle这个接口)


public void execute(ExecutionContext arg0) throws Exception {
Token token = arg0.getToken();  
TaskMgmtInstance tmi = arg0.getTaskMgmtInstance();  
TaskNode taskNode = (TaskNode)arg0.getNode();  
Task task = taskNode.getTask("审核人审核");

String docreceiveId=arg0.getContextInstance().getVariable("docreceiveId").toString();
Docreceive docreceive=docreceiveDAO.findById(Integer.valueOf(docreceiveId));
String auditorid = docreceive.getAudtiors();
String dptid = docreceive.getDpts();
String[] dpt = dptid.split(",");
String value = auditorid;
for(int i=0;i<dpt.length;i++)
{
String strsql = "from TUser as u where u.department.id ='"+ dpt[i]+"' and u.role.roleName like '%内勤'";
List list =userDAO.getSqlresult(strsql);
String [] manager=new String[list.size()];
int j=0;
for (Iterator iter = list.iterator(); iter.hasNext();) {
TUser user = (TUser) iter.next();
manager[j++]=user.getId().toString();
}
tmi.createTaskInstance(task, token).setPooledActors(manager);
}
String[] auditors = value.split(",");
for(int i=0;i<auditors.length;i++)
{
String s = auditors[i];
String[] temp = s.split("-");
String auditor;
if(temp.length==1)
{
auditor = s;
}
else
{
auditor = temp[1];
}
tmi.createTaskInstance(task, token).setActorId(auditor);
}
}
ReceiveAuditAction决定了审核领导和审核部门的执行人
其中tmi.createTaskInstance(task, token).setPooledActors(manager);设定了流程执行人的候选人;而tmi.createTaskInstance(task, token).setActorId(auditor);设定了流程的执行人。


ReceiveAuditEndAction.java也实现了ActionHandler接口
public void execute(ExecutionContext arg0) throws Exception {
String docreceiveId=arg0.getContextInstance().getVariable("docreceiveId").toString();
Docreceive docreceive=docreceiveDAO.findById(Integer.valueOf(docreceiveId));
Token token = arg0.getToken();
TaskMgmtInstance tmi = arg0.getTaskMgmtInstance();
Collection<TaskInstance> unfinishedTasks = tmi.getUnfinishedTasks(token); 
Object variable = arg0.getVariable("selectedTransition");
String selectedTransition;
if (variable == null)

throw new RuntimeException("Jbpm transition error: user selected transition is null!"); 
}
else

// 获取当前TaskInstance选择的路径 
selectedTransition = variable.toString(); 
}
//如果用户选择的路径是流程定义中制定的不通过的路径,则自动完成余下所有的会签Task并转到相应路径 
if (selectedTransition.equals("不同意"))

for (TaskInstance unfinishedTaskInstance : unfinishedTasks)

// 把被结束的没有完成的TaskInstance的ActorId改为automatic complete 
if(!unfinishedTaskInstance.hasEnded())

unfinishedTaskInstance.setActorId("automatic complete"); 
unfinishedTaskInstance.end("不同意"); 

}
}
else
{
boolean b = false;
if(unfinishedTasks.size()==0)
{
arg0.getNode().leave(arg0, "同意并返回");
}
}
}
重点是
(1)selectedTransition是在执行流程时定义的jbpmBus.inOpinion("审核", taskid);

public boolean inOpinion(String opinionResult,String tid)
{
JbpmContext jbpmContext=jbpmConfiguration.getCurrentJbpmContext();
if(jbpmContext==null)
{
jbpmContext=jbpmConfiguration.createJbpmContext();
}
try {
    TaskInstance ti=jbpmContext.getTaskMgmtSession().getTaskInstance(Long.parseLong(tid));
    ti.setVariable("selectedTransition", opinionResult);
    ti.end(opinionResult);
    return true;

} catch (Exception e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
finally{
jbpmContext.close();
}
return false;
}
"selectedTransition"其实就是当先选择的transition的名字
(2)arg0.getNode().leave(arg0, "同意并返回");
在于一旦所有的审核领导和审核部门都已审核,那么就进入下一个流程了


哈哈,终于说完了,也不知道说的还明白,第一次写博客,敬请原谅!!

你可能感兴趣的:(xml,jbpm)