Variabeln im GenerateTask setzen und persistieren
Author: seegers
Publication Date: 2/9/2018 16:30
Servus zusammen,
um mir ein paar Pflegeaufgaben über verschiedene Projekte hin einfacher zu machen, würde ich gerne über ein Script mir die GenerateTasks aus den diversen ScheduleEntrys holen und dort Variabeln setzen.
Nach einem ausgeführten setVariable("key, "value") kann ich über einem anschließenden getVariables() auch meine gesetzte Variable sehen. Wenn ich mir den Auftrag dann jedoch im Server Manager ansehe, dann ist hier die gesetzte Variable wohl nicht persistiert worden.
Auch ein lock, save, unlock auf dem darüber liegendem ScheduleEntry hat nicht geholfen.
Was übersehe ich, bzw. wie kann ich über ein Skript Variabeln in Generierungsaufträgen nachhaltig verankern?
Viele Grüße,
René
Tags: fs5.2, generatetask, setvariable
-
Author: felix_reinhold - 2/12/2018 6:42
Hallo René,
habe mal schnell einen Auftrag mit einem Generierungstask angelegt und folgendes eben schnell in die bsh gehauen und bei mir wurden die Variablen angezeigt:
as = context.requestSpecialist(de.espirit.firstspirit.access.ServicesBroker.TYPE).getService(de.espirit.firstspirit.access.AdminService.class);
prj = e.getProject();
se = as.getScheduleStorage().getScheduleEntry(prj, "debug");
gt = se.getTasks().get(0);
se.lock();
gt.setVariable("testVariable","testValue");
se.save();
se.unlock();
Sieht dein Code auch in etwa so aus?
Gruß
Felix
0 -
Author: seegers - 2/13/2018 10:21
Hier ist mein Code zum Vergleich, ich lasse es als Skript laufen
AdminService as = context.getConnection().getService(AdminService.class);
ScheduleStorage sst = as.getScheduleStorage();
for(Long pid:project_ids){
Project p = as.getProject(pid);
for(ScheduleEntry se:sst.getScheduleEntries(p)){
for(ScheduleTask t:se.getTasks()){
if(t instanceof GenerateTask && "generate".equals(t.getName())){
for(v:t.getVariables()){ //log var status to console 'before'
context.logInfo(" - " + v.getKey() + " : " + v.getValue());
}
se.lock();
t.setVariable("dv_tracking","false");
se.save();
se.unlock();
for(v:t.getVariables()){ //log var status to console 'after', neue Var 'dv_tracking' wird in der Konsole angezeigt, aber nicht in der Ansicht des Server Manager
context.logInfo(" - " + v.getKey() + " : " + v.getValue());
}
}
}
}
}
0 -
Author: felix_reinhold - 2/13/2018 11:03
Hallo René,
dein Code funktioniert bei mir. Könnte also ein Bug in deiner FS-Version sein.
Am besten mal ein Ticket beim Helpdesk aufmachen.
Gruß
Felix
0 -
Author: hbarthel - 2/13/2018 11:17
Ich sperre und speichere immer noch das Projekt, wenn "se.isProjectSchedule()" true liefert. Ich weiß nicht, ob ich das schonmal ohne probiert hatte, jedenfalls funktioniert es so:
if (entry.isProjectSchedule()) {
entry.getProject().lock();
}
entry.lock();
.....
entry.save();
entry.unlock();
if (entry.isProjectSchedule()) {
entry.getProject().save();
entry.getProject().unlock();
}
Gruß, Heiko
0 -
Author: seegers - 2/13/2018 13:54
felix.reinhold: Dein Skript läuft auch bei mir in der BSH, und da unsere Ansätze ja im Prinzip gleich sind, vermute ich nicht einen Bug in der Version
hbarthel: Danke für die Idee, macht jedoch keinen Unterschied bei meinem Problem
0 -
Author: seegers - 2/13/2018 15:19
Ich habe die Lösung nun gefunden. Die Methoden auf dem ScheduleEntry-Objekt müssen außerhalb der For-Schleife mit ScheduleTasks aufgerufen werden. Ich vermute, dass hier irgendwie ein unterschiedlicher Scope vorliegt.
se.lock();
for(ScheduleTask t:se.getTasks()){
...
}
se.save();
se.unlock();
0
Bitte melden Sie sich an, um einen Kommentar zu hinterlassen.
Kommentare
6 Kommentare