Introducción a varias API de uso común del flujo de trabajo de Activiti y análisis de tablas

Activiti tiene varias API de uso común

1ProcessEngineConfiguration se usa para generar objetos centrales de ProcessEngine, lo que me da una sensación similar a la configuración en Hibernate.

//通过ProcessEngineConfiguration来生成ProcessEngine流程引擎对象    
public void generateTables(){
        ProcessEngineConfiguration configuration = ProcessEngineConfiguration.createStandaloneProcessEngineConfiguration();
        configuration.setJdbcDriver("oracle.jdbc.driver.OracleDriver");
        configuration.setJdbcUrl("jdbc:oracle:thin:@localhost:1521:xe");
        configuration.setJdbcUsername("qsw");
        configuration.setJdbcPassword("admin");
        //设置自动建表,一共生成25张表
     configuration.setDatabaseSchemaUpdate(ProcessEngineConfiguration.DB_SCHEMA_UPDATE_TRUE);
        configuration.buildProcessEngine();
    }

2Objeto de servicio de repositorio

a.RepositoryService se obtiene a través de ProcessEngine

b.RepositoryService se utiliza principalmente para operar la implementación y definición del proceso de operación y consultar la información de definición y implementación del proceso. Incluye principalmente cuatro tablas: act_re_deployment (información de implementación del proceso), act_re_procdef (información de definición del proceso) y act_ge_bytearray (el diagrama de flujo se almacena en él), act_ge_property (que involucra el número de versión del proceso)

Varias funciones comunes de c.RepositoryService:

  1. Despliegue y definición de procesos.
    @Test
    public void deployProcess(){
        //只部署bmpn文件(数据库保存的时候自动生成图片)
//        repositoryService.createDeployment()
//                .addClasspathResource("diagrams/leave.bpmn")
//                .name("请假流程")
//                .deploy();
        //部署bpmn文件和图片,数据库不会自动生成图片,会使用你上传的图片
        Deployment deploy = repositoryService.createDeployment()
                .addClasspathResource("diagrams/leave.bpmn")
                .addClasspathResource("diagrams/leave.png")
                .name("请假流程")
                .deploy();
        System.out.println(deploy.getId()+","+deploy.getName()+","+deploy.getDeploymentTime());

    }

 

 

2.RepositoryService se utiliza para consultar información de implementación de procesos e información de definición de procesos.

//查询流程部署的信息
 public void queryDeployment(){
        List<Deployment> deployments = repositoryService.createDeploymentQuery()
                .deploymentId("1")
                .deploymentName("请假流程").list();
        for (Deployment dep :
                deployments) {
            System.out.println(dep.getId()+","+dep.getName());
        }
    }
 //流程定义信息的查询
    @Test
    public void queryProcessDefined(){
        List<ProcessDefinition> list = repositoryService.createProcessDefinitionQuery().list();
        for (ProcessDefinition definition :
             list) {
            System.out.println(definition.getId()+","+definition.getDeploymentId());
        }
    }

3. Diagrama de flujo de consultas

  @Test
    public void queryProcessPicture() throws IOException {
        InputStream is = repositoryService.getProcessDiagram("leaveProcess:2:2504");
        OutputStream os = new FileOutputStream("e:/demo.png");
        FileUtil.copyStream(is,os);
    }

4. Eliminación de la definición del proceso (el código no se demostrará aquí...)

5. Modificación de la definición del proceso. Tenga en cuenta que la definición del proceso no se puede modificar una vez implementada. Puede volver a implementar una.

 

3.Objeto RuntimeService

a. Se utiliza principalmente para la gestión de la ejecución (incluidas operaciones como iniciar, avanzar y eliminar instancias de proceso), involucrando principalmente las tablas act_ru_execution (ejecución de instancias de proceso), ACT_RU_TASK (tareas de instancia de proceso), ACT_RU_IDENTITYLINK (tareas correspondientes a instancias de proceso) agente) , ACT_HI_ACTINST (el historial de actividad de la instancia del proceso, la actividad aquí se refiere al nombre colectivo de cada punto de actividad en todo el proceso desde el punto de inicio hasta el punto final), ACT_HI_TASKINST (historial de tareas, la tarea se refiere al líder en bpmn de cuadrados)

b. Cabe señalar que la definición de proceso y la instancia de proceso no son el mismo concepto, al igual que el dibujo de diseño de un automóvil y el automóvil no son el mismo concepto. Una definición de proceso puede iniciar múltiples instancias de proceso "nuevas".

C. Varias operaciones comunes de RuntimeService

1. Inicie la instancia del proceso (se puede iniciar según la identificación de la definición del proceso, la clave de la definición del proceso y el nombre del mensaje),

    //流程的启动(流程实例的启动)
    @Test
    public void processInstanceStart(){
        //1通过流程定义的id
//        ProcessInstance processInstance = runtimeService.startProcessInstanceById("leaveProcess:2:2504");
//        System.out.println("流程实例的id"+processInstance.getId()+",流程实例的名字"+processInstance.getName());
//        System.out.println("流程实例对应的流程定义"+processInstance.getProcessDefinitionId());
        //通过流程定义的key来启动
        ProcessInstance leaveProcess = runtimeService.startProcessInstanceByKey("leaveProcess");
        System.out.println("流程实例的id"+leaveProcess.getId()+",流程实例的name"+leaveProcess.getName());
        System.out.println("流程定义的name"+leaveProcess.getProcessDefinitionKey());

    }

2. Consulta de instancias de proceso (ya no codificaré, después de todo, conozco RepositoryService, así que aquí están las rutinas básicas...)

3. Coordenadas del nodo actual del proceso (ver la ubicación donde se está ejecutando el proceso actual)

  //获取当前流程的节点坐标,为了让用户能够看到当前流程执行到哪个活动点,可以获取图像信息,在页面中通过div来给当前所在节点进行标红
    //单个节点
    @Test
    public void getActiveNodeZuoBiao(){
        String act_id = "doApplicate";
        GraphicInfo info = repositoryService.getBpmnModel("leaveProcess:2:2504").getGraphicInfo(act_id);
        System.out.println("宽度"+info.getWidth());
        System.out.println("高度"+info.getHeight());
        System.out.println("x轴"+info.getX());
        System.out.println("y轴"+info.getY());
    }

4 Eliminación forzada de instancias de proceso (escenario de solicitud, por ejemplo, Xiao Wang solicitó la renuncia, pero se arrepintió e inmediatamente revocó la solicitud de renuncia ...)

 //流程实例的硬性删除
    @Test
    public void deleteProcessInstance(){
        runtimeService.deleteProcessInstance("5001","操作失误,不想离职");
    }

4.Objeto TaskServcie (utilizado principalmente para manejar tareas personales, las tablas involucradas son act_ru_task, act_hi_taskinst)

Ver tareas pendientes personales

 //查询个人待办任务
    @Test
    public void querySelfUncompleteTask(){
        List<Task> tasks = taskService.createTaskQuery()
                .taskAssignee("张三")
                .list();
        for (Task task :
                tasks) {
            System.out.println(task.getId()+","+task.getAssignee());
        }
    }

Tareas personales pendientes completadas

  //完成个人代办任务
    @Test
    public void completeTask(){
        taskService.complete("7504"); //任务id去act_hi_taskinst表中获取
    }
}

 

Además, existen HistoryService (administración del historial), IdentityService (administración de la organización), FormService (administración del formulario de tareas) y ManagerService. No los enumeraré uno por uno. Las API anteriores son las más utilizadas. Personalmente, creo que habrá sé uno y los demás seguirán. Sí, pero hay que estar familiarizado con esas 25 tablas.

Supongo que te gusta

Origin blog.csdn.net/qsw2lw/article/details/90224919
Recomendado
Clasificación