Questions & Answers

SOLVED
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

Type a product name