`
卡拉阿风
  • 浏览: 100805 次
  • 性别: Icon_minigender_1
  • 来自: 杭州
社区版块
存档分类
最新评论

jBPM4灵活的临时动态性需求小结

    博客分类:
  • jBPM
阅读更多
灵活的临时动态性需求,例如:任意回退、会签(包括加、减签,补签)
关于名词解释参看这里
http://www.infoq.com/cn/articles/jbpm4-process-requirement

回退:如果你有回退的路线,那么completeTask后直接指定路线就可以。
任意回退:setActivity()


会签:这里以单步会签为例
思想:活动中使用custom,调用用户代码,实现一个自定义的活动行为。
使task处于等待状态,生成几个子任务,当所有子任务结束后查看会签结果,最后进行走向。(不同的投票机制可以采取不同的方案,如果一票否决制,那么就不必等所有人都审核了再决定走向,所以具体还是要看投票的机制;投票的审核方式可以放在signal方法里,也可以放在signal方法外,即实际业务中,主要还是要看应用的场景)
public class CountersignCustom implements ExternalActivityBehaviour { 
... 
public void execute(ActivityExecution activityExecution) {  
        ExecutionImpl execution = (ExecutionImpl) activityExecution;    
  
        // 创建主任务  
        DbSession dbSession = EnvironmentImpl.getFromCurrent(DbSession.class);  
        TaskImpl task = (TaskImpl) dbSession.createTask();  
        task.setExecution(execution);  
        task.setProcessInstance((ExecutionImpl) execution.getProcessInstance());  
        task.setSignalling(true);  
        task.setName(taskName);  
        dbSession.save(task);  
        HistoryEvent.fire(new TaskActivityStart(task), (ExecutionImpl) execution);  
        //通过变量传入会签人员
        String[] counters = (String[]) execution.getVariable(counterignVarName);
        // 创建子任务  
        for (String countersigner : counters) {  
            TaskImpl subtask = (TaskImpl) dbSession.createTask();     
            task.addSubTask(subtask);  
            subtask.setAssignee(countersigner);  
            subtask.setName(taskName + "." + countersigner);  
            subtask.setProcessInstance((ExecutionImpl) execution.getProcessInstance());  
            subtask.setExecution(execution);
            // 设置为true时,completeTask 会触发 signal  
            // 参见 TaskImpl.complete() 方法  
            subtask.setSignalling(false);  
            dbSession.save(subtask);  
            // 触发事件  
            HistoryEvent.fire(new TaskActivityStart(subtask), (ExecutionImpl) execution);  
        }  
        execution.waitForSignal();  
    }  
public void signal(ActivityExecution activityExecution, String signalName, Map<String, ?> parms) throws Exception { 
...
        if (会签完成) {
            Transition transition = null;
            if(会签不批准) {
                ExecutionService executionService = processEngine.getExecutionService();
                executionService.endProcessInstance(pi.getId(), Execution.STATE_ENDED);
            }else {
                transition = activity.findOutgoingTransition(countersignSuccess);
                signalName = countersignSuccess;
                executionImpl.historyActivityEnd(signalName);
                executionImpl.take(transition);
            }
        } else {//会签未完成继续等待
            executionImpl.waitForSignal();
        }
...
    } 

以上怎么来触发呢?
// 设置为true时,completeTask 会触发 signal  
subtask.setSignalling(false);
如果设置的是false
参考http://www.family168.com/tutorial/jbpm4.0/html/services.html#singallingawaitingexecution
使用以下代码即可
ExecutionService executionService = processEngine.getExecutionService();
executionService.signalExecutionById(id);

是不是很简单?

另外关于会签中决策方式,比如一票否决,少数服从多数,N票认可,按比例通过等可以通过定义会签结论接口,不同的实现来进行处理。

当我们的工作流和实际业务结合的很紧密,例如:我们必须知道一个人在一个项目中的任务,这个时候我们必须把工作流实例和项目进行绑定,这也是最简单有效地方法。

获取一个流程实例中的个人任务
ExecutionService executionService = processEngine.getExecutionService();  
ProcessInstance processInstance = executionService.startProcessInstanceByKey(key,variables);  
TaskService taskService = processEngine.getTaskService();  
   
//根据节点名取一流程实例下的任务  
Task task1 = taskService.createTaskQuery().processInstanceId(processInstance.getId()).activityName("经理签收").uniqueResult(); 

//根据任务分配者userId取一流程实例下的任务  
Task task2 = taskService.createTaskQuery().processInstanceId(processInstance.getId()).assignee(userId).uniqueResult(); 


然后我们再回头看下官方用户手册和demo中的实现方法
List<Task> taskList = taskService.findPersonalTasks("johndoe");
Task task = taskList.get(0);

这个时候,我们所取得的任务只是任务列表中的某个任务,而无法取得我们需要指定的任务,实用性显而易见。
2
0
分享到:
评论

相关推荐

    基于jBPM4的临时动态性需求研究

    总结来说,本文通过对jBPM4框架的介绍,结合国内工作流领域的应用特点和临时动态性需求的分析,探讨了如何将jBPM4应用于会签、撤销、任意回退等场景,并提出了动态路由方法。这些讨论为工作流管理系统的设计者和...

    jbpm4jbpm5

    jbpm4jbpm5是关于jbpm流程管理框架的专题,涵盖了jbpm4和jbpm5两个主要版本。jbpm是一个开源的工作流管理系统,用于帮助开发者实现业务流程自动化。以下是基于给定文件的信息,深入解析jbpm4和jbpm5的知识点: 1. *...

    jbpm4案例源码

    jbpm4还支持扩展和定制,例如,你可以通过编写自定义的工作流监听器、任务监听器和事件处理器来满足特定业务需求。此外,jbpm4提供了丰富的API和工具,如jbpm-gwt,用于创建基于Google Web Toolkit (GWT)的富客户端...

    jBPM4工作流应用开发指南.pdf

    jBPM4作为该系列的一个版本,提供了一套完整的流程管理和执行框架,允许开发者构建灵活的工作流应用,以实现业务流程自动化。本指南由胡奇编写,旨在为开发者提供一个全面的参考,帮助他们快速学习和掌握使用jBPM4...

    jBPM4工作流示例jbpmDemo

    jBPM4还集成了业务规则管理系统,如Drools,使得流程决策可以动态调整,符合业务需求的灵活性。 在**jbpmDemo**中,**Canvas动画**是一个重要的特性。Canvas是一种HTML5的画布元素,允许开发者在浏览器端动态绘制...

    JBPM4与JBPM5工作流系统技术可行性分析

    ### 工作流系统技术选型可行性分析:JBPM4与JBPM5 #### 一、引言 在数字化转型的背景下,工作流系统成为提高组织效率的关键技术之一。医院作为一个复杂的组织机构,其内部流程的优化对于提升服务质量至关重要。...

    JBPM4使用小结.doc

    JBPM4 使用小结 JBPM4 是 JBoss 开发的 Java 工作流引擎,它提供了可视化的流程设计界面和基于 Hibernate 的持久层框架。下面是对 JBPM4 的主要 API 介绍和使用。 ProcessEngine ProcessEngine 是 JBPM4 的流程...

    jBPM4入门基础环境配置

    **jBPM4入门基础环境配置** jBPM(Java Business Process Management)是一个开源的工作流管理系统,主要用于处理业务流程的建模...通过正确的环境配置和深入学习,你可以利用jBPM4构建出符合企业需求的流程管理系统。

    jBPM4完整例子

    通过使用jBPM4,开发者可以定义复杂的业务流程,并且能够灵活地进行流程更改和监控。 文档教程将引导你完成以下几个关键步骤: 1. **环境搭建**:安装并配置SSH框架,包括Struts2、Spring和Hibernate的相关库,...

    jbpm4源码jbpm4源码jbpm4源码

    jbpm4的设计具有高度的可扩展性,允许开发者自定义任务行为、事件处理器、监听器等,满足不同业务需求。 10. **社区支持** jbpm4背后有强大的开源社区支持,提供了丰富的文档、示例和问题解答,帮助开发者解决...

    jbpm教程、jbpm动态设置参与者

    jbpm教程、jbpm动态设置参与者、jbpm实例下载

    JBPM4 开发文档 实例 流程

    **JBPM4 开发文档详解** JBPM4(Java Business Process Management 4)是一个轻量级的开源工作流管理系统,基于J2EE架构,旨在帮助开发者实现复杂的业务流程自动化。该项目于2004年10月18日发布2.0版本,并随后成为...

    jbpm4基本jar包

    4. **规则引擎**:jbpm4集成了Red Hat的JBoss Drools规则引擎,使得流程决策可以根据预定义的业务规则动态调整。 5. **事件处理**:jbpm4支持事件驱动的流程,如超时事件、信号事件等,使得流程可以根据外部条件...

    jbpm4web-JBPM4的一个web版本的Demo

    【jbpm4web - JBPM4的Web版Demo详解】 JBPM4是一个开源的工作流管理系统,它提供了强大的业务流程管理(BPM)功能,包括流程设计、执行、监控和优化。"jbpm4web"是基于JBPM4开发的一个Web版本的示例项目,旨在帮助...

    jbpm4.4 动态设置参与人数

    特别是在版本4.4中,JBPM提供了强大的灵活性和扩展性,使得开发者能够根据实际需求动态调整工作流程。本文将详细介绍如何在JBPM 4.4中实现动态设置参与人数的功能,这对于提高业务流程的灵活性和适应性具有重要意义...

    jBPM 4使用手记

    总结,jBPM 4是一个功能强大且灵活的业务流程管理工具,它结合了流程建模、执行、持久化、任务管理等多个关键组件,旨在帮助企业构建高效、可维护的业务流程。通过深入学习和实践,开发者可以充分利用jBPM 4解决复杂...

    jBPM4用户指南入门教程

    **jBPM4用户指南入门...通过实践,你可以熟练掌握jBPM4的工作原理,从而更好地实现业务流程自动化,提升企业的效率和灵活性。jBPM4.0GA.pdf文档中包含了更详细的步骤和示例,建议仔细阅读并进行实践操作以加深理解。

Global site tag (gtag.js) - Google Analytics