Inhaltsverzeichnis
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
5.1, was ist eine Prozessvariable?
5.2, der Umfang der Prozessvariablen
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.1, Kandidaten-Benutzer-Kandidaten
6.2. Prozess zur Bearbeitung von Gruppenaufgaben
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
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
-
feste Zuteilung
-
UEL-Ausdruckszuweisung
-
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