接口
ProcessEngine 工作流引擎 可以通过spring和 Configuration.getProcessEngine();
ExecutionService 执行
ProcessInstance 流程实例
ProcessDefinition 流程定义
TaskService 任务
IdentityService 自动增长
HistoryService 历史记录
ManagementService 管理
RepositoryService 仓库
方法:
1.ProcessEngine
processEngine.setAuthenticatedUserId(String );
processEngine.setHibernateSession(Object);
processEngine.setJdbcConnection(Connection);
Object get(String);
ExecutionService getExecutionService();
HistoryService getHistoryService();
IdentityService getIdentityService();
ManagementService getManagementService();
RepositoryService getRepositoryService();
TaskService getTaskService();
1.查询流程实例:new Instance
List<ProcessInstance> instances = executionService.createProcessInstanceQuery().list();
2.查询流程进度
1)得到当前流程中相匹配的活动 (可以得到活动的长高宽..)
<%String id = request.getParameter("id");
ProcessEngine processEngine = Configuration.getProcessEngine();
RepositoryService repositoryService = processEngine.getRepositoryService();
ExecutionService executionService = processEngine.getExecutionService();
ProcessInstance processInstance = executionService.findProcessInstanceById(id);
Set<String> activityNames = processInstance.findActiveActivityNames();
ActivityCoordinates ac = repositoryService.getActivityCoordinates(processInstance.getProcessDefinitionId(),activityNames.iterator().next());%>
<div style="position:absolute;border:1px solid red;left:<%=ac.getX()%>px;top:<%=ac.getY()%>px;width:<%=ac.getWidth()%>px;height:<%=ac.getHeight()%>px;"></div>
2)生成图片
<img src="Definition_definitionImage.action?id=<%=id %>" style="position:absolute;left:0px;top:0px;" align="middle">
RepositoryService repositoryService = this.getProcessEngine().getRepositoryService();
ExecutionService executionService = this.getProcessEngine().getExecutionService();
String id = this.getRequest().getParameter("id");
ProcessInstance processInstance = executionService.findProcessInstanceById(id);
String processDefinitionId = processInstance .getProcessDefinitionId();
// processDefinitionId 方法表示去 JBPM4_DEPLOYPROP 中按 processDefinitionId和 STRINGVAL_ 字段去找 DEPLOYMENT
// 简单说就是通过 流程部署的小项id 去找 流程对象
ProcessDefinition processDefinition = repositoryService.createProcessDefinitionQuery()
.processDefinitionId(processDefinitionId).uniqueResult();
System.out.println(processDefinition.getImageResourceName()+"-----"+processDefinition.getDeploymentId());
// 图片输入流
InputStream inputStream = null;
// 如果是上传的是 xml 文件 , processDefinition.getImageResourceName() 就会是null .
if(processDefinition.getImageResourceName()==null){
String did = processDefinition.getDeploymentId();
DefinitionImage definitionImage = this.getJbpmService().findImageByDefinitionId(did); //自己写的Service不是JBPM的API
if(definitionImage!=null){
// 通过 这个 xml 的 流程id 找到它在数据库 definitionImage表中的记录 ,中间也有他的 图片名称
// 从而构造出 inputStream 对象
String uploadRoot = super.getRequest().getRealPath("/upload/jpdl/"+definitionImage.getImageName());
try {
inputStream = new FileInputStream(uploadRoot);
} catch (FileNotFoundException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
}
}else{
// 从数据库读到的输入流 .
inputStream = repositoryService.getResourceAsStream(processDefinition.getDeploymentId(),processDefinition.getImageResourceName());
}
byte[] b = new byte[1024];
int len = -1;
try {
ServletOutputStream sos = this.getResponse().getOutputStream();
while ((len = inputStream.read(b, 0, 1024)) != -1) {
sos.write(b, 0, len);
}
} catch (Exception e) {
// TODO: handle exception
e.printStackTrace();
}
3.查询流程定义 (相当于Class,流程实例相当于new 的类)
List<ProcessDefinition> definitionList = this.getProcessEngine().getRepositoryService().createProcessDefinitionQuery().list();
4.开启流程,已经有动态表单了。
String id=reuqest.getParameter("id"); //得到流程定义ID
// 得到当前用户
UserInfo userInfo = super.getLoginUser();
//为了方便测试 , 先写死
Map<String, Object> map = new HashMap<String, Object>();
map.put(Definition_Action.USER_INFO, userInfo.getUserId());
// 为什么这里不能有多个参数
map.put(Definition_Action.FORM_ID, formId); // form 表单 id
// 得到专门操作流程实例的 执行对象
System.out.println(map);
ExecutionService executionService = this.getProcessEngine()
.getExecutionService();
// 开启实例 , ProcessInstance 对象好像对应的就是 ExecutionService 的表
ProcessInstance pi = executionService.startProcessInstanceById(id,map);
5.上传流程定义
/*
* 上传方法 (non-Javadoc) , 方法名写错了 , 应该是 uploadDefinition
* 难点
* 1. 上传的 zip 格式就很好处理
* 2. 上传的是 xml , 要复杂一点 , 因为 xml 文件是不带 png 流程图的 , 这样的话就实现不了流程跟踪了 ,
* 所有要去网上找了个 根据 xml 生成流程图 png 的工具 (这个方法中没实现 ) ,
* 3. 把 xml的 流程id 和 生成的流程图名写到数据库中,当然前提是,把 xml要上传到 tomcat 先.
*/
File src = this.getUpload();
// 得到 "知识库" service
RepositoryService rService = this.getProcessEngine().getRepositoryService();
String fileName = this.getUploadFileName();
String ext = fileName.substring(fileName.lastIndexOf(".")+1,fileName.length());
if(ext.equals("zip")){
try {
ZipInputStream zis = new ZipInputStream(new FileInputStream(src));
rService.createDeployment().addResourcesFromZipInputStream(zis)
.deploy();
} catch (Exception e) {
// TODO: handle exception
e.printStackTrace();
}
}else if(ext.equals("xml")){
//如果上传成功后就要放到自己的表中保存起来。
//流程定义对象 id
String definitionId = rService.createDeployment().addResourceFromInputStream(this.getUploadFileName(),new FileInputStream(src)).deploy();
}
6.删除流程定义
RepositoryService repositoryService = this.getProcessEngine().getRepositoryService();
//删除要流程部署ID
repositoryService.deleteDeploymentCascade("depolymentId");
7.查询我的任务
TaskService taskService = this.getProcessEngine().getTaskService();
//得到用户任务
List<Task> taskList = taskService.findPersonalTasks(userInfo.getUserId());
//SQL:select * from JBPM4_TASK where assignee=?;
// 得到任务变量 formId ?? var这里是不是在上面(开启流程)已经定义好了的。
Object formId = taskService.getVariable(task.getId(), Definition_Action.FORM_ID);
分享到:
相关推荐
jbpm工作流整合是一个关键的主题,它涉及到企业级业务流程管理(BPM)系统的实施与集成。jbpm是一个开源的工作流管理系统,它提供了一套全面的工具和框架,用于设计、执行、监控和优化业务流程。这个压缩包可能包含...
jbpm工作流引擎基于J2EE的轻量级,纯java,开源的工作流管理系统。
jbpm工作流是一款开源的工作流程管理系统,主要用于设计、执行和管理业务流程。它结合了Java技术和BPM(Business Process Management)理念,为开发者提供了一套强大的工具,使得企业能够更有效地自动化和优化业务...
【JBPM工作流全套学习资料】是一份详尽的学习资源,涵盖了JBPM工作流系统的基础到高级知识。JBPM(Java Business Process Management)是开源的企业级工作流管理系统,它允许开发者设计、部署和执行业务流程。这个...
**jBPM工作流详解** jBPM,全称Java Business Process Management,是Red Hat公司开发的一款开源的工作流管理系统,它提供了对业务流程的建模、执行和监控能力。jBPM不仅支持传统的工作流标准,如BPMN 2.0,还集成...
JBPM 工作流引擎内核设计思想及构架笔记分享 上文提到,工作流引擎内核是一种微内核的流程引擎架构,它只包含最基本的对象和服务,以及用于解决流程运行问题的调度机制和执行机制。引擎内核的设计思想是围绕着如何...
**jbpm工作流简介** jbpm(Java Business Process Management)是一个开源的工作流管理系统,它提供了一整套解决方案,用于设计、执行和管理业务流程。jbpm不仅支持BPMN(Business Process Model and Notation)...
在`jbpm工作流引擎介绍.ppt`文件中,可能包含了对这些步骤的详细图解,展示了每个步骤如何在jbpm中建模,以及流程实例在不同阶段的变化。此外,还可能涵盖了如何配置工作流规则、如何定义和分配任务,以及如何使用...
【李腾飞JBPM工作流引擎代码test01到test04】是一系列关于使用JBPM工作流引擎进行程序开发的示例代码。JBPM(Java Business Process Management)是一款开源的工作流管理系统,它允许开发者设计、执行和管理业务流程...
【工作流程JBPM工作流管理】是企业信息化建设中至关重要的一环,它涉及到组织内部的任务自动化、业务流程优化以及跨部门协作效率的提升。JBPM(JBoss Business Process Management)是Red Hat公司推出的一款开源的...
【jbpm工作流详解】 工作流(Workflow)是业务过程在计算机环境下的自动化体现,旨在使多参与者间按照预定义规则传递文档、信息或任务,以达成特定的业务目标。工作流管理系统(WfMS)是实现这一目标的关键,它负责...
在这个名为"企业OA 完整的jbpm工作流实例"的项目中,开发者使用了Java SSH框架来构建了一个集成jbpm的工作流系统,特别适合初学者了解和学习工作流的实现。 SSH框架是Struts、Spring、Hibernate三个开源项目的首...
"JBPM工作流实战_流程定义文件的上传处理视频 03"这一主题主要关注如何在实际操作中处理JBPM流程定义文件的上传,这在构建业务流程自动化系统时是非常关键的步骤。 首先,流程定义文件是JBPM工作流的核心组成部分,...
jbpm工作流是一种开源的工作流管理系统,由JBoss组织开发,用于帮助企业自动化业务流程。jbpm提供了丰富的功能,包括流程定义、执行、监控和集成,适用于各种业务场景,如人力资源管理、采购流程、客户服务等。 在...
jbpm工作流框架 BPM,全称是Java Business Process Management(业务流程管理),它是覆盖了业务流程管理、工作流、服务协作等领域的一个开源的、灵活的、易扩展的可执行流程语言框架。jBPM是公开源代码项目,使用它要...
JBPM工作流开发指南v10-20070706.doc 是一份详细的学习文档,主要针对那些想要深入理解并使用JBPM工作流引擎的开发者。JBPM(Java Business Process Management)是一个开源的工作流管理系统,它允许开发者设计、...
**JBPM工作流详解** JBPM(Java Business Process Management)是一个开源的工作流管理系统,它提供了一整套解决方案,用于设计、执行和管理业务流程。在本示例中,我们将深入探讨如何利用JBPM实现销售批复这一具体...
《jBPM工作流应用开发指南》是一本面向初学者的文档,旨在帮助开发者快速掌握jBPM工作流系统的开发技巧。jBMP,全称Java Business Process Management,是开源组织JBoss提供的一款用于业务流程管理(BPM)的框架,它...