Activiti学习(二)——经常使用服务组件

Activiti针对工做流的一系列操做,都封装在他的服务组件当中,所以要学习activiti,首先要作的就是学习了解他的经常使用服务组件。java

1.ativiti经常使用服务组件的基本介绍:

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

2.如何理解服务组件之间的关系

如何理解服务组件之间的关系,必须先从工做流的使用角度来理解。spring

以报销流程为例:数据库

工做流并非凭空出现的,并非员工提起报销请求,系统就毫无根据的生成了工做流。而是须要管理员来规定报销这个工做流中各个环节,各个条件。那么管理员如何来使用activiti来定义一个新的工做流呢?RepositoryService为咱们提供了与此相关的一系列方法,可让咱们可以定义工做流并将工做流部署到服务器当中去。能够将RepositoryService理解为建立java面向对象思想中的类。服务器

当有了一个流程的定义,员工如何去申请一个报销流程呢,由于每个员工状况都不同,他们都须要有个独立的流程来解决各自的问题(相似于java中的对象)RuntimeService为咱们提供了相应的方法,来根据一个流程定义去建立流程实例,并能够对流程实例进行一系列的操做。ide

此处还有一个task的概念,task能够理解为咱们流程图中的一个审批任务(节点),一个流程实例只要被建立了而且尚未结束,就一个其中某一个节点上。而咱们也可使用RuntimeService来获取咱们流程当前所处于task。而TaskService则能够对task进行完成、管理各类操做。学习

此外activiti还经过IdentityService提供给咱们了统一管理提起流程、参与流程的全部用户和用户组的一系列方法,并容许经过taskService中的方法为task设定系统中的审批用户或者用户组。spa

HistoryService则是由于咱们有时须要查询已经走彻底部流程的流程实例,他给咱们提供一系列操做历史数据的方法。code

ManagementService和DynamicBpmnService暂时用到的还比较少,之后再补充。//todoorm

3.如何建立服务组件

普通java项目中咱们须要先声明工做流引擎ProcessEngine ,而后根据工做流引擎来获取各类服务组件。对象

ProcessEngine engine= ProcessEngines.getDefaultProcessEngine();
        //工做流定义相关服务
        RepositoryService rs=engine.getRepositoryService();
        //工做流实例相关服务
        RuntimeService runtimeService=engine.getRuntimeService();
        //任务相关服务服务
        TaskService taskService=engine.getTaskService();

        //将流程模板存储到数据库中
        rs.createDeployment().addClasspathResource("first.bpmn").deploy();

        //建立一个流程实例
        ProcessInstance processInstance=runtimeService.startProcessInstanceByKey("myProcess_1");

        //普通员工填写完成请假任务  task即为当前节点
        Task 
       task=taskService.createTaskQuery().processInstanceId(processInstance.getId()).singleResult();
        System.out.println("当前流程节点:"+task.getName());
        taskService.complete(task.getId());

而spring项目中咱们能够直接经过@Autowired注解的方式来获取咱们的服务组件,以下

@Autowired
    private RuntimeService runtimeService;

    @Autowired
    private RepositoryService repositoryService;

    @Autowired
    private TaskService taskService;

    @Autowired
    private IdentityService identityService;

    @Autowired
    private HistoryService historyService;
相关文章
相关标签/搜索