这是第一个版本,写的可能比较龊,还请大家见谅
java 代码 (创建StartTask)
- public long createTask(String strProcessName, String strRequisitioner, Map taskVariables, String transition) {
- log.debug("Process Info --> Create new Process Start, creator: "+ strRequisitioner);
- //create new process instance
- ProcessDefinition processDefinition = null;
- ProcessInstance processInstance = null;
- try{
- processDefinition = graphSession.findLatestProcessDefinition(strProcessName);
- processInstance = new ProcessInstance(processDefinition);
- }catch (JbpmException e) {
- throw new ProcessDefinitionNotFindException(
- "Process definition not find by process name " + strProcessName);
- }
- //if (processDefinition == null)
- log.debug("Process Info --> New process created, PID: "+processInstance.getId());
- // set actorid and create start task instance
- jbpmContext.setActorId(strRequisitioner);
- taskInstance = processInstance.getTaskMgmtInstance().createStartTaskInstance();
- //taskInstance.start();
- // add process Variables
- taskVariables.put("StartActorId", strRequisitioner);
- taskInstance.addVariables(taskVariables);
- //end save task and close jbpmContext
- taskInstance.end(transition);
- jbpmContext.save(taskInstance);
- //commit();
- return processInstance.getId();
- }
这个存了一个variable (StartActorId),用来保存起草人,不知道jbpm有没有直接的API,来获得流程的起草人的。
java 代码(返回代办事项)
- public List<task></task> findToDoTask(String strRequisitioner) {
- List<taskinstance></taskinstance> tasks = taskMgmtSession.findTaskInstances(strRequisitioner);
- List<taskinstance></taskinstance> pooledTasks = taskMgmtSession.findPooledTaskInstances(strRequisitioner);
- tasks.addAll(pooledTasks);
- List<task></task> resultTaskList = new ArrayList<task></task>();
- for (TaskInstance item : tasks) {
- ProcessInstance processInstance = item.getTaskMgmtInstance().getProcessInstance();
- ContextInstance contextInstance = processInstance.getContextInstance();
- Task task = new Task();
- task.setTaskId(item.getId());
- task.setTaskName(item.getName());
- task.setProcessId(processInstance.getId());
- task.setWorkflowId(item.getTaskMgmtInstance().getProcessInstance().getProcessDefinition().getName());
- task.setRequisitionerFK((String)contextInstance.getVariable("StartActorId"));
- resultTaskList.add(task);
- }
- //commit();
- log.info("Process Info --> User ("+ strRequisitioner +") find tasks, size:"+ tasks.size());
- return resultTaskList;
- }
java 代码(结束任务并转移到指定的transition)
- private String taskEnd(long nTaskID, String strRequisitioner, String comment, String transition, Map variables) {
- String msg = "";
- try{
- taskInstance = loadAndEndTaskInstance(nTaskID, strRequisitioner, transition, variables);
- //taskInstance.start();
- //if (taskInstance.getActorId() == null) taskInstance.setActorId(strRequisitioner);
- //add comment to this task instance
- if (comment != null && !comment.equals("")) taskInstance.addComment(comment);
- msg = getAssignLog();
- //commit();
- }catch(Exception e) {
- e.printStackTrace();
- throw new WorkflowException("can't end task id: "+nTaskID+ "("+e.getMessage()+")");
- }
- return msg;
- }
其他就没什么了,大体上就是这样,这个是我这个流程处理类的主要方法。然后在这个基础上做了一次web service的封装。感觉这个封装还是蛮不错的,主要是我老大的意见,哈哈哈。感觉在做简单流程的时候,使用jbpm感觉超级简单,基本上不需要手工写什么东西,拖拖拉拉就弄好了 ,然后给相应的transition命名,这样在task end的时候指定相应的名字,流程也就过去了,非常的简单。在使用会签的时候应该说也是很简单的,哈哈哈。一个字,很爽。当初就看着jbpm 的demo,参考里面的代码,一点一点读懂整理出来了。现在回头看看,好辛苦啊,不过好简单啊。最烦的还是页面,这是我今天完成第一个流程之后的唯一感觉。