美文网首页
Activiti 的一些业务处理Service

Activiti 的一些业务处理Service

作者: MaJiT | 来源:发表于2020-02-23 14:30 被阅读0次

    1.业务处理Service

    1.RepositoryService:提供一系列管理流程定义和流程部署的API。
    2.RuntimeService:在流程运行时对流程实例进行管理与控制。
    3.TaskService:对流程任务进行管理,例如任务提醒、任务完成和创建任务分本任务等。
    4.IdentityService:提供对流程角色数据进行管理的API,这些角色数据包括用户组、用户以及它们之间的关系。
    5.ManagementService:提供对流程引擎进行管理和维护的服务。
    6.HistoryService:对流程的历史数据进行操作,包括查询、删除这些历史数据。
    7.DynamicBpmnService:使用该服务,可以不需要重新部署流程模型,就可以实现对流程模型的部分修改。

    1.1流程引擎

    ProcessEngine engine = ProcessEngines.getDefaultProcessEngine();
    ...
    engine.close();
    

    1.2流程部署

            // 存储服务
            RepositoryService rs = engine.getRepositoryService();
    

    1.3流程启动

            // 运行时服务
            RuntimeService runService = engine.getRuntimeService();
    

    1.4任务处理

            // 任务服务
            TaskService taskService = engine.getTaskService();
    

    2.流程部署

    2.1 原文件形式部署方式

    repositoryService.createDeployment().addClasspathResource("first.bpmn").deploy();
    

    2.2 压缩包ZIP形式部署

            DeploymentBuilder builder = repositoryService.createDeployment();
            FileInputStream fis = new FileInputStream(new File("resource/datas.zip"));
            ZipInputStream zis = new ZipInputStream(fis);
            builder.addZipInputStream(zis).deploy();
    

    注意:这一步在数据库中将操作三张表:

    a)act_re_deployment 存放流程定义的显示名和部署时间,每部署一次增加一条记录

    b)act_re_procdef 存放流程定义的属性信息,部署每个新的流程定义都会在这张表中增加一条记录。

    c)act_ge_bytearray 存储流程定义相关的部署信息。即流程定义文档的存放地。每部署一次就会增加两条记录,一条是关于bpmn规则文件的,一条是图片的(如果部署时只指定了bpmn一个文件,activiti会在部署时解析bpmn文件内容自动生成流程图)。两个文件不是很大,都是以二进制形式存储在数据库中。

    3流程启动

    //返回一个流程实例对象
    ProcessInstance pi = runService.startProcessInstanceByKey("myProcess");
    

    注意:操作数据库的act_ru_execution表,如果是用户任务节点,同时也会在act_ru_task添加一条记录

    4.任务处理

    4.1根据流程实例对象查询任务并完成任务

            //第一种方法 usertask的时候使用complete
            Task task = taskService.createTaskQuery().processInstanceId(pi.getId()).singleResult();
            taskService.complete(task.getId());
            //第二种方法 receivetask时使用trigger
            // 查当前的子执行流
            Execution exe = runService.createExecutionQuery() 
                              .processInstanceId(pi.getId()).onlyChildExecutions()
                              .singleResult();
            // 让它往前走
            runService.trigger(exe.getId());
    

    相关文章

      网友评论

          本文标题:Activiti 的一些业务处理Service

          本文链接:https://www.haomeiwen.com/subject/dbqlqhtx.html