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;
相關文章
相關標籤/搜索