业务过程的部分或整体在计算机应用环境下自动化,使多个参与者按照某种预定义的规则进行。
activiti版本5.13
一、画流程图
1、创建web项目,安装activiti插件
2、引入activiti相关jar包
3、新建流程图—单实例流程
3-1、节点只需要设置Assignee
3-2、连线的设置
如果是提交,outcome==‘提交’
如果是批准,outcome==‘批准’
如果是驳回,outcome==‘驳回’
3-3、流程定义key设置
点击空白处
二、流程部署
1、引入activiti.cfg.xml,配置数据库连接
2-1、classpath方式
见2-2
2-2、InputStream方式
任何操作要先获得流程引擎对象(ProcessEngine),所有的方法都要从流程引擎对象中获得。
public static void main(String[] args) throws FileNotFoundException {//使用InputStream加载 FileInputStream fileInputStream = new FileInputStream("E:\eclipse\workspace\power\src\main\resources\ibp\act\phase\test02.bpmn");//读取配置文件,获取工作流的引擎实例 ProcessEngineConfiguration processEngineConfiguration = ProcessEngineConfiguration.createProcessEngineConfigurationFromResource("activiti.cfg.xml"); //获取引擎对象 ProcessEngine engine = processEngineConfiguration.buildProcessEngine(); //根据流程引擎对象获取流程部署服务对象 RepositoryService service = engine.getRepositoryService(); //通过service 部署流程图 DeploymentBuilder builder = service.createDeployment(); Deployment deploy = builder .name("test02") .addInputStream("test02.bpmn", fileInputStream) //.addClasspathResource("E:\eclipse\workspace\power\src\main\resources\ibp\act\phase\test01.bpmn")//加载资源文件,一次只能加载一个文件 //.addClasspathResource("E:\eclipse\workspace\power\src\main\resources\ibp\act\phase\test01.png")// .deploy(); //输入流程部署对象的信息 System.out.println("流程部署成功!"); System.out.println(deploy.getId()); System.out.println(deploy.getName());}部署成功之后,数据库生成23张关于activiti表
#资源库流程规则表select * from act_re_deployment #部署信息表select * from act_re_model #流程设计模型部署表select * from act_re_procdef #流程定义数据表select * from act_ge_bytearray #资源文件表select * from act_ge_property #部署ID主键生成策略表#运行时数据库表select * from act_ru_execution#运行时流程执行实例表select * from act_ru_identitylink#运行时流程人员表,主要存储任务节点与参与者的相关信息select * from act_ru_task#运行时任务节点表select * from act_ru_variable#运行时流程变量数据表#历史数据库表select * from act_hi_actinst #历史节点表select * from act_hi_attachment#历史附件表select * from act_hi_comment#历史意见表select * from act_hi_identitylink#历史流程人员表select * from act_hi_detail#历史详情表,提供历史变量的查询select * from act_hi_procinst#历史流程实例表select * from act_hi_taskinst#历史任务实例表select * from act_hi_varinst#历史变量表查询表act_re_deployment,表示部署成功。
这里是引用以上两种部署方式,一次只能部署一个资源,除非执行多次。Zip压缩包方式一次可以部署多个资源。
2-3、zip压缩包部署
三、启动流程
public static void main(String[] args) { ProcessEngineConfiguration processEngineConfiguration = ProcessEngineConfiguration.createProcessEngineConfigurationFromResource("activiti.cfg.xml");//拿到流程引擎对象 ProcessEngine engine = processEngineConfiguration.buildProcessEngine(); //获得运行时的service RuntimeService runtimeService = engine.getRuntimeService(); //初始化设置assignee,用户可以在界面上设置任务节点的执行人 Map<String,Object> map=new HashMap<>(); map.put("pm_id","8055"); map.put("pm","10033"); map.put("pd_id","7433"); //三个参数分别代表含义1、流程定义key;2、关联业务表business_key,一般用业务表主键;3、初始化参数map ProcessInstance processInstance = runtimeService.startProcessInstanceByKey("test02", "9111221",map); System.out.println("流程启动成功,流程实例=========>"+processInstance.getId());}查询运行时任务表act_ru_task,表示流程已经启动
三、提交、审批、驳回流程
outcome是画流程图的连线名称(自己定义的),当前节点要执行什么操作(如:批准,驳回,提交),只需传对应的连线名称就行。如果不使用初始化默认审批人,需要变更下一个节点审批人,在map中指定就行。
public static void main(String[] args) { ProcessEngineConfiguration processEngineConfiguration = ProcessEngineConfiguration.createProcessEngineConfigurationFromResource("activiti.cfg.xml"); ProcessEngine engine = processEngineConfiguration.buildProcessEngine(); //获得任务相关service TaskService taskService=engine.getTaskService(); Map<String,Object> map=new HashMap<>(); //项目经理提交 map.put("outcome", "提交");//连线名称 //质管审批 //map.put("outcome", "批准"); //map.put("outcome", "驳回"); //当前的任务id taskService.complete("326707",map); System.out.println("成功");}如果选择提交,表示该节点已通过,到下一个节点了。