Hallo zusammen,
ich habe in einem Projekt das Problem, eine korrekte Teil-Generierung über ein Skript ausführen zu lassen. Das Skript wird über einen Arbeitsablauf (Freigabe-Workflow) manuell ausgeführt, nachdem ein Redakteur die Seite freigegeben hat und soll die dem Workflow entsprechende Seite generieren und anschließend auf dem Web Server ablegen (also ein ganz gewöhnlicher Partly-Deply Auftrag).
Der Arbeitsablauf sieht folgendermaßen aus und markiert zunächst eine freigegebene aber noch nicht deployte (Inhalts-) Seite:

Durch den Klick auf einen entsprechenden Button im Arbeitsablauf kann über das folgende Skript "deploy" nun ein Deploy Auftrag angestoßen werden:
[...]
/////////////////////////////////////////////////
schedulename = "generate & deploy partly";
scheduleEntry = null;
/////////////////////////////////////////////////
_project = context.getProject();
element = context.getElement();
context.logInfo("Current Revision : " + element.getRevision().getId());
context.logInfo("Release Revision: "+element.getReleaseRevision().getId().toString());
ss = context.getUserService().getStore(de.espirit.firstspirit.access.store.Store.Type.SITESTORE,false);
rev = element.getReleaseRevision();
if (element != null) {
scheduleStorage = context.requireSpecialist(ServicesBroker.TYPE).getService(AdminService.class).getScheduleStorage();
allScheduleEntries = scheduleStorage.getScheduleEntries(_project); // get all ScheduleEntries of the current project
for (entry : allScheduleEntries) {
if (entry.getName().equals(schedulename)) { // search for the ScheduleEntry "generate & deploy partly"
scheduleEntry = entry;
break;
}
}
if(scheduleEntry != null){
gTask;
for(ScheduleTask scheduleTask : scheduleEntry.getTasks()) { // get all tasks of selected schedule entry
if(scheduleTask instanceof GenerateTask) {
gTask = scheduleTask;
break;
}
}
if (gTask != null){
gTask.getStartNodes().clear(); // Clear old start nodes
gTask.getStartNodes().add(element.getInRevision(rev));
}
control = scheduleEntry.execute(); // Executing the deployment
control.awaitTermination(); // the workflow waits untill the schedule-task ended
context.logInfo(control.getState().getState().toString());
}
else {
context.logError("The ScheduleEntry '" + schedulename + "' doesn't exist!");
}
}
context.doTransition("finito"); // change workflow-status
Bei jeder Auftragsausführung erhalte ich aber folgende Fehlermeldung:
ERROR 03.12.2014 13:33:12.830 (de.espirit.firstspirit.server.scheduler.GenerateTaskExecutor): sitestore node id=11757 not found for revision 26775
Das Problem hängt also mit der Revision zusammen. Erstaunlicherweise existiert die gesuchte Revision - hier im Beispiel '26775' - auch gar nicht. Die korrekte Revision lautete zum Zeitpunkt der Skript-Ausführung in diesem Beispiel "26774"! Dies habe ich mit entsprechenden Log-Ausgaben überprüft.
Auch in der Versionhistorie der zugehörigen Inhaltsseite ist die in der Fehlermeldung angegebene Revision überhaupt nicht vorhanden. Dort tauchen lediglich die beiden Revisionen VOR und NACH dem Deploy auf (also "nach Freigabe" mit Bsp. ID "26774" und "nach Deploy" mit Bsp. ID "26776").
Woran kann dieses Problem liegen? Kann ich die Revision noch irgendwie anders manuell beeinflussen? Und vor allem: Wie und wann ist die neue (falsche) überhaupt entstanden und warum wird diese dann auch noch verwendet, wenn ich im Skript doch sogar extra mit angebe, dass die Revision vom Zeitpunkt der Freigabe verwendet werden soll? Hat mein hinzugefügter StartNode überhaupt Auswirkung auf den Auftrag?
Ich bedanke mich im Voraus und hoffe, dass mir jemand helfen kann!
Viele Grüße!
Fredrik