Activiti學習系列一

工作流的概念

解決“使在多個參與者之間按照某種預定義的規則傳遞文檔、信息或人物的過程自動進行,從而實現某個預期的業務目標,或者促使此目標的實現”。

核心API

ProcessEngine

1、在Activiti中最核心的類,其他的類都是由他而來
2、產生方式

  • ProcessEngine processEngine = ProcessEngineConfiguration.createProcessEngineConfigurationFromResource("activiti.cfg.xml").buildProcessEngine();//配置引擎通過配置文件獲取對象
  • ProcessEngine processEngine = ProcessEngines.getDefaultProcessEngine();

3、提供的服務

//流程入的部署 修改 刪除的服務 act_ge_bytearray act_re_deployment act_re_model act_re_procdef
RepositoryService repositoryService1 = processEngine.getRepositoryService();
//流程的運行
RuntimeService runtimeService = processEngine.getRuntimeService();
TaskService taskService = processEngine.getTaskService();
//查詢歷史紀錄
HistoryService historyService = processEngine.getHistoryService();
//頁面表單的服務(不常用)
FormService formService = processEngine.getFormService();
//對工作流的用戶管理的表的操作
IdentityService identityService = processEngine.getIdentityService();
//管理器
ManagementService managementService = processEngine.getManagementService();
RepositoryService

是Activiti的倉庫類。所謂的倉庫指流程定義文檔的兩個文件,bpmn文件和流程圖片。

作用
  • 管理流程定義文件xml及靜態資源的服務
  • 對特定流程的暫停和激活
  • 流程定義啓動權限管理
基礎API
  • 部署文件構造器DeploymentBuilder(對資源的封裝)
  • 部署文件查詢器DeploymentQuery(查詢部署的一些操作)
  • 流程定義文件查詢對象ProcessDefinitionQuery
  • 流程部署文件對象Deployment
  • 流程定義文件對象ProcessDefinition
  • 流程定義的java格式BpmnModel

1、產生方式

RepositoryService repositoryService1 = processEngine.getRepositoryService();

2、可以產生DeploymentBuilder,用來定義流程部署的相關參數

DeploymentBuilder builder = repositoryService.createDeployment();

3、刪除流程定義

repositoryService.deleteDeployment(deploymentId);
RuntimeService

是activiti的流程執行服務類,可以從這個服務類中獲取很多關於流程執行相關的信息

ProcessDefinition

流程定義文件類,可以從這裏獲得資源文件等。

ProcessInstance

流程實例,某一個具體的流程,通過RepositoryService部署某個流程,再通過部署的流程的id獲取流程定義文件,最後通過ProcessDefinition的實例的id,使用runtimeService得到ProcessInstance的具體實例。

demo
public class DemoMain {
    private static final Logger LOGGER = LoggerFactory.getLogger(DemoMain.class);

    public static void main(String[] args) throws ParseException {
        System.out.println("啓動程序");
        System.out.println();
        //創建流程引擎
//        ProcessEngine processEngine = getProcessEngine();
        ProcessEngineConfiguration cfg = ProcessEngineConfiguration.createStandaloneInMemProcessEngineConfiguration();
        ProcessEngine processEngine = cfg.buildProcessEngine();
        String name = processEngine.getName();
        String version = processEngine.VERSION;

        System.out.printf("流程引擎[%s],版本[%s]",name,version);
        System.out.println();
        //部署流程定義文件
//        ProcessDefinition processDefinition = getProcessDefinition(processEngine);
        RepositoryService repositoryService = processEngine.getRepositoryService();
        DeploymentBuilder builder = repositoryService.createDeployment();
        builder.addClasspathResource("diagrams/check.bpmn");
        Deployment deploy = builder.deploy();
        String id = deploy.getId();
        //獲取流程定義文件
        ProcessDefinition processDefinition = repositoryService.createProcessDefinitionQuery().deploymentId(id).singleResult();
        System.out.printf("流程定義文件[%s],流程id[%s]",processDefinition.getName(),processDefinition.getId());
        System.out.println();

        //啓動運行流程
//        ProcessInstance processInstance = startRuntimeService(processEngine, processDefinition);
        RuntimeService runtimeService = processEngine.getRuntimeService();
        ProcessInstance processInstance = runtimeService.startProcessInstanceById(processDefinition.getId());
        System.out.printf("啓動流程:[%s]",processInstance.getProcessDefinitionKey());
        System.out.println();

        //處理流程任務
        Scanner scanner = new Scanner(System.in);
        while (processInstance!=null && !processInstance.isEnded()) {
            TaskService taskService = processEngine.getTaskService();
            List<Task> list = taskService.createTaskQuery().list();
            System.out.printf("待處理任務數量:[%s]",list.size());
            System.out.println();
            for(Task task : list){
                System.out.printf("待處理任務:[%s]",task.getName());
                System.out.println();
                FormService formService = processEngine.getFormService();
                TaskFormData taskFormData = formService.getTaskFormData(task.getId());
                List<FormProperty> formProperties = taskFormData.getFormProperties();
                Map<String,Object> map = new HashMap<String,Object>();
                for(FormProperty property : formProperties){
                    String line = null;
                    if(StringFormType.class.isInstance(property.getType())){
                        System.out.printf("請輸入{%s}:",property.getName());
                        System.out.println();
                        line = scanner.nextLine();
                        map.put(property.getId(),line);
                    }else if(DateFormType.class.isInstance(property.getType())){
                        System.out.printf("請輸入%s格式 (yyyy-MM-dd): ",property.getName());
                        System.out.println();
                        line = scanner.nextLine();
                        SimpleDateFormat simpleDateFormat = new SimpleDateFormat("yyyy-MM-dd");
                        Date parse = simpleDateFormat.parse(line);
                        map.put(property.getId(),parse);
                    }else {
                        System.out.printf("類型暫不支持%s",property.getType());
                        System.out.println();
                    }
                    System.out.printf("您輸入的內容是: [%s]",line);
                    System.out.println();
                }
                taskService.complete(task.getId(),map);
                processInstance = processEngine.getRuntimeService().createProcessInstanceQuery().processInstanceId(processInstance.getId()).singleResult();
            }
        }

        System.out.println("結束程序");

    }

}

各個服務啓用時會操作的數據庫

在這裏插入圖片描述

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章