灵活的临时动态性需求,例如:任意回退、会签(包括加、减签,补签)
关于名词解释参看这里
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);
这个时候,我们所取得的任务只是任务列表中的某个任务,而无法取得我们需要指定的任务,实用性显而易见。
分享到:
相关推荐
总结来说,本文通过对jBPM4框架的介绍,结合国内工作流领域的应用特点和临时动态性需求的分析,探讨了如何将jBPM4应用于会签、撤销、任意回退等场景,并提出了动态路由方法。这些讨论为工作流管理系统的设计者和...
jbpm4jbpm5是关于jbpm流程管理框架的专题,涵盖了jbpm4和jbpm5两个主要版本。jbpm是一个开源的工作流管理系统,用于帮助开发者实现业务流程自动化。以下是基于给定文件的信息,深入解析jbpm4和jbpm5的知识点: 1. *...
jbpm4还支持扩展和定制,例如,你可以通过编写自定义的工作流监听器、任务监听器和事件处理器来满足特定业务需求。此外,jbpm4提供了丰富的API和工具,如jbpm-gwt,用于创建基于Google Web Toolkit (GWT)的富客户端...
jBPM4作为该系列的一个版本,提供了一套完整的流程管理和执行框架,允许开发者构建灵活的工作流应用,以实现业务流程自动化。本指南由胡奇编写,旨在为开发者提供一个全面的参考,帮助他们快速学习和掌握使用jBPM4...
jBPM4还集成了业务规则管理系统,如Drools,使得流程决策可以动态调整,符合业务需求的灵活性。 在**jbpmDemo**中,**Canvas动画**是一个重要的特性。Canvas是一种HTML5的画布元素,允许开发者在浏览器端动态绘制...
### 工作流系统技术选型可行性分析:JBPM4与JBPM5 #### 一、引言 在数字化转型的背景下,工作流系统成为提高组织效率的关键技术之一。医院作为一个复杂的组织机构,其内部流程的优化对于提升服务质量至关重要。...
JBPM4 使用小结 JBPM4 是 JBoss 开发的 Java 工作流引擎,它提供了可视化的流程设计界面和基于 Hibernate 的持久层框架。下面是对 JBPM4 的主要 API 介绍和使用。 ProcessEngine ProcessEngine 是 JBPM4 的流程...
**jBPM4入门基础环境配置** jBPM(Java Business Process Management)是一个开源的工作流管理系统,主要用于处理业务流程的建模...通过正确的环境配置和深入学习,你可以利用jBPM4构建出符合企业需求的流程管理系统。
通过使用jBPM4,开发者可以定义复杂的业务流程,并且能够灵活地进行流程更改和监控。 文档教程将引导你完成以下几个关键步骤: 1. **环境搭建**:安装并配置SSH框架,包括Struts2、Spring和Hibernate的相关库,...
jbpm4的设计具有高度的可扩展性,允许开发者自定义任务行为、事件处理器、监听器等,满足不同业务需求。 10. **社区支持** jbpm4背后有强大的开源社区支持,提供了丰富的文档、示例和问题解答,帮助开发者解决...
jbpm教程、jbpm动态设置参与者、jbpm实例下载
**JBPM4 开发文档详解** JBPM4(Java Business Process Management 4)是一个轻量级的开源工作流管理系统,基于J2EE架构,旨在帮助开发者实现复杂的业务流程自动化。该项目于2004年10月18日发布2.0版本,并随后成为...
4. **规则引擎**:jbpm4集成了Red Hat的JBoss Drools规则引擎,使得流程决策可以根据预定义的业务规则动态调整。 5. **事件处理**:jbpm4支持事件驱动的流程,如超时事件、信号事件等,使得流程可以根据外部条件...
【jbpm4web - JBPM4的Web版Demo详解】 JBPM4是一个开源的工作流管理系统,它提供了强大的业务流程管理(BPM)功能,包括流程设计、执行、监控和优化。"jbpm4web"是基于JBPM4开发的一个Web版本的示例项目,旨在帮助...
特别是在版本4.4中,JBPM提供了强大的灵活性和扩展性,使得开发者能够根据实际需求动态调整工作流程。本文将详细介绍如何在JBPM 4.4中实现动态设置参与人数的功能,这对于提高业务流程的灵活性和适应性具有重要意义...
总结,jBPM 4是一个功能强大且灵活的业务流程管理工具,它结合了流程建模、执行、持久化、任务管理等多个关键组件,旨在帮助企业构建高效、可维护的业务流程。通过深入学习和实践,开发者可以充分利用jBPM 4解决复杂...
**jBPM4用户指南入门...通过实践,你可以熟练掌握jBPM4的工作原理,从而更好地实现业务流程自动化,提升企业的效率和灵活性。jBPM4.0GA.pdf文档中包含了更详细的步骤和示例,建议仔细阅读并进行实践操作以加深理解。