您的位置:首页 > 理论基础 > 计算机网络

一个美国老网络工程师,给年轻工程师的忠告

2009-05-05 17:51 316 查看
前段时间,刚刚完成一个动态会签的,现在有点空,补上思路 

流程图:



 
 流程文件:

<task-node name="签发" >
<task name="签发" swimlane="qianfa">
<controller>
<variable name="PAGE_RESULT" mapped-name="qianfa"></variable>
<!-- 如果选择了会签人员(多个以","分隔),将保存到以下变量中 -->
<variable name="signmanid" mapped-name="signmanid"></variable>
<variable name="firstCollectiveSignmanid" mapped-name="firstCollectiveSignmanid"></variable>
<variable name="outsignmanid" mapped-name="outsignmanid"></variable>
<!-- 是否需要会签 -->
<variable name="needCollectiveSign" mapped-name="needCollectiveSign"></variable>
</controller>
</task>
<transition to="需要会签"></transition>
</task-node>

<decision name="需要会签">
<transition to="会签" name="是test">
<condition expression="#{needCollectiveSign eq 'yes'}"></condition>
</transition>
<transition to="接收" name="否">
<condition expression="#{needCollectiveSign eq 'no'}"></condition>
</transition>
</decision>
<!-- 定义了有等待概念的,并不会自动创建的任务节点,同时添加进入事件 -->
<task-node name="会签" signal="last-wait" create-tasks="false">  
                     <event type="node-enter">  
                        <action name="createInstance"   
                             class="cn.org.test.process.handler.action.CreateCollectSignInstanceHandler"/>  
                     </event>  
                     <task name="会签">  
        	         <controller>  
            		<variable name="PAGE_RESULT" mapped-name="huiqian"></variable>  
        	        </controller>  
    	     </task>  
    	     <transition to="join1"></transition>  
</task-node>
<!-- join自动结点,自动汇集多个token,等所有token都到达后,会自动触发transition,进行流向 -->
<join name="join1">
<transition to="接收"></transition>
</join>

 

java(cn.org.test.process.handler.action.CreateCollectSignInstanceHandler)

/**
* 动态创建会签节点
* 根据会签角色定义的人员动态创建会签节点
*
*
* @author zhujie
*
*/
public class CreateCollectSignInstanceHandler implements ActionHandler  {

/**
*
*/
private static final long serialVersionUID = 1L;

protected Log logger = LogFactory.getLog(getClass());
//签发人
private static final String SIGNMANID = "signmanid";
//第一会签人
private static final String FIRSTCOLLECTIVESIGNMANID = "firstCollectiveSignmanid";
//会签人
private static final String OUTSIGNMANID = "outsignmanid";

private static final String NODE_COLLECT_SIGN_AUDITING = "会签";

/* (non-Javadoc)
* @see org.jbpm.graph.def.ActionHandler#execute(org.jbpm.graph.exe.ExecutionContext)
*/
public void execute(ExecutionContext context) throws Exception {
//TODO: 根据会签角色定义的人员动态创建会签节点

//任务
Token token = context.getToken();
TaskMgmtInstance tmi = context.getTaskMgmtInstance();
TaskNode taskNode = (TaskNode)context.getNode();

//流程实例ID
ProcessInstance processInc = context.getProcessInstance();
Long processInsId = processInc.getId();
logger.debug("processInc Id :"+processInsId);

// 如果选择了会签人员(多个以","分隔),将保存到以下变量中
String collectSignUserIds = "";

//第一会签人
String firstcollectivesignmanid = (String) context.getVariable(FIRSTCOLLECTIVESIGNMANID);
if(StringUtils.isEmpty(firstcollectivesignmanid) == false)
collectSignUserIds += firstcollectivesignmanid;

//会签人
String outsignmanid = (String) context.getVariable(OUTSIGNMANID);
if(StringUtils.isEmpty(outsignmanid) == false){
if(StringUtils.isEmpty(collectSignUserIds))
collectSignUserIds += outsignmanid;
else
collectSignUserIds += "," + outsignmanid;
}

String[] userIds = collectSignUserIds.split(",");

//处理自定义流程任务表
WorkflowTaskManager workflowTaskManager = (WorkflowTaskManager) ServiceLocator.getBean("workflowTaskManager");

for(String userid : userIds){
//要创建的节点名称
Task task = taskNode.getTask(NODE_COLLECT_SIGN_AUDITING);

//从数据表中读取执行人员的ID创建任务实例
TaskInstance taskInstance = tmi.createTaskInstance(task,token);
taskInstance.setActorId(userid);
logger.debug("managerId Id :"+userid);

//处理自定义流程任务表
workflowTaskManager.saveCreateTaskNodeAfter(processInsId, taskInstance.getId(),
NODE_COLLECT_SIGN_AUDITING, new String[] {userid});
}
}
}


 

 
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: