`
iuottp
  • 浏览: 166536 次
  • 性别: Icon_minigender_1
  • 来自: 重庆
社区版块
存档分类
最新评论

jbpm4.3轻松 实现会签完整版

阅读更多

转自:http://hi.baidu.com/suwey/blog/item/0a5bcf1fa2639d6ff624e4f0.html

 

类似文章:http://phoenix-clt.iteye.com/blog/428242

 

jbpm4.3中会签的实现主要思路也是从网上找的。新接触jbpm简单的实现下,如果有什么疑问或错误,请指正。

JPDL代码


<?xml version="1.0" encoding="UTF-8"?>

<process name="huigao" xmlns="http://jbpm.org/4.3/jpdl " xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance " xsi:schemaLocation="http://jbpm.org/4.3/jpdl http://jbpm.org/4.3/jpdl ">
   <start g="172,34,48,48" name="开始">
      <transition g="-53,-17" name="审稿" to="审稿"/>
   </start>
   <task assignee="shengao" form="com/zhangrun/forms/first.ftl" g="150,125,92,52" name="审稿">
      <transition g="-83,-17" name="会稿或办文" to="会稿或办文"/>
   </task>
   <decision g="178,227,48,48" name="会稿或办文">
      <transition g="-65,-17" name="会稿" to="会稿">
      <condition expr=" # { select=="huigao" } "/>
      </transition>
      <transition g="-53,-17" name="办文" to="办文">
      <condition expr=" # { select==" banwen " } "/>
      </transition>
   </decision>
   <custom class="com.zhangrun.custom.Custom" g="16,230,92,52" name="会稿">
      <transition g="60,153:-53,-17" name="审稿" to="审稿"/>
   </custom>
   <task assignee="banwen" g="298,225,92,52" name="办文">
      <transition g="348,373:-47,-17" name="结束" to="结束"/>
   </task>
   <end g="180,354,48,48" name="结束"/>
</process>

JAVA代码

public class Custom implements ExternalActivityBehaviour {

private static final long serialVersionUID = 1L;

public void execute(ActivityExecution activityExecution) throws Exception {
   ExecutionImpl executionimpl = (ExecutionImpl) activityExecution;

   DbSession dbsession = EnvironmentImpl.getFromCurrent(DbSession.class);
   TaskImpl taskimpl = dbsession.createTask();
   taskimpl.setName("customTem");
   taskimpl.setExecution(executionimpl);
   taskimpl.setProcessInstance(executionimpl.getProcessInstance());
   taskimpl.setSignalling(false);
   taskimpl.setExecutionDbid(executionimpl.getDbid());
   dbsession.save(taskimpl);
   HistoryEvent.fire(new TaskActivityStart(taskimpl), executionimpl);
   // 子任务
   TaskImpl subtaskimpl1 = taskimpl.createSubTask();
   subtaskimpl1.setName("huigao1");
   subtaskimpl1.setAssignee("huigao1");
   subtaskimpl1.setSignalling(false);
   subtaskimpl1.setExecutionDbid(executionimpl.getDbid());
   dbsession.save(subtaskimpl1);
   HistoryEvent.fire(new TaskActivityStart(subtaskimpl1), executionimpl);
   TaskImpl subtaskimpl2 = taskimpl.createSubTask();
   subtaskimpl2.setName("huigao2");
   subtaskimpl2.setAssignee("huigao2");
   subtaskimpl2.setExecutionDbid(executionimpl.getDbid());
   subtaskimpl2.setSignalling(false);
   dbsession.save(subtaskimpl2);
   HistoryEvent.fire(new TaskActivityStart(subtaskimpl2), executionimpl);
   // 流程等待
   executionimpl.waitForSignal();
}

public void signal(ActivityExecution activityExecution, String signalName,
    Map<String, ?> parms) throws Exception {
   ExecutionImpl executionImpl = (ExecutionImpl) activityExecution;
   ProcessInstance pi = (ProcessInstance) executionImpl
     .getProcessInstance();
   TaskService taskService = Configuration.getProcessEngine()
     .getTaskService();
   Activity activity = executionImpl.getActivity();
   List<Task> tasks = taskService.createTaskQuery().processInstanceId(
     pi.getId()).list();

   List<Task> subTask_list = taskService.getSubTasks(tasks.get(0).getId());
   Iterator<Task> iter = subTask_list.iterator();
   while (iter.hasNext()) {
    Task subtask = iter.next();
    if (parms.get("username").equals(subtask.getAssignee())) {
     taskService.completeTask(subtask.getId());
    }
   }
   if (subTask_list == null || subTask_list.size() == 1) {
    Transition transition = null;
    if ((signalName == null)
      || ((Task.STATE_COMPLETED.equals(signalName))
        && (activity.getOutgoingTransitions() != null) && (activity
        .getOutgoingTransitions().size() == 1))) {
     transition = activity.getOutgoingTransitions().get(0);
    } else {
     transition = activity.findOutgoingTransition(signalName);
    }
    taskService.completeTask(tasks.get(0).getId());
    executionImpl.take(transition);
   } else {
    executionImpl.waitForSignal();
   }
}

}

 

转载自:http://www.blogjava.net/pengo/archive/2009/12/09/305226.html

分享到:
评论
2 楼 iuottp 2010-11-08  
不好意思,我也是转载的,贴在这里只是为了自己查看方便些。
1 楼 showtime520 2010-10-03  
楼主,这段代码你运行过吗?没运行过怎么能叫轻松实现?还完整版,你这样写最害人啊

相关推荐

Global site tag (gtag.js) - Google Analytics