Datensatz (incl. Freigabestand) über Arbeitsablauf löschen
Author: aVogt
Publication Date: 7/4/2011 14:30
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
-
Author: kubczak - 7/19/2011 13:12
Hallo,
entities im current und release Stand können prinzipiell wir folgt gelöscht werden (Modulcode). Wichtig sind die Rollback Aufrufe, um nicht mit dem Datenbestand im Cache aneinander zu geraten.
Viele Grüße,
Christian Kubczak
public boolean deleteEntity(Entity e, Content2 c) {
boolean result = false;
Schema s = c.getTemplate().getSchema();
if(s.getIncomingReferences(e).length == 0 || admin) {
try {
c.lock(e);
Dataset eDS = c.getDataset(e);
eDS.delete();
eDS.save();
} catch (LockException le) {
Logging.logError("Lockexception: ",le,LOGGER);
le.printStackTrace();
} finally {
try {
c.unlock(e);
c.setLock(true);
c.save();
c.setLock(false);
e.getSession().commit();
} catch (LockException le) {
le.printStackTrace();
} catch (ElementDeletedException e1) {
e1.printStackTrace();
}
}
e.getSession().rollback(); //VOODOO
Session releaseSession = c.getTemplate().getSchema().getSession(true); //delete page entity (release state)
releaseSession.rollback(); //no VOODOO // reset timestamp to now - read actual data
Entity eRelease = releaseSession.find(e.getKeyValue());
try {
c.lock(eRelease);
Dataset eDS = c.getDataset(eRelease);
eDS.delete();
eDS.save();
} catch (LockException le) {
Logging.logError("Lockexception: ",le,LOGGER);
le.printStackTrace();
} finally {
try {
c.unlock(eRelease);
releaseSession.commit();
} catch (LockException le) {
le.printStackTrace();
}
releaseSession.rollback(); //VOODOO
}
result = true;
} else {
Logging.logError("Incoming references found", LOGGER);
}
if(!result) {
Logging.logError("Could not delete entity", LOGGER);
} else {
Logging.logInfo("Deletion of entity successful", LOGGER);
}
return result;
}
0
Vous devez vous connecter pour laisser un commentaire.
Commentaires
1 commentaire