Search the FirstSpirit Knowledge Base
Hallo,
ich habe vor einen Datensatz über einen Arbeitsablauf zu löschen. Dabei soll auch der Freigabestand (wir verwenden die Freigabe) der Datensatz endgültig gelöscht werden.
Der Arbeitsablauf wird bei dem zu Löschenden Datensatz über "Arbeitsablauf -> ..." (rechte Maustaste) gestartet.
...
ContentWorkflowable WF = (ContentWorkflowable) context.getWorkflowable();
Entity ent = WF.getEntity();
...
Session sess = schema.getSession();
sess.delete(ent);
sess.commit();
//freigabestand löschen
Session relsess = schema.getSession(true);
Entity relEnt = sess.find(tableName , new Object[] {"98752"} );
....
Die "relEnt" liefert mir "null".
Hängt das damit zusammen, dass das Löschen über einen Arbeitsablauf vorgenommen wird und der Freigabestand erst mit dem Ende des Arbeitsablaufes zur Verfügung steht?
Ich habe auch versucht vor dem
schema.getSession(true);
ein
schema.refresh();
aufzurufen. Ohne Erfolg.
Wenn ich das erste Löschen und das Löschen des Freigabestandes hintereinander in einem Script ausführe, klappt dass ohne Probleme.
Kann ich das Löschen des Freigabestandes in dem Arbeitsablauf irgendwie realisieren, oder muss das Löschen nach Ablauf des Scriptes passieren (über einen Auftrag, oder ...)?
Danke für Hinweise
Andreas
Hallo,
besten Dank. Funktioniert mit einer kleinen Ergänzung.
Vor dem "getIncomingReferences" musste ich noch ein
ent.getSession().rollback();
einfügen, das sollte ja eigentlich nichts machen, oder?
Beim ersten Löschen eines Datensatzes funktionierte das Script. Will ich danach gleich noch einen Datensatz löschen erhalte ich eine Fehlermeldung:
de.espirit.or.ORException: The entity de.espirit.or.impl.EntityImpl@6c0b4764{OHB_BGD,PERSISTENT,released,FS_ID=98944,FS_VALID_FROM=1311078... isn't deletable in release session (current version still valid)
(Den Code habe ich direkt in das (Arbeitsablauf-)Script geschrieben).
Viele Grüße aus DD
Andreas Vogt
20.07.2011
P.s. Ich habe die Methode in ein Modul gepackt und da funktioniert es wie von Ihnen gepostet
Hallo zusammen,
gibt es hier ein fertiges Script vom Helpdesk? Dann müsste ich nicht bei 0 anfangen.
Viele Grüße
Timo Meister
Auch wenn es schon ein alter Post ist:
nach
Entity eRelease = releaseSession.find(e.getKeyValue());
sollte noch eine Null-Check eingefügt werden, da man sonst eine NPE bei noch nie freigegebenen Datensätzen bekommt.
if(eRelease == null)
return true;
Gruß,
Andreas