Search the FirstSpirit Knowledge Base
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)
}
}
}
}
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
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
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)
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
Hallo Michael,
vielen Dank.
Das war die Lösung --> WorkflowAgent workflowAgent = context.requireSpecialist(WorkflowAgent.TYPE);
Liebe Grüße
Moritz