Activiti6.0 (7) Assignment link handler

Tabla de contenido

I. Panorama general

Dos, tres formas de distribución

1. Designación del diagrama de flujo

2. Utilice variables de proceso

3. Utilice el detector de nodos

Tres, resumen


I. Panorama general

Cuando se utiliza el proceso, el punto central y más importante es la asignación de personal, quién puede ver, quién puede manejar, etc. El negocio se basa en la asignación de personal. Hay aproximadamente tres formas de asignar personal en Activiti, que se presentan una por una a continuación.

 

Dos, tres formas de distribución

1. Designación del diagrama de flujo

Es decir, cuando se configura la definición del proceso, el procesador se designa para el enlace, de la siguiente manera:

Todos los casos de la serie anterior usan este método, que es simple y conveniente como demostración, pero es muy indeseable escribir el controlador en xml. En las aplicaciones reales, Activiti se usa principalmente como motor subyacente y como motor de nivel superior diseño y modelo de diagrama de flujo Toda la información, como la configuración, puede ser establecida por el lado comercial. Aunque el lado comercial establece el alcance del procesador primero al configurar, luego puede ser asignado por el procesador anterior, reclamado activamente, asignado aleatoriamente, designado por el iniciador, etc. Hay muchas formas de asignar los controladores del enlace, por lo que cuando se ejecuta Activiti, los controladores deben asignarse de manera flexible, generalmente a través del segundo método.

2. Utilice variables de proceso

Al definir el diagrama de flujo, asigne procesadores en forma de variables. En la circulación real, las variables deben ser transmitidas de manera transparente para que Activiti pueda analizarlas y reemplazarlas automáticamente. La configuración es la siguiente:

El uso es similar al de la serie anterior, simplemente pase la variable como parámetro cuando el proceso esté circulando, y el código no se publicará aquí.

3. Utilice el detector de nodos

Primero, necesita personalizar una clase de escucha para implementar la interfaz TaskListener de Activiti:

package activiti.activiti.listener;

import org.activiti.engine.delegate.DelegateTask;
import org.activiti.engine.delegate.TaskListener;

/**
 * Created by xujia on 2020/2/6
 */
public class AssigneeListener implements TaskListener {

    /**
     * 设置任务的处理人
     * @param delegateTask
     */
    @Override
    public void notify(DelegateTask delegateTask) {
        delegateTask.setAssignee("张三");
    }
}

Luego configúrelo en el diagrama de flujo:

Complete la ruta completa de la clase personalizada en el lado de la realización. Aquí presentaremos los tipos de eventos de TaskListener. Hay cuatro tipos en total. El orden de ejecución específico se describirá a continuación:

  • crear: Creación de tareas.
  • asignación: después de que la tarea se asigne a alguien, solo se activará cuando el controlador esté configurado y el controlador cambie.
  • complete: se activa después de que se completa la tarea y antes de que se elimine de los datos de tiempo de ejecución.
  • eliminar: ocurre antes de que la tarea esté a punto de eliminarse.

Las principales diferencias en xml son las siguientes:

<userTask id="sid-042D76FB-6812-4099-A8E1-3CCC4A8D1896" name="直属经理审批" default="sid-A37138F4-6D40-4EB7-961A-0242D63D8F9D">
      <extensionElements>
        <activiti:taskListener event="create" class="activiti.activiti.listener.AssigneeListener"></activiti:taskListener>
      </extensionElements>
    </userTask>

Después de la configuración, ejecute la prueba de código y encontrará que el procesador se ha configurado correctamente en "Zhang San" y que "Zhang San" está correctamente asignado cuando el proceso comienza a crear una tarea.

    @Test
    public void multiBranchDemoTest() {
        // 1、发布流程
        Deployment deployment = repositoryService.createDeployment().name("多分支请假流程").addClasspathResource("processes/vocationDemo2.bpmn20.xml").deploy();

        // 2、启动一个流程实例
        ProcessInstance processInstance = runtimeService.startProcessInstanceByKey("vocation", variables);

    }

 

Tres, resumen

El primer método es relativamente rígido y no es adecuado para el uso real. Los dos últimos son más flexibles y se pueden seleccionar en el uso real. Personalmente, creo que es mejor usar variables. Después de todo, se especifican durante el flujo del proceso. .

 

Supongo que te gusta

Origin blog.csdn.net/m0_38001814/article/details/104194528
Recomendado
Clasificación