Meine Umgebung:Wie bekomme ich die ID der Prozessinstanz im Controller?
Alfresco Share v5.2.d (r134641-b15, Aikau 1.0.101.3, Spring Surf 5.2.d, Frühling webscripts 6.13, Freemarker 2.3.20-Freien-geflickt, Rhino 1.7 R4-Freien-gepatcht, Yui 2.9.0-Freien-20141223)
Alfresco Community V5.2.0 (r134428-b13) Schema 10005
Wenn ich den Workflow zu starten, ich Testamentsvollstrecker zuweisen können - die Liste von Benutzern, die am Geschäftsprozess teilnehmen werden. Ich muss eine Liste aller Benutzer erhalten und diese Liste im Bildschirm "ReviewTask" anzeigen.
Um diese Daten anzuzeigen, habe ich die benutzerdefinierte FreeMarker Vorlage. Von dieser Vorlage aus rufe ich mein Web Script auf.
Für die Interaktion mit dem Repository über REST verwende ich das Web Script Framework MVC - den Controller, der die Logik zum Empfangen der Benutzerliste und FreeMarker-Vorlage für die JSON-Antwort ausführt.
Ich habe the great idea angeboten, wie es gemacht werden kann. Aber ich hatte ein Problem.
Sagen wir, ich habe mehrere Instanzen des Geschäftsprozesses gestartet. Im Workflow-Konsole kann ich folgendes sehen:
id: activiti$1801 , desc: DESCRIPTION_1 , start date: Sun Mar 12 19:19:09 GST 2017 , def: activiti$activitiParallelReview v1
id: activiti$2005 , desc: DESCRIPTION_2 , start date: Sun Mar 12 20:11:57 GST 2017 , def: activiti$activitiParallelReview v1
id: activiti$2138 , desc: DESCRIPTION_3 , start date: Sun Mar 12 20:12:55 GST 2017 , def: activiti$activitiParallelReview v1
So habe ich drei IDs:
activiti$1801
activiti$2005
activiti$2138
Diese IDs für mich sind nur verfügbar, in der Workflow-Konsole.
Wie kann ich diese Kennungen im Controller bekommen?
Kann ich zum Beispiel eine Klasse schreiben, die von Activiti aufgerufen wird? Lassen Sie uns sagen,
public class SomeListener implements TaskListener {
...
@Override
public void notify(DelegateTask task) {
...
String taskId = task.getId();
...
}
}
Dann hängen Sie es an das komplette Ereignis der einige Aufgabe und übergeben ID an die Steuerung.
Ist das der richtige Weg? ..
ich für die Informationen sehr dankbar sein würde. Dank an alle.
Ich schrieb eine Klasse, die die ExecutionListener
Schnittstelle implementiert. Dann fügte es als ein Listener auf den Übergang von mswf:submitParallelReviewTask
zu mswf:activitiReviewTask
hinzu.
Alle Eigenschaften, die ich brauche, kann ich hier bekommen (Danke an Gagravarr für seine answer):
public class PropertiesReceiver implements ExecutionListener {
private static final long serialVersionUID = 1L;
private static Log logger = LogFactory.getLog(PropertiesReceiver.class);
@Override
public void notify(DelegateExecution delegateExecution) throws Exception {
// TODO Auto-generated method stub
String processInstanceId = delegateExecution.getProcessInstanceId();
logger.debug("processInstanceId == " + processInstanceId);
ActivitiScriptNodeList assignees =
(ActivitiScriptNodeList) delegateExecution.getVariable("bpm_assignees");
for (ActivitiScriptNode personNode : assignees) {
String username = (String) personNode.getProperties().get("cm:userName");
logger.debug("username == " + username);
}
}
}
alfrescotomcat-stdout.2017-03-13.log:
...
2017-03-13 11:03:12,244 DEBUG [mswf.bpm.PropertiesReceiver] [http-apr-8080-exec-3] processInstanceId == 26205
2017-03-13 11:03:12,248 DEBUG [mswf.bpm.PropertiesReceiver] [http-apr-8080-exec-3] username == first
2017-03-13 11:03:12,250 DEBUG [mswf.bpm.PropertiesReceiver] [http-apr-8080-exec-3] username == second
...
Dies ist jedoch ein separates Projekt, das in einer AMP-Datei verpackt ist.
Ok, ein anderer Weg. Ich kann die ID der Prozessinstanz in ScriptExecutionListener
erhalten:
execution.getProcessInstanceId();
Und the Alfresco REST API von dem Anteil Seite rufe alle Informationen abrufen, die ich brauche (Dank Martin Ehe).
Zum Beispiel ermöglicht dieser Aufruf die Vollstrecker alle zu bekommen:
http://localhost:8080/alfresco/api/-default-/public/workflow/versions/1/processes/26205/variables
, wo 26205 == id
der Prozessinstanz.
Aber wo sollte ich diese ID speichern, um von Share zuzugreifen? Kann ich dem Workflow-Modell einen Aspekt hinzufügen und ob es richtig ist? ..
Schreiben Sie einen [Workflow-Delegierten in Java] (https://summit.alfresco.com/boston/sessions/power-your-activiti-workflow-java-delegates)? Das wird von Activiti aufgerufen werden, wenn der Workflow gestartet wurde, oder bei einer Transition, um Ihre benutzerdefinierte Logik zu tun, und es weiß, welchen Workflow es gibt – Gagravarr
Vielen Dank für Ihren Kommentar! .. Großartig, ich werde versuchen zu tun es. –
können Sie es mit Freemarker Vorlage API erhalten, die die aktuellen Aufgaben des Benutzers gibt. – vikash