Subproceso Activiti6.0 (doce)

Tabla de contenido

I. Panorama general

En segundo lugar, el subproceso

1. Subproceso integrado

2. Invocar el subproceso

3. Subproceso de evento

Tres, resumen


I. Panorama general

Los subprocesos son actividades que incluyen otras actividades, pasarelas, eventos, etc., que en sí mismos constituyen un proceso y son parte de un proceso más amplio. El subproceso está completamente definido en el proceso padre (por eso a menudo se le llama subproceso integrado), el subproceso también es un requisito común en los escenarios comerciales reales.

Activiti proporciona la implementación de tres subprocesos, que son  subprocesos integrados, subprocesos de llamada y subprocesos de eventos , que se presentan a continuación.

En segundo lugar, el subproceso

1. Subproceso integrado

Correspondiente a en Activiti-app

El llamado subproceso incrustado, es decir, el elemento de subproceso <subProcess> está incrustado en el elemento de proceso principal <process> , y solo se puede utilizar en el proceso principal y no puede ser llamado por procesos externos. Dichos subprocesos generalmente se manejan como una lógica general parcial o satisfacen requisitos comerciales específicos, lo que hace que el proceso principal parezca más intuitivo. El diagrama de flujo es el siguiente:

xml es:

<?xml version="1.0" encoding="UTF-8"?>
<definitions xmlns="http://www.omg.org/spec/BPMN/20100524/MODEL" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns:activiti="http://activiti.org/bpmn" xmlns:bpmndi="http://www.omg.org/spec/BPMN/20100524/DI" xmlns:omgdc="http://www.omg.org/spec/DD/20100524/DC" xmlns:omgdi="http://www.omg.org/spec/DD/20100524/DI" typeLanguage="http://www.w3.org/2001/XMLSchema" expressionLanguage="http://www.w3.org/1999/XPath" targetNamespace="http://www.activiti.org/processdef">
  <process id="mainProcess" name="主流程" isExecutable="true">
    <startEvent id="startEvent1"></startEvent>
    <userTask id="sid-4C9AE06D-43FA-4325-80D5-038F495B46EE" name="子流程前" activiti:assignee="test">
      <extensionElements>
        <modeler:activiti-idm-assignee xmlns:modeler="http://activiti.com/modeler"><![CDATA[true]]></modeler:activiti-idm-assignee>
        <modeler:assignee-info-firstname xmlns:modeler="http://activiti.com/modeler"><![CDATA[test]]></modeler:assignee-info-firstname>
        <modeler:initiator-can-complete xmlns:modeler="http://activiti.com/modeler"><![CDATA[false]]></modeler:initiator-can-complete>
      </extensionElements>
    </userTask>
    <subProcess id="sid-48411614-B7F9-40F3-8154-4EC64E8E4365" name="子流程调用">
      <startEvent id="sid-5BC16FA2-D258-46C8-91E3-D4E615343637"></startEvent>
      <userTask id="sid-05726644-A733-4206-BBB7-4D79B3589ED2" name="子流程环节" activiti:assignee="test">
        <extensionElements>
          <modeler:activiti-idm-assignee xmlns:modeler="http://activiti.com/modeler"><![CDATA[true]]></modeler:activiti-idm-assignee>
          <modeler:assignee-info-firstname xmlns:modeler="http://activiti.com/modeler"><![CDATA[test]]></modeler:assignee-info-firstname>
          <modeler:initiator-can-complete xmlns:modeler="http://activiti.com/modeler"><![CDATA[false]]></modeler:initiator-can-complete>
        </extensionElements>
      </userTask>
      <endEvent id="sid-FB91A674-6633-445D-B4D7-02D8E8BA3992"></endEvent>
      <sequenceFlow id="sid-CC480E20-B61F-4B32-8A16-FC7B724AE4A9" sourceRef="sid-5BC16FA2-D258-46C8-91E3-D4E615343637" targetRef="sid-05726644-A733-4206-BBB7-4D79B3589ED2"></sequenceFlow>
      <sequenceFlow id="sid-D330D43B-09C9-4812-9A80-CAE62F365356" sourceRef="sid-05726644-A733-4206-BBB7-4D79B3589ED2" targetRef="sid-FB91A674-6633-445D-B4D7-02D8E8BA3992"></sequenceFlow>
    </subProcess>
    <sequenceFlow id="sid-A3FBD323-DB9C-48DA-86B4-7723033E3DB3" sourceRef="startEvent1" targetRef="sid-4C9AE06D-43FA-4325-80D5-038F495B46EE"></sequenceFlow>
    <sequenceFlow id="sid-C669A38C-6A62-4F59-8BFF-40D83FA002C2" sourceRef="sid-4C9AE06D-43FA-4325-80D5-038F495B46EE" targetRef="sid-48411614-B7F9-40F3-8154-4EC64E8E4365"></sequenceFlow>
    <userTask id="sid-99E4B39D-36AF-4AE6-B50A-0ECB1CECB67C" name="子流程后" activiti:assignee="$INITIATOR">
      <extensionElements>
        <modeler:activiti-idm-initiator xmlns:modeler="http://activiti.com/modeler"><![CDATA[true]]></modeler:activiti-idm-initiator>
      </extensionElements>
    </userTask>
    <endEvent id="sid-B84A10E5-94AB-4A2F-81C7-708C62421D8D"></endEvent>
    <sequenceFlow id="sid-65ED0CA3-AB95-4788-9D33-26DC86A36BE3" sourceRef="sid-48411614-B7F9-40F3-8154-4EC64E8E4365" targetRef="sid-99E4B39D-36AF-4AE6-B50A-0ECB1CECB67C"></sequenceFlow>
    <sequenceFlow id="sid-27DD695B-3F82-4F7D-8860-979461364E7A" sourceRef="sid-99E4B39D-36AF-4AE6-B50A-0ECB1CECB67C" targetRef="sid-B84A10E5-94AB-4A2F-81C7-708C62421D8D"></sequenceFlow>
  </process>
</definitions>

Se puede ver que el elemento <subProcess> está al mismo nivel que los otros elementos del proceso principal. Como atributo exclusivo del proceso principal, básicamente tiene un solo proceso. Por lo tanto, puede usar la clave del proceso principal. proceso para consultar las tareas y otra información del subproceso, y las variables del subproceso principal, también se comparte información.

2. Invocar el subproceso

Correspondiente a en Activiti-app

La llamada invocación de un subproceso significa que la implementación de un proceso debe definirse de antemano, y luego se hace referencia a la identificación del proceso en el proceso principal para completar la incrustación. Este método es más flexible y fácil de reutilizar, por lo que También es el método más utilizado en el uso de subprocesos. El proceso consiste en utilizar la etiqueta <callActivity> para llamar, el diagrama de flujo simple es el siguiente:

Su configuración principal incluye el  proceso al que hace referencia el enlace del subproceso y la transferencia de variables dentro y fuera del subproceso:

El elemento de referencia puede ser una identificación de un proceso externo, o puede ser una variable, que se pasa dinámicamente

El In anterior se refiere a la configuración de transferencia de variables cuando el proceso principal ingresa al subproceso, el origen representa el nombre de la variable pasado por el proceso principal, el destino representa el nombre de la variable recibido por el subproceso y hay una configuración de salida para el proceso principal. Misma razón.

El xml finalmente guardado es el siguiente:

<?xml version="1.0" encoding="UTF-8"?>
<definitions xmlns="http://www.omg.org/spec/BPMN/20100524/MODEL" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns:activiti="http://activiti.org/bpmn" xmlns:bpmndi="http://www.omg.org/spec/BPMN/20100524/DI" xmlns:omgdc="http://www.omg.org/spec/DD/20100524/DC" xmlns:omgdi="http://www.omg.org/spec/DD/20100524/DI" typeLanguage="http://www.w3.org/2001/XMLSchema" expressionLanguage="http://www.w3.org/1999/XPath" targetNamespace="http://www.activiti.org/processdef">
  <process id="callActivity" name="调用子流程" isExecutable="true">
    <startEvent id="startEvent1"></startEvent>
    <userTask id="sid-D0BEEE15-A6E8-4077-ACA7-D8C284546BCF" name="子流程前" activiti:assignee="test">
      <extensionElements>
        <modeler:activiti-idm-assignee xmlns:modeler="http://activiti.com/modeler"><![CDATA[true]]></modeler:activiti-idm-assignee>
        <modeler:assignee-info-firstname xmlns:modeler="http://activiti.com/modeler"><![CDATA[test]]></modeler:assignee-info-firstname>
        <modeler:initiator-can-complete xmlns:modeler="http://activiti.com/modeler"><![CDATA[false]]></modeler:initiator-can-complete>
      </extensionElements>
    </userTask>
    <callActivity id="sid-735E518C-DD33-4BD3-A6FA-7A8FEB3A90EF" name="子流程调用" calledElement="simpleModel" activiti:inheritVariables="false">
      <extensionElements>
        <activiti:in source="mainVariable" target="subVariable"></activiti:in>
        <activiti:out source="sub" target="main"></activiti:out>
      </extensionElements>
    </callActivity>
    <endEvent id="sid-333CC74E-46FF-4AB9-8A08-884AD012C90E"></endEvent>
    <sequenceFlow id="sid-E4EE4AE4-E56F-49F3-8AF7-864A76688581" sourceRef="startEvent1" targetRef="sid-D0BEEE15-A6E8-4077-ACA7-D8C284546BCF"></sequenceFlow>
    <sequenceFlow id="sid-99564510-9859-4C04-BBC6-8E1F284AC242" sourceRef="sid-D0BEEE15-A6E8-4077-ACA7-D8C284546BCF" targetRef="sid-735E518C-DD33-4BD3-A6FA-7A8FEB3A90EF"></sequenceFlow>
    <sequenceFlow id="sid-254EBB4A-B061-49AC-9DD7-82B6B24751B5" sourceRef="sid-735E518C-DD33-4BD3-A6FA-7A8FEB3A90EF" targetRef="sid-333CC74E-46FF-4AB9-8A08-884AD012C90E"></sequenceFlow>
  </process>
</definitions>

Puede ver que las principales etiquetas xml del subproceso de llamada son: <callActivity /> y sus atributos llamadosElement, <activiti: in />, <activiti: out />.

Dado que los subprocesos principales son instancias diferentes, la clave del subproceso debe utilizarse para realizar consultas al consultar las subtareas.

Nota: Cuando el flujo de proceso se transfiere al subproceso, la clave comercial del subproceso, que es Business_key, está vacía. Si necesita ser coherente con el proceso principal, debe utilizar el escucha de tareas. En la forma de las variables, primero obtenga el proceso principal en el oyente y luego utilícelo para actualizar la clave comercial del subproceso.

3. Subproceso de evento

Correspondiente a en Activiti-app

Un subproceso de evento se refiere a un subproceso desencadenado por un evento. Puede existir a nivel de proceso o subproceso. El evento utilizado para desencadenar el subproceso de evento se configura mediante eventos de inicio. Por lo tanto, inicio vacío No se permiten eventos en el subproceso de eventos, al mismo tiempo que no permite ningún flujo de secuencia de entrada y salida.

Cuando se crea el alcance de host del subproceso del evento (instancia de proceso o subproceso), se crea una suscripción al evento de inicio y, cuando se destruye el alcance, se elimina la suscripción.

Tres, resumen

Subproceso integrado: el subproceso principal es esencialmente la misma instancia de proceso, compartiendo datos

Invocación del subproceso: el subproceso principal es una instancia diferente, pero puede tener un identificador comercial único a través del método de escucha, y la tarea del subproceso no se puede consultar a través de la clave del proceso principal, pero puede ser consultado a través de la clave comercial

En el uso real, los subprocesos proporcionados por Activiti no cumplirán con algunos requisitos comerciales reales, como suspender y reanudar, etc., que se pueden implementar mediante tareas manuales.

Supongo que te gusta

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