Uso básico de Activiti

Tabla de contenido

1. Uso de Actividades

1.1, soporte de base de datos

1.2, Entorno de actividad

1.2.1 Introducción de dependencias

1.2.2 Añadir configuración

1.2.3, iniciar el proyecto

1.2.4, introducción a la tabla de la base de datos

1.3, interfaz de servicio de servicio común de Activiti

1.4 Herramienta de diseño de procesos

1.4.1 Descargar activiti-explorer

1.4.2 Descomprimir y obtener el paquete de implementación

1.4.3, departamento activiti-explorer.war

1.4.4 Visita activiti-explorer

2. Operación del proceso de actividad

2.1 Definición del proceso

2.1.1 Crear un nuevo modelo

2.1.2 Nodo de inicio

2.1.3 Nodos de tareas

2.1.4 Nodo final

2.1.5 Establecer propiedades de nodo

2.1.6, guarde el modelo de definición de proceso

2.1.7 Descargar archivo de definición de proceso

2.1.8 Descargar imagen de definición de proceso

2.1.9 Poner archivos de recursos en el proyecto

2.2 Despliegue de definición de procesos

2.2.1 Método de implementación de archivo único

2.2.2 Método de implementación del paquete comprimido

2.2.3 Tabla de la base de datos de operaciones

2.3 Iniciar la instancia del proceso

2.4 Tarea de consulta

2.5, procesando la tarea actual

2.6 Consulta de tareas procesadas

2.7 Otras interfaces (entender)


1. Uso de Actividades

1.1, soporte de base de datos

Para comenzar, consulte: Primeros pasos con Activiti_Relievedz's Blog-CSDN Blog

La operación de Activiti debe tener el soporte de la base de datos, las bases de datos soportadas son: mysql, oracle, postgres, mssql, db2, h2

1.2, Entorno de actividad

Explicamos directamente la introducción a Activiti en el proyecto actual: guigu-oa-parent

1.2.1 Introducción de dependencias

<!--引入activiti的springboot启动器 --> 
<dependency> 
    <groupId>org.activiti</groupId> 
    <artifactId>activiti-spring-boot-starter</artifactId> 
    <version>7.1.0.M6</ versión> 
    <exclusiones> 
        <exclusión 
            > <artifactId>mybatis</artifactId> 
            <groupId>org.mybatis</groupId> 
        </exclusion> 
    </exclusions> 
</dependency>

Descripción: después de la integración de Activiti7 y SpringBoot, el marco de seguridad de SpringSecurity se integra de manera predeterminada. Actualmente, nuestro proyecto ha integrado SpringSecurity. Al configurar el aprobador en casos posteriores, debe ser un usuario del sistema. El marco de Activiti verificará si el usuario existe, de lo contrario ocurrirá una excepción Seguimiento Puede probarlo en el caso.

1.2.2 Añadir configuración

Se ha agregado el proyecto de fuente de datos, solo necesita la siguiente configuración

spring:     
    activiti: 
      # false: por defecto, la tabla de la base de datos permanece sin cambios, pero si la versión es incorrecta o falta la tabla, se lanzará una excepción (uso de producción) # true: la 
      tabla no existe, se creará automáticamente (uso de desarrollo) 
      # create_drop: creado al inicio, cerrado Eliminar la tabla a la vez (uso de prueba) 
      # drop_create: eliminar la tabla al inicio y crear la tabla (no es necesario apagar manualmente el motor) 
      actualización del esquema de la base de datos : verdadero 
      #Supervise si existe la tabla de historial, actividades7 no abre la tabla de historial de forma predeterminada 
      db-history-used: verdadero 
      #none: No guarde ningún dato histórico, que es lo más eficiente en el proceso 
      #actividad: solo guarde el instancia del proceso y comportamiento del proceso 
      #auditoría: guarde todas las tareas del proceso y sus atributos además de la actividad, la auditoría es el valor predeterminado del historial 
      # completo: además de la auditoría, también guarda todos los demás datos detallados relacionados con el proceso, incluidos algunos procesos parámetros 
      nivel de historial: completo 
      #Compruebe el archivo de proceso, verifique el archivo de proceso de la carpeta de proceso en recursos de forma predeterminada 
      check-process-definitions: true

1.2.3, iniciar el proyecto

Inicie el proyecto para generar la tabla de la base de datos del proyecto.

1.2.4, introducción a la tabla de la base de datos

El soporte de operación de Activiti debe tener el soporte de estas 25 tablas, principalmente para registrar los sujetos de usuario que participan en el proceso, la información del grupo de usuarios, la definición del proceso, la información de ejecución del proceso y la información histórica del proceso durante la operación del proceso comercial, etc.

1. Reglas y funciones de nomenclatura de tablas

Al observar las tablas creadas, encontramos que todas las tablas de Activiti comienzan con act_, seguido de un identificador de dos letras que indica el propósito de la tabla, que también corresponde a la API del servicio proporcionado por Activiti:

  • ACT_RE: RE significa repositorio, la tabla de prefijos contiene la definición del proceso y los recursos estáticos del proceso (imágenes, reglas, etc.)

  • ACT_RU: RU representa el tiempo de ejecución. Cuando estas tablas se están ejecutando, contendrán datos en curso, como instancias de proceso, tareas, variables y tareas asíncronas. Activiti solo guarda estos datos durante la ejecución de la instancia del proceso y elimina estos registros al final del proceso. De esta manera, la mesa siempre se puede mantener pequeña y rápida.

  • ACT_HI: HI significa historial, estas tablas contienen algunos datos históricos, como instancias históricas de procesos, variables, tareas, etc.

  • ACT_GE: GE significa datos generales, generales

2. Introducción a la tabla de datos de Activiti

clasificación de tablas Nombre de la tabla explicar
informacion General
[ACT_GE_BYTEARRAY] Definiciones genéricas de procesos y recursos de procesos
[ACT_GE_PROPIEDAD] propiedades relacionadas con el sistema
Historial de procesos
[ACT_HI_ACTINST] Ejemplos de procesos históricos
[ACT_HI_ATTACHMENT] Archivos adjuntos de procesos históricos
[ACT_HI_COMMENT] información histórica descriptiva
[ACT_HI_DETALLE] Información detallada sobre las ejecuciones de procesos históricos
[ACT_HI_IDENTITYLINK] Relación de usuario durante la ejecución del proceso histórico
[ACT_HI_PROCINST] Ejemplos de procesos históricos
[ACT_HI_TASKINST] Ejemplos de tareas históricas
[ACT_HI_VARINST] Información variable en el proceso histórico en ejecución
Tabla de definición de procesos
[ACT_RE_Implementación] Información de la unidad de implementación
[ACT_RE_MODELO] información del modelo
[ACT_RE_PROCDEF] Definición de proceso implementado
ejecutar tabla de instancias
[ACT_RU_EVENT_SUBSCR] eventos de tiempo de ejecución
[ACT_RU_EJECUCIÓN] Instancia de ejecución de proceso en tiempo de ejecución
[ACT_RU_IDENTITYLINK] Información de relación de usuario en tiempo de ejecución, almacenamiento de información sobre participantes y nodos de tareas
[ACT_RU_JOB] trabajo en tiempo de ejecución
[ACT_RU_TAREA] tarea en tiempo de ejecución
[ACT_RU_VARIABLE] tabla de variables de tiempo de ejecución

1.3, interfaz de servicio de servicio común de Activiti

Introduzca brevemente las clases de implementación de cada Servicio:

  • Servicio de repositorio

    Clase de administración de recursos de Activiti, que es responsable de implementar definiciones de procesos y administrar recursos de procesos. Al usar Activiti, la implementación del proceso debe completarse primero y el diagrama de flujo comercial diseñado por la herramienta de modelado se implementará a través de RepositoryService.

  • RuntimeService

    La clase de gestión de operaciones de procesos de Activiti se utiliza para iniciar una nueva instancia de proceso y obtener información relevante sobre la ejecución del proceso. La definición de proceso se utiliza para determinar la estructura y el comportamiento de cada nodo en un proceso, y la instancia de proceso es una ejecución de la definición de proceso correspondiente, que puede entenderse como la relación entre clases y objetos en Java.

  • Servicio de tareas

    La clase de administración de tareas de Activiti se usa para manejar varias tareas en las operaciones comerciales, como consultar tareas asignadas a usuarios o grupos, crear nuevas tareas, asignar tareas, determinar y completar una tarea.

  • HistorialServicio

    La clase de gestión de historial de Activiti puede consultar información histórica. Al ejecutar un proceso, el motor guardará una gran cantidad de datos, como la hora de inicio de la instancia del proceso, los participantes de la tarea, el tiempo para completar la tarea, la ruta de ejecución de cada instancia del proceso, etc. Este servicio obtiene principalmente estos datos a través de la función de consulta.

  • Servicio de Administracion

    La clase de gestión del motor de Activiti proporciona funciones de gestión y mantenimiento para el motor de procesos de Activiti. Estas funciones no se utilizan en aplicaciones basadas en flujos de trabajo y se utilizan principalmente para el mantenimiento diario del sistema Activiti.

1.4 Herramienta de diseño de procesos

La versión de IDEA es inferior o igual a 2019, y se puede usar el complemento Activiti actiBPM. IDEA más grande que esta versión puede usar el complemento del visualizador Activiti BPMN para dibujar el diseño del proceso.

Hoy nuestra protagonista es: Activiti Modeler

Activiti Modeler es un complemento de front-end para el diseño de procesos en línea proporcionado oficialmente por Activiti. Los desarrolladores pueden diseñar fácilmente procesos en línea, guardar modelos de procesos, implementar definiciones de procesos, etc. Nuestros proyectos posteriores también integran Activiti Modeler para dibujar definiciones de procesos.

1.4.1 Descargar activiti-explorer

Descarga del sitio web oficial: Empezar | Activiti

1.4.2 Descomprimir y obtener el paquete de implementación

Descomprima activiti-5.22.0.zip y obtenga activiti-explorer.war en el directorio activiti-5.22.0\wars

1.4.3, departamento activiti-explorer.war

Coloque activiti-explorer.war en el directorio de implementación de tomcat e inicie tomcat

Ruta de inicio: haga doble clic en startup.bat

1.4.4 Visita activiti-explorer

http://localhost:8080/activiti-explorador

Cuenta de inicio de sesión predeterminada: kermit kermit

Hay muchas funciones arriba, solo debemos prestar atención al diseño del proceso, como se muestra en la figura a continuación:

Haga clic en la imagen de arriba: Proceso --> Nuevo modelo --> Ingrese el nombre del modelo (salir) --> Crear

2. Operación del proceso de actividad

2.1 Definición del proceso

Definimos un proceso de salida

2.1.1 Crear un nuevo modelo

2.1.2 Nodo de inicio

2.1.3 Nodos de tareas

2.1.4 Nodo final

2.1.5 Establecer propiedades de nodo

Especifique el nombre de la etiqueta: Aprobación de Zhang San, líder de la tarea del nodo: zhangsan

 

 Especifique el nombre de la etiqueta: Aprobación de Li Si, líder de la tarea del nodo: lisi

2.1.6, guarde el modelo de definición de proceso

2.1.7 Descargar archivo de definición de proceso

 El archivo de descarga es: qingjia.bpmn20.xml

2.1.8 Descargar imagen de definición de proceso

Haga clic derecho en la imagen de arriba, guarde la imagen como: qingjia.png

2.1.9 Poner archivos de recursos en el proyecto

Cree una nueva carpeta de recursos de proceso en los recursos del módulo service-oa

Coloque qingjia.bpmn20.xml y qingjia.png en el directorio de procesos

2.2 Despliegue de definición de procesos

La implementación del proceso definido anteriormente en el diseñador en la base de datos de actividades es la implementación de la definición del proceso. Agregue e implemente los archivos bpmn y png de la definición del proceso en activiti uno por uno llamando a la API de activiti, o empaquete los dos archivos en un paquete zip para su implementación.

2.2.1 Método de implementación de archivo único

paquete com.atguigu.auth.activiti; 

importar org.activiti.engine.RepositoryService; 
importar org.activiti.engine.repository.Deployment; 
importar org.junit.jupiter.api.Test; 
importar org.springframework.beans.factory.annotation .Autowired; 
import org.springframework.boot.test.context.SpringBootTest; 

/** 
 * @program: guigu-oa-perent 
 * @description: definición de proceso 
 * @author: Mr.Zhang 
 * @create: 2023-04-20 09:50 
 **/ 
@SpringBootTest 
public class ProcessTest { 

    //Inject RepositoryService 
    @Autowired 
    private RepositoryService repositoryService; 

    /** 
     * Método de implementación de archivo único 
     */ 
    @Test
    public void deploymentProcess() { 
        //Procesar implementación 
        Implementación deployment = repositoryService.createDeployment() 
                .addClasspathResource("process/qingjia.bpmn20.xml") 
                .addClasspathResource("process/qingjia.png") 
                .name("Dejar proceso de aplicación" ) 
                .deploy(); 
        System.out.println(implementar.getId()); 
        System.out.println(implementar.getName()); 
    } 
}

Si se informa un error y no se puede encontrar la imagen, agréguela al pom:

<incluir>**/*.png</incluir>

éxito:

 

2.2.2 Método de implementación del paquete comprimido

/** 
 * Método de implementación del paquete Zip 
 */ 
@Test 
public void deploymentProcessByZip() { 
    // Definir flujo de entrada zip 
    InputStream inputStream = this 
            .getClass() 
            .getClassLoader() 
            .getResourceAsStream( 
                    "process/qingjia.zip"); 
    ZipInputStream zipInputStream = new ZipInputStream(inputStream); 

    // Proceso de implementación Implementación de implementación 
    = repositoryService.createDeployment() 
            .addZipInputStream(zipInputStream) 
            .name("Dejar el proceso de la aplicación") 
            .deploy(); 
    System.out.println("Id. de implementación del proceso:" + despliegue.getId());  
    System.out.println("Nombre de implementación del proceso: " + deployment.getName());
}

2.2.3 Tabla de la base de datos de operaciones

Las tres tablas para las actividades operativas después de implementar la definición del proceso son las siguientes:

El proceso act_re_deployment define la tabla de implementación, agregando un registro para cada implementación

tabla de definición de proceso act_re_procdef, la implementación de cada nueva definición de proceso agregará un registro a esta tabla

tabla de recursos del proceso act_ge_bytearray

2.3 Iniciar la instancia del proceso

Definición de proceso: coloque el archivo bpmn en las tres tablas de actividades, como una instancia de proceso de clase en java: como un objeto de instancia en java (una definición de proceso puede corresponder a varias instancias de proceso), Zhang San puede iniciar un proceso de salida Ejemplo, Li Si también pueden iniciar una instancia de proceso de salida, no se afectan entre sí

@Autowired 
private RuntimeService runtimeService; 

@Test 
public void startUpProcess() { 
    //Para crear una instancia de proceso, necesitamos conocer la clave de la definición del proceso 
    ProcessInstance processInstance = runtimeService.startProcessInstanceByKey("qingjia"); 
    //Enviar la información relevante de la instancia 
    System.out.println("Id. de definición de proceso: " + processInstance.getProcessDefinitionId()); 
    System.out.println("Id. de instancia de proceso: " + processInstance.getId()); 
    System.out.println(" ID de actividad actual: " + processInstance .getActivityId()); 
}

Hoja de datos operativos

act_hi_actinst historial de ejecución de la instancia del proceso

Act_hi_identitylink procesa la información del historial del usuario participante

act_hi_procinst información histórica de instancia de proceso

act_hi_taskinst información del historial de tareas del proceso

act_ru_execution información de ejecución del proceso

Información del usuario participante del proceso act_ru_identitylink

información de la tarea act_ru_task

2.4 Tarea de consulta

Cada nodo se configura con Asignatario, luego de iniciado el proceso, el responsable de la tarea puede consultar las tareas que necesita procesar actualmente, y las tareas que se consultan son todas tareas pendientes del usuario.

@Autowired 
private TaskService taskService; 
​/
** 
 * Consultar las tareas que debe ejecutar la persona actual 
 */ 
@Test 
public void findPendingTaskList() { 
    //Líder de tareas 
    String asignado = "zhangsan"; 
    List<Task> list = taskService. createTaskQuery( ) 
            .taskAssignee(assignee)//Solo consulta las tareas de la persona a cargo de la 
            tarea.list(); 
    for (Tarea tarea : lista) { 
        System.out.println("Id de instancia de proceso: " + tarea. getProcessInstanceId()); 
        System .out.println("ID de la tarea: " + task.getId()); 
        System.out.println("Propietario de la tarea: " + task.getAssignee()); 
        System.out.println(" Nombre de la tarea: " + tarea. getName()); 
    } 
}

ilustrar:

ID de instancia de proceso: solo hay un proceso, que identifica el proceso

Identificación de la tarea: cada vez que el proceso llega a un determinado nodo, se le asignará una identificación de la tarea a este nodo

La salida es la siguiente:

Id. de instancia de proceso: d969f534-825e-11ed-95b4-7c57581a7819 Id. de tarea: d96c3f28-825e-11ed-95b4-7c57581a7819 Líder de la tarea: zhangsan Nombre de la tarea: aprobación de Zhang San

2.5, procesando la tarea actual

El líder de la tarea consulta las tareas pendientes, selecciona las tareas para procesar y completa las tareas.

/** 
 * Completar la tarea 
 */ 
@Test 
public void completTask(){ 
    Task task = taskService.createTaskQuery() 
            .taskAssignee("zhangsan") //La persona encargada de ser consultada.singleResult 
            ();//Devolver un piece 
​//
    Complete la tarea, parámetro: id de tarea 
    taskService.complete(task.getId()); 
}

Una vez completada la tarea, la tarea pasa automáticamente al siguiente nodo

2.6 Consulta de tareas procesadas

obtenerNombre()); 
    } 
}

2.7 Otras interfaces (entender)

/** 
 * Consulta de definición de proceso 
 */ 
@Test 
public void findProcessDefinitionList(){ 
    List<ProcessDefinition> definitionList = repositoryService.createProcessDefinitionQuery() 
            .orderByProcessDefinitionVersion() 
            .desc() 
            .list(); 
    //Información de definición de proceso de salida 
    para (ProcessDefinition processDefinition : definitionList) { 
        System.out.println("id de definición de proceso="+processDefinition.getId()); 
        System.out.println("nombre de definición de proceso="+processDefinition.getName()); 
        System.out.println ("clave de definición de proceso="+processDefinition.getKey()); 
        System.out.println("versión de definición de proceso="+processDefinition.getVersion());
        System.out.println("Process deployment ID ="+processDefinition.getDeploymentId()); } } 
    ​/ 
** 
*
 
 Eliminar definición de proceso 
 */ 
public void deleteDeployment() { 
    //Id. de implementación 
    String deploymentId = "82e3bc6b-81da- 11ed-8e03-7c57581a7819"; 
    //Elimine una definición de proceso, si la definición de proceso ya tiene una instancia de proceso iniciada, se producirá un error al eliminar 
    repositoryService.deleteDeployment(deploymentId); 
    //Establezca verdadero para eliminar en cascada la definición de proceso, incluso si el proceso tiene una instancia de proceso iniciada También se puede eliminar, configurarlo como falso eliminación sin nivel 
    //repositoryService.deleteDeployment(deploymentId, true); 
}

Supongo que te gusta

Origin blog.csdn.net/Relievedz/article/details/130244209
Recomendado
Clasificación