jbpm工作流框架

整体流程:

用户->流程设计器->流程定义说明文档(xml和png)->工作流引擎(解释和执行工作流,提供的api支持外部调用)->流程信息保存到数据库中(hibernate或mybatis框架)


开发流程:

1:创建一个java项目

2:导入依赖包(15个jar包)

3:提供jbpm框架的配置文件

(核心配置文件 -- jbpm.cfg.xml,hibernate或mybatis配置文件 jbpm.hibernate.cfx.xml,日志配置文件 logging.properties-- 见example文件下的配置文件)

4:设计流程(安装框架设计插件 jbpm-gdp 创建 jbpm 4 prcess definition 生成xml 和png文件)

5:创建流程引擎对象

         5.1非单例实现

		Configuration config=new Configuration();
		config.setResource("jbpm.cfg.xml");
		ProcessEngine processEngine=config.buildProcessEngine();

          5.2单利实现

                ProcessEngine processEngine=Configuration.getProcessEngine();

6:部署引擎

         6.1项目文件部署

		NewDeployment deployment = processEngine.getRepositoryService().createDeployment();
		deployment.addResourceFromClasspath("processdesign.jpdl.xml");
		deployment.addResourceFromClasspath("processdesign.png");
		
		String id = deployment.deploy(); //部署,返回的是部署id,每次部署id均不一样

        6.2压缩项目文件部署

		NewDeployment deployment = processEngine.getRepositoryService().createDeployment();


		ZipInputStream zipInput=new ZipInputStream(new FileInputStream(new File("D:\\workspace\\jbpm\\process\\hello.zip")));
		deployment.addResourcesFromZipInputStream(zipInput);
		
		String id = deployment.deploy(); //部署

        ps:每次完成部署会在数据库的deploy*表里插数据

7:删除流程

		String deploymentId = "1";  //部署时产生的id

		processEngine.getRepositoryService().deleteDeployment(deploymentId);  //有正在使用的流程会报错
		
		processEngine.getRepositoryService().deleteDeploymentCascade(deploymentId); //有正在使用的流程全部删除

8:查询所有流程

		ProcessDefinitionQuery query = processEngine.getRepositoryService().createProcessDefinitionQuery();
		
		query.list();


9:获取流程的附件文件

		String deploymentId = "1";

		Set<String> names = processEngine.getRepositoryService().getResourceNames(deploymentId); // 获取所有文件名

		for (String name : names) {
			InputStream in = processEngine.getRepositoryService().getResourceAsStream(deploymentId, name);
			
			//...输出流写到本地			
		}

10:启动流程
      
		String processdefinitionid = "requestprocess-2";
		ProcessInstance processInstance = processEngine.getExecutionService()
				.startProcessInstanceById(processdefinitionid);  //启动获取一个流程对象,往execution 和 task 表里插入数据
		
		
		System.out.println("id:"+processInstance.getId()+",name"+processInstance.getName()+",key"+processInstance.getKey());
		
11:获取我的任务列表
		String userId = "zhangsan";
		TaskQuery taskQuery = processEngine.getTaskService().createTaskQuery();
		taskQuery.assignee(userId);// 按照用户id来过滤,查看所有用户则跳过
		List<Task> list = taskQuery.list();
		
		for(Task task:list)
		{
			System.out.println(task.getId()+"/"+task.getName());
		}

12:办理任务
		String taskId = "20002";  //是我的任务列表里的task.getId()
		processEngine.getTaskService().completeTask(taskId); //清除task表的id对应的数据,修改his_task对应的数据为complete,新增task下一个任务数据,并在his_task里插入历史数据
          ps:task表存储的是正在办理的任务,当整个任务所有人都执行结束,则当前任务在task表里数据全部清除,所有逻辑在his_task历史表里



13:跨任务执行(跨过当前任务节点,执行下一个任务节点,一般适用于管理员)

 

		String executionId="requestprocess.30001"; //需要跳过的task任务对应的executionid,见通过用户获取当前任务代码
		//processEngine.getExecutionService().signalExecutionById(executionId); 该函数有异常,需要考虑分支路线就必须调用2个参数的重载函数
		processEngine.getExecutionService().signalExecutionById(executionId, "to task3"); //to task3是xml里节点的路线name




final ps:
jbpm每次发布后就可以启动一个流程实例,进而可以分每个用户按流程往下执行。

具体服务如下:

对象:ProcessEngine类型对象

服务:getRepositoryService 流程定义的部署,删除,查询,获得流程定义文档,对应的都是一些静态信息

           getExecutionService启动一个流程实例,跳转到下一步

           getTaskService查询我的任务列表,办理任务

查询对象:

processEngine.getXXService().createXXQuery()

1)流程定义查询对象(查询那些流程设计)---processEngine.getRepositoryService().createProcessDefinitionQuery();
2)流程实例查询对象(启动流程时使用)---processEngine.getExecutionService().createProcessInstanceQuery();
3)任务查询对象(任务查询)-------processEngine.getTaskService().createTaskQuery();
4)部署查询对象(流程部署使用)-------processEngine.getRepositoryService().createDeploymentQuery();

工作流框架对象:
1)Deployment----部署对象,对应就是一次部署
2)Execution-----执行对象
3)ProcessDefinition----流程定义对象,一个流程的步骤说明
4)ProcessInstance---流程实例对象,其实就是一个特殊的执行对象,特指从流程开始到结束的最大分支(流程启动,包含流程所有运行阶段)
5)Task----任务对象



  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值