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

[color=red]先定义流程
processdefinition.xml[/color]
<?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>


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

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);
}
}
[size=large]ReceiveAuditAction决定了审核领导和审核部门的执行人
其中tmi.createTaskInstance(task, token).setPooledActors(manager);设定了流程执行人的候选人;而tmi.createTaskInstance(task, token).setActorId(auditor);设定了流程的执行人。[/size]

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, "同意并返回");
}
}
}
[color=orange]重点是
(1)selectedTransition是在执行流程时定义的jbpmBus.inOpinion("审核", taskid);[/color]
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的名字
[color=orange](2)arg0.getNode().leave(arg0, "同意并返回");
在于一旦所有的审核领导和审核部门都已审核,那么就进入下一个流程了[/color]

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值