Search the FirstSpirit Knowledge Base
Hallo Community,
ich habe in meinem Projekt die folgende Fragestellung:
Ich möchte von einem gelöschten Element aus der Strukturverwaltung die Versionshistorie auswerten. Konkret habe ich von einem gelöschten Element die ID und möchte herausfinden, wer dieses Element gelöscht hat.
Existiert der Elternknoten noch, so kann ich im SkriptContext auf dem Elternknoten über
e.getDeletedChilds(Rev-ID, ChildCount)
die gelöschten Elemente finden und in deren Revisions Objekten erfahre ich auch den User.
Doch wie verfahre ich, wenn ich
a) nur die Element-ID habe und den Elternknoten nicht kenne
oder
b) der Elternknoten ebenfalls gelöscht wurde.
Ich würde mich freuen, wenn mir hierbei jemand behilflich sein könnte.
Viele Grüße
Andreas
Ein Hinweis vorweg. Egal welchen Weg sie einschlagen, hier betreten sie einen Bereich der API, der bei ungünstiger Benutzung extrem performancekritisch ist. Die Möglichkeiten der Einschränkung der Ergebnismengen bzw. die zeitlichen Grenzen sollten auf jeden Fall bewusst verwendet werden.
1. Möglichkeit:
===========
Die Methode #getDeletedChilds steht auf auf Store zur Verfügung. Wenn man also wenigstens weiss, in welchem Store man sucht, da könnte man darüber arbeiten:
SiteStoreRoot sitestore;
List<DeletedElementsInfo> deletedInfos = siteStore.getDeletedChilds(startRevision, 50);
2. Möglichkeit:
===========
Man könnte diese Informationen über die Revisionsdaten ermitteln. Einstiegspunkt: Project#getRevisions
import de.espirit.firstspirit.storage.RevisionFilter;
import de.espirit.firstspirit.storage.RevisionOperation;
import de.espirit.firstspirit.storage.RevisionOperation.OperationType;
import de.espirit.firstspirit.storage.DeleteOperation;
Project project;
List<Revision> deletedRevisions = project.getRevisions(fromRevision, toRevision, 50, RevisionFilter.DELETE_FILTER);
for (final Revision rev : deletedRevisions) {
final RevisionMetaData meta = rev.getMetaData();
final RevisionOperation operation = meta.getOperation();
if (operation.getType == OperationType.DELETE) {
final DeleteOperation deleteOp = (DeleteOperation) operation;
// prüfen ob meine gesuchte ID diese DeleteOperation betreffen
deleteOp.getDeleteRootElement();
// oder
deleteOp.getElements();
}
}
Ein Hinweis vorweg. Egal welchen Weg sie einschlagen, hier betreten sie einen Bereich der API, der bei ungünstiger Benutzung extrem performancekritisch ist. Die Möglichkeiten der Einschränkung der Ergebnismengen bzw. die zeitlichen Grenzen sollten auf jeden Fall bewusst verwendet werden.
1. Möglichkeit:
===========
Die Methode #getDeletedChilds steht auf auf Store zur Verfügung. Wenn man also wenigstens weiss, in welchem Store man sucht, da könnte man darüber arbeiten:
SiteStoreRoot sitestore;
List<DeletedElementsInfo> deletedInfos = siteStore.getDeletedChilds(startRevision, 50);
2. Möglichkeit:
===========
Man könnte diese Informationen über die Revisionsdaten ermitteln. Einstiegspunkt: Project#getRevisions
import de.espirit.firstspirit.storage.RevisionFilter;
import de.espirit.firstspirit.storage.RevisionOperation;
import de.espirit.firstspirit.storage.RevisionOperation.OperationType;
import de.espirit.firstspirit.storage.DeleteOperation;
Project project;
List<Revision> deletedRevisions = project.getRevisions(fromRevision, toRevision, 50, RevisionFilter.DELETE_FILTER);
for (final Revision rev : deletedRevisions) {
final RevisionMetaData meta = rev.getMetaData();
final RevisionOperation operation = meta.getOperation();
if (operation.getType == OperationType.DELETE) {
final DeleteOperation deleteOp = (DeleteOperation) operation;
// prüfen ob meine gesuchte ID diese DeleteOperation betreffen
deleteOp.getDeleteRootElement();
// oder
deleteOp.getElements();
}
}
Vielen Dank für die schnelle Antwort.
Allerdings hatte ich mir erhofft, dass es eine Möglichkeit gibt anhand der ID oder UID eines Elementes dessen Versionshistorie aufzurufen, ohne über sämtliche Revisionen und deren Metadaten zu iterieren.