2017-03-12 2 views
2

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? ..

+1

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

+0

Vielen Dank für Ihren Kommentar! .. Großartig, ich werde versuchen zu tun es. –

+0

können Sie es mit Freemarker Vorlage API erhalten, die die aktuellen Aufgaben des Benutzers gibt. – vikash

Antwort

1

Bitte versuchen Sie es.

public JSONObject test(String userName) { 


     JSONObject allTasks = new JSONObject(); 

     companyHome = repository.getCompanyHome(); 
     try { 
      List<WorkflowTask> wft=serviceRegistry.getWorkflowService().getAssignedTasks(userName,WorkflowTaskState.IN_PROGRESS); 

       JSONArray ja = new JSONArray(); 
       System.out.println("WF sizes = "+wft.size()); 
       for (WorkflowTask temp : wft) { 
        JSONObject userWFDetails = new JSONObject(); 

        userWFDetails.put("taskId", temp.getId()); 
        userWFDetails.put("taskDesc", temp.getDescription()); 
        userWFDetails.put("wfInstanceId", temp.getPath().getInstance().getId()); 

        System.out.println("wf tasks-"+temp); 
        System.out.println("task id-"+temp.getId()); 
        System.out.println("wf instance id-"+temp.getPath().getInstance().getId()); 
        System.out.println("wf path id-"+temp.getPath().getId()); 
        ja.put(userWFDetails); 
       }   
       allTasks.put("userTasksDetails", ja); 
      } catch (Exception e) { 
      e.printStackTrace(); 
     } 
     return allTasks; 
    } 

übergeben Sie Ihren Benutzernamen. und Sie erhalten alle Details zur Benutzeraufgabe. Workflow-Instanzdetails im JSON-Format.

+0

Vielen Dank für Ihre Antwort! .. –

Verwandte Themen