Activiti針對工做流的一系列操做,都封裝在他的服務組件當中,所以要學習activiti,首先要作的就是學習瞭解他的經常使用服務組件。java
如何理解服務組件之間的關係,必須先從工做流的使用角度來理解。spring
以報銷流程爲例:數據庫
工做流並非憑空出現的,並非員工提起報銷請求,系統就毫無根據的生成了工做流。而是須要管理員來規定報銷這個工做流中各個環節,各個條件。那麼管理員如何來使用activiti來定義一個新的工做流呢?RepositoryService爲咱們提供了與此相關的一系列方法,可讓咱們可以定義工做流並將工做流部署到服務器當中去。能夠將RepositoryService理解爲建立java面向對象思想中的類。服務器
當有了一個流程的定義,員工如何去申請一個報銷流程呢,由於每個員工狀況都不同,他們都須要有個獨立的流程來解決各自的問題(相似於java中的對象)。RuntimeService爲咱們提供了相應的方法,來根據一個流程定義去建立流程實例,並能夠對流程實例進行一系列的操做。ide
此處還有一個task的概念,task能夠理解爲咱們流程圖中的一個審批任務(節點),一個流程實例只要被建立了而且尚未結束,就一個其中某一個節點上。而咱們也可使用RuntimeService來獲取咱們流程當前所處於task。而TaskService則能夠對task進行完成、管理各類操做。學習
此外activiti還經過IdentityService提供給咱們了統一管理提起流程、參與流程的全部用戶和用戶組的一系列方法,並容許經過taskService中的方法爲task設定系統中的審批用戶或者用戶組。spa
而HistoryService則是由於咱們有時須要查詢已經走徹底部流程的流程實例,他給咱們提供一系列操做歷史數據的方法。code
ManagementService和DynamicBpmnService暫時用到的還比較少,之後再補充。//todoorm
普通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;