Grundlegende Verwendung von Activiti 2

Inhaltsverzeichnis

3. Prozessbeispiel

3.1, was ist eine Prozessinstanz?

3.2. Verknüpfen Sie das tatsächliche Geschäft mit der Aktivitätstabelle (BusinessKey).

3.3. Unterbrechen und aktivieren Sie die Prozessinstanz

3.3.1. Alle Prozessinstanzen werden angehalten

3.3.2. Eine einzelne Prozessinstanz hängt

4. Aufgabenzuweisung

4.1. Feste Verteilung

4.2. Ausdruckszuordnung

4.2.1、UEL-Wert

4.2.2, UEL-Methode

4.3. Zuhörerzuordnung

5. Prozessvariablen

5.1, was ist eine Prozessvariable?

5.2, der Umfang der Prozessvariablen

5.2.1, globale Variablen

5.2.2, lokale Variablen

5.3. Verwendung von Prozessvariablen

5.4, ​​​​setzen Sie die globale Variable

5.4.1. Beim Starten des Prozesses Variablen festlegen

5.4.2. Prozessvariablen bei der Bearbeitung von Aufgaben festlegen

5.4.3, durch die aktuellen Prozessinstanzeinstellungen

5.5. Lokale Variablen festlegen

6. Aufgabengruppe

6.1, Kandidaten-Benutzer-Kandidaten

6.2. Prozess zur Bearbeitung von Gruppenaufgaben

6.3. Schlüsselcode

6.3.1, Bereitstellung und Start

6.3.2. Gruppenaufgaben abfragen

6.3.2. Gruppenaufgaben aufnehmen

6.3.3. Persönliche Aufgaben abfragen

6.3.4. Persönliche Aufgaben erledigen

6.3.5. Gruppenaufgaben zurückgeben

6.3.6. Aufgabenübergabe

7. Tor

7.1. Exklusives Gateway

7.2. Paralleles Gateway

7.3, einschließlich des Gateways


3. Prozessbeispiel

Grundlegende Betriebsreferenz: Grundlegende Verwendung des Blog-CSDN-Blogs von Activiti_Relievedz

3.1, was ist eine Prozessinstanz?

Die Prozessdefinition ProcessDefinition und die Prozessinstanz ProcessInstance sind wichtige Konzepte von Activiti, ähnlich der Beziehung zwischen Java-Klassen und Java-Instanzen

Das Starten einer Prozessinstanz bedeutet, einen Geschäftsprozessvorgang zu starten. Beispielsweise ist die Bereitstellung des Mitarbeiterurlaubsprozesses abgeschlossen. Wenn Zhang San um Urlaub bitten möchte, kann er eine Prozessinstanz starten. Wenn Li Si um Urlaub bitten möchte, er kann auch eine Prozessinstanz starten. Die Ausführung der beiden Prozesse beeinflusst sich nicht gegenseitig. Genau wie das Definieren einer Java-Klasse und das Instanziieren von zwei Objekten ähnelt der Bereitstellungsprozess einer Java-Klasse, und das Starten einer Prozessinstanz ist wie ein neues Java-Objekt

3.2. Verknüpfen Sie das tatsächliche Geschäft mit der Aktivitätstabelle (BusinessKey).

Wenn wir beispielsweise ein Urlaubsformular ausfüllen, muss es eine eindeutige Identifizierung des Urlaubsformulars geben. Normalerweise verwenden wir diese Identifizierung, um Aktivitäten zuzuordnen. Diese Identifizierung wird in Aktivitäten als Businesskey bezeichnet

BusinessKey: Geschäftskennung, normalerweise der Primärschlüssel des Unternehmens, die Geschäftskennung und die Prozesskennung entsprechen eins zu eins, die Geschäftskennung stammt aus dem Geschäftssystem und die Speicherung der Geschäftskennung dient der Zuordnung und Abfrage von Daten des Geschäftssystems entsprechend der Geschäftskennung

Beispiel: Wenn der Urlaubsprozess eine Prozessinstanz startet, kann die ID des Urlaubsantrags in activiti als Geschäftskennung gespeichert werden. In Zukunft kann die ID des Urlaubsantrags durch Abfragen der Prozessinstanzinformationen von activiti abgerufen werden. um die Datenbank des Geschäftssystems abzufragen, um die Urlaubsantragsinformationen zu erhalten

/** 
 * Starten Sie die Prozessinstanz, fügen Sie businessKey hinzu 
 */ 
@Test 
public void startUpProcessAddBusinessKey(){ 
    String businessKey = "1"; 
    // Starten Sie die Prozessinstanz, geben Sie die Geschäftskennung businessKey an, bei der es sich um die ID des Urlaubsantragsformulars handelt 
    ProcessInstance ProcessInstance = 
            runtimeService.startProcessInstanceByKey ("qingjia",businessKey); 
    // Ausgabe 
    System.out.println("business id:"+processInstance.getBusinessKey()); 
}

3.3. Unterbrechen und aktivieren Sie die Prozessinstanz

In einigen Fällen kann es aufgrund von Prozessänderungen erforderlich sein, den aktuell ausgeführten Prozess anzuhalten, anstatt ihn direkt zu löschen. Nachdem der Prozess angehalten wurde, wird er nicht ausgeführt.

3.3.1. Alle Prozessinstanzen werden angehalten

Die Operationsprozessdefinition befindet sich in einem angehaltenen Zustand und alle Prozessinstanzen unter der Prozessdefinition sind angehalten: Die Prozessdefinition befindet sich in einem angehaltenen Zustand und die Prozessdefinition lässt nicht zu, dass neue Prozessinstanzen gestartet werden. Alle Prozessinstanzen unter der Prozessdefinition werden angehalten und die Ausführung angehalten

//Alle Prozessinstanzen anhalten 
@Test 
public void suspendProcessInstanceAll() { 
    //1 Holen Sie sich das Prozessdefinitionsobjekt 
    ProcessDefinition qingjia = inventoryService.createProcessDefinitionQuery() 
            .processDefinitionKey("qingjia").singleResult(); 

    //2 Rufen Sie das Prozessdefinitionsobjekt auf Die Methode zur Beurteilung des aktuellen Status: Aktivierung aussetzen 
    boolean suspendiert = qingjia.isSuspended(); 

    //3 Beurteilen Sie, ob die Aktivierung unterbrochen ist, und realisieren Sie die Aktivierung, 
    wenn(suspended) { 
        //Der erste Parameter Prozessdefinitions-ID 
        //Der zweite Parameter ist aktiviert wahr 
        / /Dritter Parameter Zeitpunkt 
        RepositoryService 
                .activateProcessDefinitionById(qingjia.getId(), 
                        true,null); 
        System.out.println(qingjia.getId()+"activated"); 
    } else { 
        //Wenn aktiviert, Aussetzung implementieren
        RepositoryService 
                .suspendProcessDefinitionById(qingjia.getId(), 
                        true,null); 
        System.out.println(qingjia.getId()+"挂起"); 
    } 
}

3.3.2. Eine einzelne Prozessinstanz hängt

Betreiben Sie das Prozessinstanzobjekt und führen Sie den Suspend-Vorgang für einen einzelnen Prozess aus. Wenn eine Prozessinstanz angehalten wird, wird der Prozess nicht weiter ausgeführt und es wird eine Ausnahme gemeldet, wenn die aktuelle Aufgabe der Prozessinstanz abgeschlossen ist.

//单个流程实例挂起
@Test 
public void SingleSuspendProcessInstance() { 
    String ProcessInstanceId = "b98e42b3-df27-11ed-b184-005056c00001"; 
    ProcessInstance processInstance = runtimeService.createProcessInstanceQuery() 
            .processInstanceId(processInstanceId) 
            .singleResult(); 
    boolean suspendiert =processInstance.isSuspended(); 
    if (suspended) { 
        //激活
        runtimeService.activateProcessInstanceById(processInstanceId); 
        System.out.println(processInstanceId + „Druck“); 
    } else { 
        runtimeService.suspendProcessInstanceById(processInstanceId); 
        System.out.println(processInstanceId + „Druck“); 
}

4. Aufgabenzuweisung

Es gibt drei Möglichkeiten, Aufgaben zuzuweisen

  1. feste Zuteilung

  2. UEL-Ausdruckszuweisung

  3. Zuhörerzuordnung

4.1. Feste Verteilung

Geben Sie in der vorherigen Geschäftsprozessmodellierung einen festen Aufgabenleiter an, z. B.: Beauftragter: zhangsan/lisi

4.2. Ausdruckszuordnung

activiti verwendet UEL-Ausdrücke. UEL ist Teil der Java-EE6-Spezifikation. UEL ist die einheitliche Ausdruckssprache. activiti unterstützt zwei UEL-Ausdrücke: UEL-Wert und UEL-Methode.

4.2.1、UEL-Wert

Neu: ein Überstundenprozess

Wie im Bild gezeigt:

Beauftragter1 Diese Variable ist eine Prozessvariable der Aktivität

Wir starten die Prozessinstanz. Die Methode zum Starten der Instanz ist grundsätzlich dieselbe wie bei der vorherigen Methode. Der einzige Unterschied besteht darin, dass beim Start ein Parameter hinzugefügt wird

@Test 
public voidployProcess01() { 
    // Prozessbereitstellung 
    Deploymentployment=RepositoryService.createDeployment() 
            .addClasspathResource("process/jiaban.bpmn20.xml") 
            .name("Überstundenanwendungsprozess") 
            .deploy(); 
    System.out .println(deploy.getId()); 
    System.out.println(deploy.getName()); 
} 

/** 
 * Prozessinstanz starten 
 */ 
@Test 
public void startUpProcess01() { 
    Map<String, Object> map = new HashMap<>(); 
    map.put("assignee1","lucy"); 
    map.put("assignee2","mary"); 
    //Um eine Prozessinstanz zu erstellen, müssen wir den Schlüssel der Prozessdefinition kennen 
    ProcessInstance ProcessInstance =
            runtimeService.startProcessInstanceByKey("jiaban", map); 
    //Instanzbezogene Informationen ausgeben 
    System.out.println("Prozessdefinitions-ID:" + processInstance.getProcessDefinitionId()); 
    System.out.println("Prozessinstanz-ID:" + ProcessInstance. getId()); 
}

4.2.2, UEL-Methode

Wie im Bild gezeigt:

userBean ist eine Bean im Spring-Container, was bedeutet, dass die getUsername(int id)-Methode der Bean aufgerufen wird.

Managergenehmigung: ${userBean.getUsername(1)}

Personalgenehmigung: ${userBean.getUsername(2)}

package com.atguigu.auth.activiti; 

import org.springframework.stereotype.Component; 

/** 
 * @program: guigu-oa-perent 
 * @description: userBean ist eine Bean im Spring-Container, was bedeutet, dass getUsername( der Bean aufgerufen wird) int id)-Methode. 
 * @author: Mr.Zhang 
 * @create: 20.04.2023 11:42 
 **/ 
@Component 
public class UserBean { 

    public String getUsername(int id) { 
        if(id == 1) { 
            return "lilei"; 
        } 
        if(id == 2) { 
            return „wyz“; 
        } 
        return „admin“; 
    } 
}

Bereitstellen und starten

// 
uel-method 
@Test 
public voidployProcess01() { 
    Deployment Deployment =RepositoryService.createDeployment() 
            .addClasspathResource("process/jiaban01.bpmn20.xml") 
            .name("加班申请流程01") 
            .deploy(); 
    System.out.println(deployment.getId()); 
    System.out.println(deployment.getName()); 
} 

@Test 
public void startProcessInstance01() { 
    ProcessInstance processInstance = runtimeService.startProcessInstanceByKey("jiaban01"); 
    System.out.println(processInstance.getProcessDefinitionId()); 
    System.out.println(processInstance.getId()); 
}

Wenn die Prozessinstanz gestartet wird, wird die Bean-Methode aufgerufen. Der Parameter lautet: 1. Nach der Genehmigung durch den Manager wird die Bean-Methode aufgerufen. Der Parameter lautet: 2

4.3. Zuhörerzuordnung

Verwenden Sie die Listener-Methode, um die verantwortliche Person anzugeben, sodass Sie beim Entwerfen des Prozesses nicht den Beauftragten angeben müssen.

Der Task-Listener dient dazu, benutzerdefinierte Java-Logik oder -Ausdrücke auszuführen, wenn das entsprechende aufgabenbezogene Ereignis auftritt

Zu den Veranstaltungsoptionen gehören:

Erstellen: Wird ausgelöst, nachdem die Aufgabe erstellt wurde. 
Zuweisung: Wird ausgelöst, nachdem die Aufgabe zugewiesen wurde. 
Löschen: Wird ausgelöst, nachdem die Aufgabe abgeschlossen ist. 
Alle: Wird ausgelöst, wenn alle Ereignisse eintreten

Definieren Sie die Task-Listener-Klasse. Die Klasse muss die Schnittstelle org.activiti.engine.delegate.TaskListener implementieren

Paket com.atguigu.auth.activiti; 

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

/** 
 * @program: guigu-oa-perent 
 * @description: Task-Listener definieren Klasse 
 * @Autor: Mr.Zhang 
 * @create: 21.04.2023 08:55 
 **/ 
öffentliche Klasse MyTaskListener implementiert TaskListener { 
    @Override 
    public void notify(DelegateTask task) { 
        if(task.getName().equals(" Manager-Genehmigung")){ 
            // Aufgabe zuweisen 
            task.setAssignee("jack"); 
        } else if (task.getName().equals("Personnel Approval")) { 
            task.setAssignee("tom"); 
        } 
} 
    }

Konfigurieren Sie den Listener

Sowohl die Managergenehmigung als auch die Personalgenehmigung können auf demselben Monitor eingestellt werden

Bereitstellen und testen

// 
//监听器分配任务
@Test 
public voidployProcess02() { 
    Deployment Deployment =RepositoryService.createDeployment() 
            .addClasspathResource("process/jiaban02.bpmn20.xml") 
            .name("加班申请流程02") 
            .deploy( ); 
    System.out.println(deployment.getId()); 
    System.out.println(deployment.getName()); 
} 

@Test 
public void startProcessInstance02() { 
    ProcessInstance ProcessInstance = runtimeService.startProcessInstanceByKey("jiaban02"); 
    System.out.println(processInstance.getProcessDefinitionId()); 
    System.out.println(processInstance.getId()); 
}

 Wenn die Prozessinstanz gestartet wird, wird die MyTaskListener-Abhörmethode aufgerufen

5. Prozessvariablen

5.1, was ist eine Prozessvariable?

Prozessvariablen spielen bei Aktivitäten eine sehr wichtige Rolle. Der Prozessbetrieb hängt manchmal von Prozessvariablen ab. Bei der Kombination von Geschäftssystemen und Aktivitäten sind Prozessvariablen unverzichtbar. Prozessvariablen sind Variablen, die Activiti bei der Verwaltung von Arbeitsabläufen entsprechend den Managementanforderungen festlegt. Beispiel: Wenn im Urlaubsantragsprozess die Anzahl der Urlaubstage mehr als 2 Tage beträgt, wird sie vom General Manager überprüft, andernfalls wird sie direkt vom Abteilungsleiter überprüft. Die Anzahl der Urlaubstage kann als Prozessvariable festgelegt und im Prozessablauf verwendet werden.

5.2, der Umfang der Prozessvariablen

Die Rolle einer Prozessvariablen kann eine Prozessinstanz sein, sie kann aber auch eine Aufgabe (Aufgabe) oder eine Ausführungsinstanz sein

5.2.1, globale Variablen

Der Standardbereich von Prozessvariablen ist die Prozessinstanz. Wenn der Gültigkeitsbereich einer Prozessvariablen die Prozessinstanz ist, kann sie als globale Variable bezeichnet werden

Der Variablenname in der globalen Variablen darf nicht wiederholt werden. Wenn Sie eine Variable mit demselben Namen festlegen, überschreibt der später festgelegte Wert den zuvor festgelegten Variablenwert.

5.2.2, lokale Variablen

Aufgaben und Ausführungsinstanzen gelten nur für eine Aufgabe und einen Ausführungsinstanzbereich, und der Umfang ist nicht so groß wie die Prozessinstanz, die als lokale Variablen bezeichnet wird.

Da sich der Umfang lokaler Variablen in verschiedenen Aufgaben oder verschiedenen Ausführungsinstanzen nicht gegenseitig beeinflusst, können die Variablennamen ohne Einfluss identisch sein. Der lokale Variablenname kann auch mit dem globalen Variablennamen identisch sein, er hat jedoch keine Auswirkung.

5.3. Verwendung von Prozessvariablen

Verwendung von Prozessvariablen über UEL-Ausdrücke

1. Wir haben zuvor auch UEL-Ausdrücke verwendet, um den Aufgabenhandler festzulegen, z. B. $ {assignee1}. Activiti erhält den Wert des UEL-Ausdrucks, dh den Wert der Prozessvariablen zugewiesener Benutzer1, und weist den Wert als Person zu Verantwortlichkeit der Aufgabe. 2. Wir können auch UEL-Ausdrücke für die Verbindung zwischen Aufgaben verwenden, um die Richtung des Prozesses zu bestimmen, z. B. ${day > 2 } und ${day <= 2}. Tag ist ein Prozessvariablenname und das Ausführungsergebnis des UEL-Ausdrucks ist vom booleschen Typ

5.4, ​​​​setzen Sie die globale Variable

5.4.1. Beim Starten des Prozesses Variablen festlegen

Legen Sie die Prozessvariable beim Starten des Prozesses fest. Der Gültigkeitsbereich der Variablen ist die gesamte Prozessinstanz. Legen Sie die Prozessvariable über Map<key,value> fest. In der Map können mehrere Variablen festgelegt werden. Dieser Schlüssel ist der Name der Prozessvariablen

Dies ist der vorherige Beispielcode

@Test 
public void startUpProcess() { 
    Map<String, Object> variables = new HashMap<>(); 
    variables.put("assignee1", "zhangsan"); 
    variables.put("assignee2", "lisi"); 
    / /Um eine Prozessinstanz zu erstellen, müssen wir den Schlüssel der Prozessdefinition kennen 
    ProcessInstance ProcessInstance = runtimeService.startProcessInstanceByKey("qingjia", Variables); 
    //Zugehörige Informationen der Instanz ausgeben 
    System.out.println("Prozessdefinitions-ID: " +processInstance.getProcessDefinitionId( )); 
    System.out.println("Prozessinstanz-ID: " +processInstance.getId()); 
}

5.4.2. Prozessvariablen bei der Bearbeitung von Aufgaben festlegen

Sein Geltungsbereich ist die gesamte Prozessinstanz . Wenn der Schlüssel der festgelegten Prozessvariablen in der Prozessinstanz bereits denselben Namen hat, ersetzt die später festgelegte Variable die zuvor festgelegte Variable.

Simulationsbeispielcode:

@Test 
public void completTask() { 
    Task task = taskService.createTaskQuery() 
            .taskAssignee("zhangsan") //Die verantwortliche Person, die abgefragt werden soll.singleResult 
            ();//Eine Karte zurückgeben 
<
    String, Object> variables = new HashMap <>(); 
    variables.put("assignee2", "zhao"); 
    //Schließe die Aufgabe ab, Parameter: Aufgaben-ID 
    taskService.complete(task.getId(), variables); 
}

5.4.3, durch die aktuellen Prozessinstanzeinstellungen

Die globale Variable wird über die Prozessinstanz-ID festgelegt und ihr Geltungsbereich umfasst die gesamte Prozessinstanz , die nicht abgeschlossen werden darf.

Simulationsbeispielcode:

@Test 
public void ProcessInstanceIdSetVariables() { 
    Map<String, Object> variables = new HashMap<>(); 
    Variables.put("assignee2", "wang"); 
    runtimeService.setVariables("1c347a90-82c6-11ed-96ca-7c57581a7819", Variablen); 
}

5.5. Lokale Variablen festlegen

Der Umfang lokaler Prozessvariablen ist nur unter dem aktuellen Aufgabenknoten verfügbar

Wenn eine Aufgabe verarbeitet wird, wird eine lokale Prozessvariable gesetzt. Die aktuell laufende Prozessinstanz kann nur vor dem Ende der Aufgabe verwendet werden. Die Variable kann in der aktuellen Prozessinstanz nach dem Ende der Aufgabe nicht verwendet werden.

Simulationsbeispielcode:

@Test 
public void completLocalTask() { 
    Task task = taskService.createTaskQuery() 
            .taskAssignee("zhangsan") //Die verantwortliche Person, die abgefragt werden soll.singleResult 
            ();//Ein Element zurückgeben 
​//
    Lokale Variable setzen, Der Geltungsbereich ist diese Aufgabe 
    taskService.setVariableLocal(task.getId(),"assignee2","li"); 
    // Lokale Variablen anzeigen 
    System.out.println(taskService.getVariableLocal(task.getId(), "assignee2")) ; 
    //Aufgabe abschließen, Parameter: Aufgaben-ID 
    taskService.complete(task.getId()); 
}

6. Aufgabengruppe

6.1, Kandidaten-Benutzer-Kandidaten

1. Anforderungen In der Prozessdefinition ist der Aufgabenleiter im Beauftragten des Aufgabenknotens festgelegt, und die Teilnehmer sind in der .bpmn-Datei festgelegt, wenn der Prozess definiert ist. Wenn Sie den Aufgabenleiter vorübergehend ändern möchten, müssen Sie dies tun Ändern Sie die Prozessdefinition. Die Skalierbarkeit des Systems ist sehr schlecht. In dieser Situation können wir mehrere Kandidaten für die Aufgabe festlegen und aus den Kandidaten Teilnehmer auswählen, um die Aufgabe abzuschließen

2. Aufgabenkandidaten festlegen

 

6.2. Prozess zur Bearbeitung von Gruppenaufgaben

Schritt 1: Gruppenaufgaben abfragen

Benennen Sie einen Kandidaten und fragen Sie die aktuell zu erledigenden Aufgaben des Kandidaten ab. Kandidaten können Aufgaben nicht bearbeiten. Schritt 2: Aufgaben anfordern

Alle Kandidaten für diese Aufgabengruppe können übernommen werden. Machen Sie aus der Gruppenaufgabe des Kandidaten eine persönliche Aufgabe und der ursprüngliche Kandidat wird zum Verantwortlichen für die Aufgabe. Wenn Sie die Aufgabe nach der Übernahme nicht mehr bearbeiten möchten, können Sie dies tun muss es abholen Schritt 3 : Persönliche Aufgaben abfragen

Die Abfragemethode ist dieselbe wie beim persönlichen Aufgabenteil, und die persönliche Aufgabe, für die der Benutzer verantwortlich ist, wird entsprechend dem Beauftragten abgefragt. Schritt 4: Persönliche Aufgaben bearbeiten

6.3. Schlüsselcode

6.3.1, Bereitstellung und Start

 

@Test 
public voidployProcess04() { 
    // 流程部署
    Deployment Deployment=RepositoryService.createDeployment() 
            .addClasspathResource("process/jiaban04.bpmn20.xml") 
            .name("请假申请流程") 
            .deploy(); 
    System.out.println(deploy.getId()); 
    System.out.println(deploy.getName()); 
​ProcessInstance
    processInstance = runtimeService.startProcessInstanceByKey("jiaban04"); 
    System.out.println(processInstance.getId()); 
}

6.3.2. Gruppenaufgaben abfragen

@Test 
public void findGroupTaskList() { 
    //Gruppenaufgabe abfragen 
    List<Task> list = taskService.createTaskQuery() 
            .taskCandidateUser("zhangsan01")//Abfrage basierend auf Candidate.list 
            (); 
    for (Task task : list) { 
        System.out.println("-------------"); 
        System.out.println("Prozessinstanz-ID:" + task.getProcessInstanceId()); 
        System.out.println("Aufgaben-ID: " + task.getId()); 
        System.out.println("Aufgabenbesitzer: " + task.getAssignee()); 
        System.out . println("Aufgabenname: " + task.getName()); 
    } 
}

6.3.2. Gruppenaufgaben aufnehmen

@Test 
public void ClaimTask(){ 
    //Eine Aufgabe annehmen, auch wenn der Benutzer kein Kandidat ist (es wird empfohlen, zu prüfen, ob der Benutzer berechtigt ist) 
    //Überprüfen, ob der Benutzer zum Annehmen der Aufgabe berechtigt ist 
    Aufgabenaufgabe = taskService.createTaskQuery () 
            .taskCandidateUser("zhangsan01")//Abfrage gemäß Candidate.singleResult 
            (); 
    if(task!=null){ 
        //Aufgabe übernehmen 
        taskService.claim(taskId, "zhangsan01"); 
        System.out.println(" Aufgabe erfolgreich aufgenommen"); 
    } 
}

Zhang San 01 hat die Aufgabe übernommen, aber Zhang San 02 kann sie nicht übernehmen

6.3.3. Persönliche Aufgaben abfragen

Die Abfragemethode ist dieselbe wie bei der Abfrage persönlicher Aufgaben

@Test 
public void findGroupPendingTaskList() { 
    //Aufgabenleiter 
    String assignee = "zhangsan01"; 
    List<Task> list = taskService.createTaskQuery() 
            .taskAssignee(assignee)//Fragen Sie nur die Aufgaben des Aufgabenleiters ab.list 
            () ; 
    for (Aufgabe task : list) { 
        System.out.println("Prozessinstanz-ID: " + task.getProcessInstanceId()); 
        System.out.println("Aufgaben-ID: " + task.getId()); 
        System. out .println("Aufgabenbesitzer: " + task.getAssignee()); 
        System.out.println("Aufgabenname: " + task.getName()); 
    } 
}

6.3.4. Persönliche Aufgaben erledigen

mit persönlichen Aufgaben

@Test 
public void completGroupTask() { 
    Task task = taskService.createTaskQuery() 
            .taskAssignee("zhangsan01") //Die verantwortliche Person, die abgefragt werden soll.singleResult 
            ();//Einen 
    taskService.complete(task.getId() zurückgeben) ); 
}

6.3.5. Gruppenaufgaben zurückgeben

Wenn eine Person die Gruppenaufgabe nicht bearbeiten möchte, kann sie die Gruppenaufgabe zurückgeben, woraufhin der Benutzer nicht mehr der Verantwortliche für die Aufgabe ist

@Test 
public void askeeToGroupTask() { 
    String taskId = "d96c3f28-825e-11ed-95b4-7c57581a7819"; 
    // Aufgabenleiter 
    String userId = "zhangsan01"; 
    // Überprüfen Sie, ob userId die Person ist, die für taskId verantwortlich ist, falls ja Verantwortliche Talente können Gruppenaufgaben zurückgeben. 
    Aufgabe task = taskService 
            .createTaskQuery() 
            .taskId(taskId) 
            .taskAssignee(userId) 
            .singleResult(); 
    if (task != null) { 
        // Wenn auf null gesetzt, Gruppenaufgaben zurückgeben, die Aufgabe nicht 
        TaskService.setAssignee(taskId, null); 
    } 
}

6.3.6. Aufgabenübergabe

Aufgabenübergabe: Der Aufgabenleiter übergibt die Aufgabe an andere Kandidaten zur Bearbeitung der Aufgabe

@Test 
public void assigneeToCandidateUser() { 
    // Aktuelle zu erledigende Aufgabe 
    String taskId = "d96c3f28-825e-11ed-95b4-7c57581a7819"; 
    // Überprüfen Sie, ob zhangsan01 die Person ist, die für die TaskId verantwortlich ist, und wenn ja, kann sie zurückkehren die Gruppenaufgabe 
    Aufgabe task = taskService 
            .createTaskQuery() 
            .taskId(taskId) 
            .taskAssignee("zhangsan01") 
            .singleResult(); 
    if (task != null) { 
        // Übergeben Sie diese Aufgabe an einen anderen Kandidaten zhangsan02, um die Aufgabe 
        taskService zu bearbeiten .setAssignee( taskId, "zhangsan02"); 
    } 
}

7. Tor

Gateways dienen der Steuerung des Prozessflusses und werden meist zusammen mit Prozessvariablen verwendet.

7.1. Exklusives Gateway

  • Exklusives Gateway: Es wird nur ein Pfad ausgewählt

Wenn es in Ihrem Prozess ein solches Szenario gibt: Urlaubsantrag, innerhalb von zwei Tagen ist der Genehmigungsprozess des Abteilungsleiters abgeschlossen und der General Manager muss ihn direkt nach zwei Tagen genehmigen. Zu diesem Zeitpunkt ist ein exklusives Gateway erforderlich

7.2. Paralleles Gateway

  • Parallele (parallele) Gateways: Alle Pfade werden gleichzeitig ausgewählt

Wenn ein solches Szenario auftritt: Der Urlaubsantrag muss sowohl vom Abteilungsleiter als auch vom Geschäftsführer genehmigt werden. Wenn es kein Vorher und Nachher gibt, müssen beide Personen ihn genehmigen, bevor mit dem nächsten Knoten zur Personalgenehmigung fortgefahren wird. Zu diesem Zeitpunkt ist ein paralleles Gateway erforderlich

 

Der Hauptunterschied zu exklusiven Gateways besteht darin, dass parallele Gateways keine Bedingungen auflösen. Auch wenn im Sequenzfluss eine Bedingung definiert ist, wird diese ignoriert.

7.3, einschließlich des Gateways

Inklusives Gateway: Mehrere Routen können gleichzeitig ausgeführt werden, und es können auch Bedingungen für das Gateway festgelegt werden, das als Kombination aus exklusivem Gateway und parallelem Gateway betrachtet werden kann. Wenn ein solches Szenario auftritt: Der Urlaubsantrag muss vom Generaldirektor der Abteilung für mehr als oder gleich 2 Tage und vom Abteilungsleiter für weniger als 2 Tage genehmigt werden, und der Urlaubsantrag muss vom Personalleiter genehmigt werden. Zu diesem Zeitpunkt muss das Gateway einbezogen werden

 

Ich denke du magst

Origin blog.csdn.net/Relievedz/article/details/130259635
Empfohlen
Rangfolge