Search the FirstSpirit Knowledge Base
Hallo.
Ich versuche für einen Export-Bericht programmatisch herauszufinden, welche Elemente im Sitestore gelöscht worden sind. Dabei soll es sich jedoch nur um Elemente eines bestimmten Templates handeln.
Mittlerweile bin ich schon so weit:
List<DeletedElementsInfo> deletedElements = siteStore.getDeletedChildren(fromRevision.getId(), 0);
for (DeletedElementsInfo deletedElementsInfo : deletedElements) {
for(ElementInfo info : deletedElementsInfo.getDeletedElements()) {
String deletedUid = info.getUid();
}
}
Mit der UID dachte ich nun, kann ich mir das Element holen und über
pageRef.getPage().getTemplate().getUid()
Prüfen, ob genau das Template das Richtige ist.
Leider komme ich nicht soweit, denn
PageRef pageRef = (PageRef) siteStore.getStoreElement(deleteRootElement.getUid(), IDProvider.UidType.SITESTORE_LEAF);
liefert null, macht ja auch Sinn, denn das Element ist ja auch eigentlich gelöscht.
Wie komme ich aber nun an ein gelöschtes Element ran, ohne es widerherstellen zu müssen?
Danke und Gruß
Hallo Ronny,
das Problem hier ist einfach, dass du in dem Store suchst, in dem das Objekt gelöscht ist. Du kannst dir aber einfach den richtigen Store holen:
for(ElementInfo info : deletedElementsInfo.getDeletedElements()) {
...
// userservice für die revision holen
revisionUserService = project.getUserService(info.getRevisionId() - 1);
// korrekten Store holen
siteStore = revisionUserService.getStore(Store.Type.SITESTORE);
// Seite laden
pageRef = siteStore.getStoreElement(info.getUid(), IDProvider.UidType.SITESTORE_LEAF);
}
Gruß
Thorsten
Hallo Ronny,
das Problem hier ist einfach, dass du in dem Store suchst, in dem das Objekt gelöscht ist. Du kannst dir aber einfach den richtigen Store holen:
for(ElementInfo info : deletedElementsInfo.getDeletedElements()) {
...
// userservice für die revision holen
revisionUserService = project.getUserService(info.getRevisionId() - 1);
// korrekten Store holen
siteStore = revisionUserService.getStore(Store.Type.SITESTORE);
// Seite laden
pageRef = siteStore.getStoreElement(info.getUid(), IDProvider.UidType.SITESTORE_LEAF);
}
Gruß
Thorsten
Das ganze geht natürlich auch, wenn du die neue SpecialistsBroker-Infrastruktur verwendest:
brokerAgent = context.requireSpecialist(BrokerAgent.TYPE);
broker = brokerAgent.getBroker(info.getRevisionId() - 1);
revisionElementAgent = broker.requestSpecialist(StoreElementAgent.TYPE);
elem = revisionElementAgent.loadStoreElement(deletedUid, PageRef.UID_TYPE, false);
Das ist jetzt in einem Skript, kann aber direkt portiert werden.