流程控制的实现类

这是第一个版本,写的可能比较龊,还请大家见谅

java 代码 (创建StartTask)
  1. public long createTask(String strProcessName, String strRequisitioner, Map taskVariables, String transition) {   
  2.         log.debug("Process Info --> Create new Process Start, creator: "+ strRequisitioner);   
  3.            
  4.         //create new process instance   
  5.         ProcessDefinition processDefinition = null;   
  6.         ProcessInstance processInstance = null;   
  7.         try{   
  8.             processDefinition = graphSession.findLatestProcessDefinition(strProcessName);   
  9.             processInstance = new ProcessInstance(processDefinition);   
  10.         }catch (JbpmException e) {   
  11.             throw new ProcessDefinitionNotFindException(   
  12.                     "Process definition not find by process name " + strProcessName);   
  13.         }   
  14.         //if (processDefinition == null)    
  15.            
  16.            
  17.         log.debug("Process Info --> New process created, PID: "+processInstance.getId());   
  18.            
  19.         // set actorid and create start task instance   
  20.         jbpmContext.setActorId(strRequisitioner);   
  21.         taskInstance = processInstance.getTaskMgmtInstance().createStartTaskInstance();   
  22.         //taskInstance.start();   
  23.            
  24.         // add process Variables   
  25.         taskVariables.put("StartActorId", strRequisitioner);   
  26.            
  27.         taskInstance.addVariables(taskVariables);   
  28.            
  29.         //end  save task and close jbpmContext    
  30.         taskInstance.end(transition);   
  31.         jbpmContext.save(taskInstance);   
  32.            
  33.         //commit();   
  34.            
  35.         return processInstance.getId();   
  36.     }  

 这个存了一个variable (StartActorId),用来保存起草人,不知道jbpm有没有直接的API,来获得流程的起草人的。

java 代码(返回代办事项)
  1. public List<task></task> findToDoTask(String strRequisitioner) {   
  2.                    
  3.         List<taskinstance></taskinstance> tasks = taskMgmtSession.findTaskInstances(strRequisitioner);   
  4.         List<taskinstance></taskinstance> pooledTasks = taskMgmtSession.findPooledTaskInstances(strRequisitioner);   
  5.         tasks.addAll(pooledTasks);   
  6.            
  7.         List<task></task> resultTaskList = new ArrayList<task></task>();   
  8.         for (TaskInstance item : tasks) {   
  9.             ProcessInstance processInstance = item.getTaskMgmtInstance().getProcessInstance();   
  10.             ContextInstance contextInstance = processInstance.getContextInstance();   
  11.                
  12.             Task task = new Task();   
  13.             task.setTaskId(item.getId());   
  14.             task.setTaskName(item.getName());   
  15.             task.setProcessId(processInstance.getId());   
  16.             task.setWorkflowId(item.getTaskMgmtInstance().getProcessInstance().getProcessDefinition().getName());   
  17.             task.setRequisitionerFK((String)contextInstance.getVariable("StartActorId"));   
  18.                
  19.             resultTaskList.add(task);   
  20.         }   
  21.         //commit();   
  22.            
  23.         log.info("Process Info --> User ("+ strRequisitioner +") find tasks, size:"+ tasks.size());   
  24.            
  25.         return resultTaskList;   
  26.     }  

 

java 代码(结束任务并转移到指定的transition)
  1. private String taskEnd(long nTaskID, String strRequisitioner, String comment, String transition, Map variables) {   
  2.         String msg = "";   
  3.         try{   
  4.             taskInstance = loadAndEndTaskInstance(nTaskID, strRequisitioner, transition, variables);   
  5.             //taskInstance.start();   
  6.             //if (taskInstance.getActorId() == null) taskInstance.setActorId(strRequisitioner);   
  7.                
  8.             //add comment to this task instance   
  9.             if (comment != null && !comment.equals("")) taskInstance.addComment(comment);   
  10.             msg = getAssignLog();   
  11.             //commit();   
  12.         }catch(Exception e) {   
  13.             e.printStackTrace();   
  14.             throw new WorkflowException("can't end task id: "+nTaskID+ "("+e.getMessage()+")");   
  15.         }   
  16.         return msg;   
  17.     }  

 

其他就没什么了,大体上就是这样,这个是我这个流程处理类的主要方法。然后在这个基础上做了一次web service的封装。感觉这个封装还是蛮不错的,主要是我老大的意见,哈哈哈。感觉在做简单流程的时候,使用jbpm感觉超级简单,基本上不需要手工写什么东西,拖拖拉拉就弄好了 ,然后给相应的transition命名,这样在task end的时候指定相应的名字,流程也就过去了,非常的简单。在使用会签的时候应该说也是很简单的,哈哈哈。一个字,很爽。当初就看着jbpm 的demo,参考里面的代码,一点一点读懂整理出来了。现在回头看看,好辛苦啊,不过好简单啊。最烦的还是页面,这是我今天完成第一个流程之后的唯一感觉。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值