moritzweis
Occasional Observer

WorkflowAgent transition starten

Jump to solution

Hallo,

ist es möglich mit FirstSpirit 5.2R1911 über den Servermanager einen Auftrag zu erstellen, welcher Tasks in einem bestimmten Status eines Freigabe-Workflows bearbeitet?

Ich bekomme aktuell immer ein NullPointer.

Ausgabe der Log-Meldung unten:  "Transition Zeitgesteuertes Deployment abbrech Task: de.espirit.firstspirit.server.taskmanagement.TaskImpl@254e0"

Aktuell sieht es so aus:

getElementsInStatusOfWorkflow(String workflowReferenceName, String workflowState){

QueryAgent agent = context.requireSpecialist(QueryAgent.TYPE);

WorkflowAgent workflowAgent = connection.getBroker().requestSpecialist(WorkflowAgent.TYPE);

//holt alle offenen Tasks

    hits = agent.answer("fs.workflow = *");

    iHit = hits.iterator();

    while (iHit.hasNext()) {

        hit = iHit.next();

Task actualTask = hit.getTask();

//Einschränkung der Tasks auf den gewünschten Worflow

if (actualTask.getWorkflow().getWorkflowModel().getName().equals(workflowReferenceName)){

//Einschränkung der Tasks auf den gewünschten Status

if (actualTask.getTaskState().getModelState().getUid().contains(workflowState)){

Transition transition = actualTask.getTaskState().getModelState().getTargetTransitions().get(1); //hier erhalte ich den richtigen Transitionsname

context.logInfo("Transition "+transition +" Task: " + actualTask);

final WorkflowAgent.WorkflowProcessContext process = workflowAgent.process(actualTask, transition); //NULL

process.doTransition(workflowContext, transition)

}

}

    }

}

0 Kudos
1 Solution

Accepted Solutions

Hallo Moritz,

ich vermute es liegt daran, dass Du Dir den WorkflowAgent aus dem Connection-Broker holst:

WorkflowAgent workflowAgent = connection.getBroker().requestSpecialist(WorkflowAgent.TYPE);

Der Connection-Broker ist immer ohne Projektbindung, siehe auch hier. Und da es Workflows nur innerhalb eines Projektes gibt, ist der hier wahrscheinlich null. Darum sollte bei solchen Konstrukten immer mit requireSpecialist statt requestSpecialist gearbeitet werden - dann fliegt der Fehler früher und ist auch aussagekräftiger.

D.h. ich gehe mal davon aus, dass folgendes hilft:

WorkflowAgent workflowAgent = context.requireSpecialist(WorkflowAgent.TYPE);

Maßgeblich ist hier der Aufruf auf context anstatt auf connection.getBroker().

Viele Grüße

Michael

View solution in original post

0 Kudos
4 Replies
hoebbel
Crownpeak employee

Hallo Moritz,

ohne mir das näher angeschaut zu haben, tippe ich darauf, dass es an dem Benutzer SYSTEM liegt, mit dem der Auftrag ausgeführt wird. Der ist nicht berechtigt, eine Transition zu schalten.

Funktioniert es denn, wenn Du in der Skriptaktion unter "Eigenschaften" eine eigene Verbindung aufbaust und die Zugangsdaten von einem [technischen] Benutzer einträgst, der die entsprechende Workflow-Schaltung vornehmen darf?

Viele Grüße aus Dortmund,

Holger

0 Kudos
moritzweis
Occasional Observer

Hallo Holger,

ich habe es schon über einen technisch Admin-User versucht. Leider kein Erfolgt.

Die Fehlermeldung lautet wie folgt. Mir fehlt wohl letztlich der Skript Kontext.

ERROR 15.10.2018 12:00:45.260 (de.espirit.firstspirit.impl.access.ScriptContextImpl): Fehler bei der Ausfuehrung: java.lang.NullPointerException: Null Pointer in Method Invocation

java.lang.NullPointerException: Null Pointer in Method Invocation

at bsh.Name.invokeMethod(Name.java:844)

at bsh.BSHMethodInvocation.eval(BSHMethodInvocation.java:75)

at bsh.BSHPrimaryExpression.eval(BSHPrimaryExpression.java:102)

at bsh.BSHPrimaryExpression.eval(BSHPrimaryExpression.java:47)

at bsh.BSHVariableDeclarator.eval(BSHVariableDeclarator.java:86)

at bsh.BSHTypedVariableDeclaration.eval(BSHTypedVariableDeclaration.java:84)

at bsh.BSHBlock.evalBlock(BSHBlock.java:130)

at bsh.BSHBlock.eval(BSHBlock.java:80)

at bsh.BSHBlock.eval(BSHBlock.java:46)

0 Kudos

Hallo Moritz,

ich vermute es liegt daran, dass Du Dir den WorkflowAgent aus dem Connection-Broker holst:

WorkflowAgent workflowAgent = connection.getBroker().requestSpecialist(WorkflowAgent.TYPE);

Der Connection-Broker ist immer ohne Projektbindung, siehe auch hier. Und da es Workflows nur innerhalb eines Projektes gibt, ist der hier wahrscheinlich null. Darum sollte bei solchen Konstrukten immer mit requireSpecialist statt requestSpecialist gearbeitet werden - dann fliegt der Fehler früher und ist auch aussagekräftiger.

D.h. ich gehe mal davon aus, dass folgendes hilft:

WorkflowAgent workflowAgent = context.requireSpecialist(WorkflowAgent.TYPE);

Maßgeblich ist hier der Aufruf auf context anstatt auf connection.getBroker().

Viele Grüße

Michael

0 Kudos
moritzweis
Occasional Observer

Hallo Michael,

vielen Dank.

Das war die Lösung --> WorkflowAgent workflowAgent = context.requireSpecialist(WorkflowAgent.TYPE);

Liebe Grüße

Moritz

0 Kudos