发布时间: 2008-12-17 10:13:00
public void assignTask(JbpmBaseBean flowBean, boolean isStart, boolean isTransition, String transitionPath) { try { instance = jbpmTemplate .findProcessInstance(flowBean.getProcessId()); instance.setJbpmTemplate(jbpmTemplate, instance.getId()); instance.setDescName((new StringBuilder("\u62BD\u5355")).append( instance.getDescName()).toString()); Collection col = instance.getTaskMgmtInstance( Long.valueOf(instance.getId())).getTaskInstances(); System.out.println((new StringBuilder("---------")).append( col.size()).toString()); for (Iterator it = col.iterator(); it.hasNext();) { TaskInstance taskInstance = (TaskInstance) it.next(); System.out.println((new StringBuilder("---id-")).append( taskInstance.getId()).append("=single is=").append( taskInstance.isSignalling()).toString()); if (taskInstance.isSignalling()) { flowBean.setTaskId(Long.valueOf(taskInstance.getId())); cancelTask(flowBean); } } Map map = instance.getTaskMgmtInstance( Long.valueOf(instance.getId())).getTaskMgmtDefinition() .getTasks(); for (Iterator iterator = map.keySet().iterator(); iterator .hasNext();) { Task task = (Task) map.get(iterator.next()); if (task.getParent() instanceof TaskNode) { TaskNode taskNode = task.getTaskNode(); Long parentId = Long.valueOf(taskNode.getId()); if (parentId.equals(flowBean.getNodeId())) { flowBean = getUserByeNodId(Long.valueOf(instance .getId()), Long.valueOf(task.getId())); instance.getContextInstance().setVariable("flowBean", flowBean); Transition leavingTransition = new Transition( transitionPath); System.out.println((new StringBuilder("to node name=")) .append(taskNode.getName()).toString()); leavingTransition.setTo(instance.getProcessDefinition() .getNode(taskNode.getName())); instance.getRootToken().getNode().addLeavingTransition( leavingTransition); if (isTransition) if (!instance.hasEnded()) { if (transitionPath != null && !"".equals(transitionPath)) instance.signal(transitionPath); else instance.signal(); } else { instance.end(); } } } } } catch (Exception e) { e.printStackTrace(); } jbpmTemplate.getHibernateTemplate().saveOrUpdate(instance); }
/** * 为task做标志? * @author 架构哥 */ public void assignTask(JbpmBaseBean flowBean, boolean isStart, boolean isTransition, String transitionPath) { try { instance = jbpmTemplate .findProcessInstance(flowBean.getProcessId()); instance.setJbpmTemplate(jbpmTemplate, instance.getId()); //呃。。啥意思? 使用propertiesEditor得知,是“抽单” instance.setDescName((new StringBuilder("\u62BD\u5355")).append( instance.getDescName()).toString()); //java.util.Collection //TaskMgmtInstance org.jbpm.graph.exe.ProcessInstance.getTaskMgmtInstance(Long processid) //取得所有的 TaskMgmtInstance Collection col = instance.getTaskMgmtInstance( Long.valueOf(instance.getId())).getTaskInstances(); System.out.println((new StringBuilder("---------")).append( col.size()).toString()); //遍历它,想干嘛? for (Iterator it = col.iterator(); it.hasNext();) { TaskInstance taskInstance = (TaskInstance) it.next(); System.out.println((new StringBuilder("---id-")).append( taskInstance.getId()).append("=single is=").append( taskInstance.isSignalling()).toString()); //如果有 isSignalling()的,就把它的id 赋予本方法的第一个参数, setTaskId() //然后 运行cancelTask()这个方法。通过看调用它的Service的javadoc,得知 //cancelTask()的意思是:中止流程,这个方法先不深究。 if (taskInstance.isSignalling()) { flowBean.setTaskId(Long.valueOf(taskInstance.getId())); cancelTask(flowBean); } } //啊?怎么又搞出个getTaskMgmtInstance? 前面不是已经有一个了么? //哦,与前面的稍微不同。。。这个是取 Tasks. Map map = instance.getTaskMgmtInstance( Long.valueOf(instance.getId())).getTaskMgmtDefinition() .getTasks(); //遍历 for (Iterator iterator = map.keySet().iterator(); iterator .hasNext();) { //取得一个org.jbpm.taskmgmt.def.Task Task task = (Task) map.get(iterator.next()); //如果是org.jbpm.graph.node.TaskNode的实例的话, if (task.getParent() instanceof TaskNode) { //。。。官方文档是这么用的么?熟悉JBPM的朋友说一下。先放着 TaskNode taskNode = task.getTaskNode(); //得到个parentId.呃。。。只出现了一次。 Long parentId = Long.valueOf(taskNode.getId()); if (parentId.equals(flowBean.getNodeId())) { //取得了这个东东:flowBean flowBean = getUserByeNodId(Long.valueOf(instance .getId()), Long.valueOf(task.getId())); instance.getContextInstance().setVariable("flowBean", flowBean); //org.jbpm.graph.def.Transition Transition leavingTransition = new Transition( transitionPath); //呃。。。这位哥的debug... System.out.println((new StringBuilder("to node name=")) .append(taskNode.getName()).toString()); //貌似是设置transition 的下一个流程 leavingTransition.setTo(instance.getProcessDefinition() .getNode(taskNode.getName())); //Node org.jbpm.graph.exe.Token.getNode() //往Node中增加这个Transition instance.getRootToken().getNode().addLeavingTransition( leavingTransition); //第四个参数闪亮登场:如果isTransition,就运行下面的东东。 if (isTransition) if (!instance.hasEnded()) { if (transitionPath != null && !"".equals(transitionPath)) instance.signal(transitionPath); else instance.signal(); } else { instance.end(); } } } } //打印 异常 } catch (Exception e) { e.printStackTrace(); } //最后保存。 jbpmTemplate.getHibernateTemplate().saveOrUpdate(instance); } }
/** * @author sg552 */ public class WorkflowServiceImplTest extends BaseSpringTestCase { protected WorkflowServiceImpl workflowService; public void testAssignTask(){ JbpmBaseBean flowBean = new JbpmBaseBean(); boolean isStart = true; boolean isTransition = false; String transitionPath = "someTransitionPath"; //呃。。。写到这里发现,自己还不清楚如何assert. workflowService.assignTask(flowBean, isStart, isTransition, transitionPath); } public void setWorkflowService(WorkflowServiceImpl workflowService) { this.workflowService = workflowService; }
flowBean = new JbpmBaseBean(); ... public void drawoutTaskAssigen(Long workflowId, Long nodeId) { flowBean.setProcessId(workflowId); flowBean.setNodeId(nodeId); workflowService.assignTask(flowBean, true, true, "returnback"); ......
workflowOperator.drawoutTaskAssigen(Long.valueOf(hrProcess.getId()), node.getId());
protected static final Long PROCESS_ID = 424L; protected static final Long NODE_ID = 126L; public void testAssignTask(){ JbpmBaseBean flowBean = new JbpmBaseBean(); flowBean.setProcessId(PROCESS_ID); flowBean.setNodeId(NODE_ID); boolean isStart = true; boolean isTransition = false; String transitionPath = "someTransitionPath"; workflowService.assignTask(flowBean, isStart, isTransition, transitionPath); }
... cancelTask(flowBean);
... instance.getRootToken().getNode().addLeavingTransition( leavingTransition); ...
//第四个参数闪亮登场:如果isTransition,就运行下面的东东。 if (isTransition) if (!instance.hasEnded()) { if (transitionPath != null && !"".equals(transitionPath)) instance.signal(transitionPath); else instance.signal(); } else { instance.end(); }
if (isTransition) if (!instance.hasEnded()) { if (transitionPath != null && !"".equals(transitionPath)) instance.signal(transitionPath); else instance.signal(); } else { instance.end(); } }
..... //Node org.jbpm.graph.exe.Token.getNode() //往Node中增加这个Transition instance.getRootToken().getNode().addLeavingTransition( leavingTransition); // 新抽取出来的方法,我觉得这个方法是不用测试的。如果它原来是正确的话。 setTransitionPathOrEndOrSignalAnInstanceIfIsTransition( isTransition, transitionPath); } .......
Collection col = instance.getTaskMgmtInstance( Long.valueOf(instance.getId())).getTaskInstances(); System.out.println((new StringBuilder("---------")).append( col.size()).toString()); //遍历它,想干嘛? for (Iterator it = col.iterator(); it.hasNext();) { TaskInstance taskInstance = (TaskInstance) it.next(); System.out.println((new StringBuilder("---id-")).append( taskInstance.getId()).append("=single is=").append( taskInstance.isSignalling()).toString()); //如果有 isSignalling()的,就把它的id 赋予本方法的第一个参数, setTaskId() //然后 运行cancelTask()这个方法。通过看调用它的Service的javadoc,得知 //cancelTask()的意思是:中止流程,这个方法先不深究。 if (taskInstance.isSignalling()) { flowBean.setTaskId(Long.valueOf(taskInstance.getId())); cancelTask(flowBean); } }
private void processTasks(JbpmBaseBean flowBean, boolean isTransition, String transitionPath) { //啊?怎么又搞出个getTaskMgmtInstance? 前面不是已经有一个了么? //哦,与前面的稍微不同。。。这个是取 Tasks. Map map = instance.getTaskMgmtInstance( Long.valueOf(instance.getId())).getTaskMgmtDefinition() .getTasks(); //遍历 for (Iterator iterator = map.keySet().iterator(); iterator .hasNext();) { //取得一个org.jbpm.taskmgmt.def.Task Task task = (Task) map.get(iterator.next()); //如果是org.jbpm.graph.node.TaskNode的实例的话, if (task.getParent() instanceof TaskNode) { //。。。官方文档是这么用的么?熟悉JBPM的朋友说一下。先放着 TaskNode taskNode = task.getTaskNode(); //得到个parentId.呃。。。只出现了一次。 Long parentId = Long.valueOf(taskNode.getId()); if (parentId.equals(flowBean.getNodeId())) { //取得了这个东东:flowBean flowBean = getUserByeNodId(Long.valueOf(instance .getId()), Long.valueOf(task.getId())); instance.getContextInstance().setVariable("flowBean", flowBean); //org.jbpm.graph.def.Transition Transition leavingTransition = new Transition( transitionPath); //呃。。。这位哥的debug... System.out.println((new StringBuilder("to node name=")) .append(taskNode.getName()).toString()); //貌似是设置transition 的下一个流程 leavingTransition.setTo(instance.getProcessDefinition() .getNode(taskNode.getName())); //Node org.jbpm.graph.exe.Token.getNode() //往Node中增加这个Transition instance.getRootToken().getNode().addLeavingTransition( leavingTransition); // 第四个参数闪亮登场:如果isTransition,就运行下面的东东。 setTransitionPathOrEndOrSignalAnInstanceIfIsTransition( isTransition, transitionPath); } } } }
instance = jbpmTemplate .findProcessInstance(flowBean.getProcessId()); instance.setJbpmTemplate(jbpmTemplate, instance.getId()); instance.setDescName((new StringBuilder("\u62BD\u5355")).append( instance.getDescName()).toString());
public void assignTask(JbpmBaseBean flowBean, boolean isStart, boolean isTransition, String transitionPath) { try { setJbpmTemplateAndDescName(flowBean); cancelSignallingTasksWhichInSameInstance(flowBean); processTasks(flowBean, isTransition, transitionPath); // 打印 异常 } catch (Exception e) { e.printStackTrace(); } // 最后保存。 jbpmTemplate.getHibernateTemplate().saveOrUpdate(instance); }
public void assignTask(JbpmBaseBean flowBean, boolean isStart, boolean isTransition, String transitionPath) { try { setJbpmTemplateAndDescName(flowBean); cancelSignallingTaskInstanceWhichInSameInstance(flowBean); processTasks(flowBean, isTransition, transitionPath); } catch (Exception e) { logger.error(e,e); } jbpmTemplate.getHibernateTemplate().saveOrUpdate(instance); }
cancelSignallingTaskInstancesWhichInSameInstance(flowBean); processTasks(flowBean, isTransition, transitionPath);
public void testCancelSignallingTaskInstancesWhichInSameInstance(){ JbpmBaseBean flowBean = new JbpmBaseBean(); workflowService.cancelSignallingTaskInstanceWhichInSameInstance(flowBean); }
protected void cancelSignallingTaskInstanceWhichInSameInstance( JbpmBaseBean flowBean) { Collection taskMgmtInstances = instance.getTaskMgmtInstance( Long.valueOf(instance.getId())).getTaskInstances(); for (Iterator it = taskMgmtInstances.iterator(); it.hasNext();) { TaskInstance taskInstance = (TaskInstance) it.next(); if(logger.isDebugEnabled()){ logger.debug("taskInstance, id:" + taskInstance.getId() +" isSignalling: " + taskInstance.isSignalling()); } if (taskInstance.isSignalling()) { flowBean.setTaskId(Long.valueOf(taskInstance.getId())); cancelTask(flowBean); } } }
private void cancelTaskInstanceWhichIsSignalling(JbpmBaseBean flowBean, TaskInstance taskInstance) { if (taskInstance.isSignalling()) { flowBean.setTaskId(Long.valueOf(taskInstance.getId())); cancelTask(flowBean); } }
if (task.getParent() instanceof TaskNode) { TaskNode taskNode = task.getTaskNode(); Long parentId = Long.valueOf(taskNode.getId()); if (parentId.equals(flowBean.getNodeId())) { flowBean = getUserByeNodId(Long.valueOf(instance .getId()), Long.valueOf(task.getId())); instance.getContextInstance().setVariable("flowBean", flowBean); Transition leavingTransition = new Transition( transitionPath); leavingTransition.setTo(instance.getProcessDefinition() .getNode(taskNode.getName())); instance.getRootToken().getNode().addLeavingTransition( leavingTransition); setTransitionPathOrEndOrSignalAnInstanceIfIsTransition( isTransition, transitionPath); } }
private Map getTaskMgmtInstancesByTaskInstanceId() { Map taskMgmtInstances = instance.getTaskMgmtInstance( Long.valueOf(instance.getId())).getTaskMgmtDefinition() .getTasks(); return taskMgmtInstances; }
private void doProcessIfParentOfTaskIsTaskNode(JbpmBaseBean flowBean, boolean isTransition, String transitionPath, Task task) { if (task.getParent() instanceof TaskNode) { Long parentId = Long.valueOf(task.getTaskNode().getId()); if (parentId.equals(flowBean.getNodeId())) { flowBean = getUserByeNodId(Long.valueOf(instance.getId()), Long .valueOf(task.getId())); instance.getContextInstance().setVariable("flowBean", flowBean); Transition leavingTransition = new Transition(transitionPath); leavingTransition.setTo(instance.getProcessDefinition() .getNode(task.getTaskNode().getName())); instance.getRootToken().getNode().addLeavingTransition( leavingTransition); setTransitionPathOrEndOrSignalAnInstanceIfIsTransition( isTransition, transitionPath); } } }
protected void doProcessIfParentOfTaskIsTaskNode(JbpmBaseBean flowBean, boolean isTransition, String transitionPath, Task task) { if ( (task.getParent() instanceof TaskNode) && (Long.valueOf(task.getTaskNode().getId()).equals(flowBean.getNodeId())) ) { //这个方法需要写测试: getUserByeNodId....本来就是这个名字 -_-! flowBean = getUserByeNodId(Long.valueOf(instance.getId()), Long .valueOf(task.getId())); instance.getContextInstance().setVariable("flowBean", flowBean); addLeavingTransitionForRootTokenNode(transitionPath, task); setTransitionPathOrEndOrSignalAnInstanceIfIsTransition( isTransition, transitionPath); } } /** * 这个方法需要写测试 */ protected void addLeavingTransitionForRootTokenNode(String transitionPath, Task task) { Transition leavingTransition = new Transition(transitionPath); leavingTransition.setTo(instance.getProcessDefinition() .getNode(task.getTaskNode().getName())); instance.getRootToken().getNode().addLeavingTransition( leavingTransition); }
protected void addLeavingTransitionForRootTokenNode(String transitionPath, Task task) public JbpmBaseBean getUserByeNodId(Long processid, Long taskId)
public void testAddLeavingTransitionForRootTokenNode(){ Task task = new Task(); workflowService.addLeavingTransitionForRootTokenNode("somePath", task); }
public void testAddLeavingTransitionForRootTokenNode(){ final String taskNodeName = "三级正经理评估普通员工"; Task task = new Task(); task.setTaskNode(new TaskNode()); task.getTaskNode().setName(taskNodeName); workflowService.addLeavingTransitionForRootTokenNode("somePath", task); }
@SuppressWarnings("unchecked") public void testAddLeavingTransitionForRootTokenNode(){ final String taskNodeName = "三级正经理评估普通员工"; Task task = new Task(); task.setTaskNode(new TaskNode()); task.getTaskNode().setName(taskNodeName); workflowService.addLeavingTransitionForRootTokenNode("somePath", task); List<Transition> leavingTransitions = workflowService.instance.getRootToken().getNode().getLeavingTransitions(); //我们刚才的 taskNodeName 一定在这个 List 的元素里面,所以结果size() > 0 assertTrue(leavingTransitions.size() >0 ); }
... task.getTaskNode().setName(taskNodeName); // 在这里进行被测试类的成员变量的设置。 instance 被我修改成了 protected型。 // 已经定义好的常量: protected static final Long PROCESS_ID = 424L; workflowService.instance = jbpmTemplate.findProcessInstance(PROCESS_ID); workflowService.addLeavingTransitionForRootTokenNode("somePath", task); ...
boolean result = false; for(int i=0 ; i < leavingTransitions.size(); i++){ if(leavingTransitions.get(i).getTo().getName().contains(taskNodeName)){ result = true; break; } } assertTrue(result);
public ProcessInstance getInstance(){ return this.instance; }
/** * @see WorkflowServiceImpl * @author sg552 shensiwei(at)sina.com * */ public class WorkflowServiceImplTest extends BaseSpringTestCase { protected WorkflowServiceImpl workflowService; protected JbpmTemplate jbpmTemplate; protected static final Long PROCESS_ID = 424L; protected static final Long NODE_ID = 126L; public void testAssignTask(){ JbpmBaseBean flowBean = new JbpmBaseBean(); flowBean.setProcessId(PROCESS_ID); flowBean.setNodeId(NODE_ID); boolean isStart = true; boolean isTransition = false; String transitionPath = "someTransitionPath"; workflowService.assignTask(flowBean, isStart, isTransition, transitionPath); } @SuppressWarnings("unchecked") public void testAddLeavingTransitionForRootTokenNode(){ final String taskNodeName = "三级正经理评估普通员工"; Task task = new Task(); task.setTaskNode(new TaskNode()); task.getTaskNode().setName(taskNodeName); JbpmBaseBean jbpmBaseBean = new JbpmBaseBean(); jbpmBaseBean.setProcessId(PROCESS_ID); workflowService.setJbpmTemplateAndDescName(jbpmBaseBean); workflowService.addLeavingTransitionForRootTokenNode("普通员工填写个人年度绩效计划", task); //我们刚才的 taskNodeName 一定在这个 List 的元素里面 List<Transition> leavingTransitions = workflowService.getInstance() .getRootToken().getNode().getLeavingTransitions(); boolean result = false; for(int i=0 ; i < leavingTransitions.size(); i++){ if(leavingTransitions.get(i).getTo().getName().equals(taskNodeName)){ result = true; break; } } assertTrue(result); } .....//getters and setters.
public class WorkflowServiceImpl.... //org.springmodules.workflow.jbpm31.JbpmTemplate private JbpmTemplate jbpmTemplate; //org.jbpm.graph.exe.ProcessInstance protected ProcessInstance instance; /** * 为task做标志? * @param isStart 这个参数没用。 * @author 架构哥 sg552重构 */ public void assignTask(JbpmBaseBean flowBean, boolean isStart, boolean isTransition, String transitionPath) { try { setJbpmTemplateAndDescName(flowBean); cancelSignallingTaskInstanceWhichInSameInstance(flowBean); processTasks(flowBean, isTransition, transitionPath); } catch (Exception e) { logger.error(e, e); } jbpmTemplate.getHibernateTemplate().saveOrUpdate(instance); } /** * 汉字:抽单 */ public static final String REARRANGE_PROCESS = "\u62BD\u5355"; public static final String VARIABLE_FLOW_BEAN="flowBean"; protected void setJbpmTemplateAndDescName(JbpmBaseBean flowBean) { instance = jbpmTemplate.findProcessInstance(flowBean.getProcessId()); instance.setJbpmTemplate(jbpmTemplate, instance.getId()); instance.setDescName(REARRANGE_PROCESS+instance.getDescName()); } protected void processTasks(JbpmBaseBean flowBean, boolean isTransition, String transitionPath) { for (Iterator iterator = getTaskMgmtInstancesByTaskInstanceId() .keySet().iterator(); iterator.hasNext();) { Task task = (Task) getTaskMgmtInstancesByTaskInstanceId().get( iterator.next()); doProcessIfParentOfTaskIsTaskNode(flowBean, isTransition, transitionPath, task); } } /** * 很不好意思,四个参数。 */ protected void doProcessIfParentOfTaskIsTaskNode(JbpmBaseBean flowBean, boolean isTransition, String transitionPath, Task task) { if (isShouldDoProcess(flowBean, task)) { flowBean = getUserByeNodId(Long.valueOf(instance.getId()), Long .valueOf(task.getId())); instance.getContextInstance().setVariable(VARIABLE_FLOW_BEAN, flowBean); addLeavingTransitionForRootTokenNode(transitionPath, task); setTransitionPathOrEndOrSignalAnInstanceIfIsTransition( isTransition, transitionPath); } } private boolean isShouldDoProcess(JbpmBaseBean flowBean, Task task) { return (task.getParent() instanceof TaskNode) && (Long.valueOf(task.getTaskNode().getId()).equals(flowBean .getNodeId())); } protected void addLeavingTransitionForRootTokenNode(String transitionPath, Task task) { Transition leavingTransition = new Transition(transitionPath); leavingTransition.setTo(instance.getProcessDefinition().getNode( task.getTaskNode().getName())); instance.getRootToken().getNode().addLeavingTransition( leavingTransition); } private Map getTaskMgmtInstancesByTaskInstanceId() { return instance.getTaskMgmtInstance( Long.valueOf(instance.getId())).getTaskMgmtDefinition() .getTasks(); } protected void cancelSignallingTaskInstanceWhichInSameInstance( JbpmBaseBean flowBean) { Collection taskMgmtInstances = instance.getTaskMgmtInstance( Long.valueOf(instance.getId())).getTaskInstances(); for (Iterator it = taskMgmtInstances.iterator(); it.hasNext();) { TaskInstance taskInstance = (TaskInstance) it.next(); cancelTaskInstanceWhichIsSignalling(flowBean, taskInstance); } } private void cancelTaskInstanceWhichIsSignalling(JbpmBaseBean flowBean, TaskInstance taskInstance) { if (taskInstance.isSignalling()) { flowBean.setTaskId(Long.valueOf(taskInstance.getId())); cancelTask(flowBean); } } /** * 这里比较简单,没有考虑使用多态。 */ private void setTransitionPathOrEndOrSignalAnInstanceIfIsTransition( boolean isTransition, String transitionPath) { if (isTransition) if (!instance.hasEnded()) { if (transitionPath != null && !"".equals(transitionPath)) instance.signal(transitionPath); else instance.signal(); } else { instance.end(); } } public ProcessInstance getInstance() { return this.instance; }
package com.ibm.bmcc.app.eHR; ....
public String nextflow(){//流程处理下一步 System.out.println("-----user------"+flowBean.getUserId()); System.out.println("-----user group------"+flowBean.getUserGroup());
public void startmidperson(OrgChartInfoNew ocif){ ...... public void StartBeginYear(OrgChartInfoNew ocin,String starttype){ ......
select ... from JBPM_TASKINSTANCE jti where ... and jti.id_=tap.taskinstance_ and tap.taskinstance_=jti.id_
public void xxxx(参数1,参数2,参数3,参数4){ try{ var1= ... var2= ... var3=... System.out... for(...) { ..... //多行 System.out.... if.... } Map .... for(...) { var4=... if(){ if(){ ... (多行) System.out.... if(){ if(){ }esle{ } }else{ ... } } } } }catch(Exception e){ e.printStackTrace(); } ..... }