novomind
I'm new here

getTemplate() auf ein gelöschtes Page-Element

Jump to solution

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ß

0 Kudos
1 Solution

Accepted Solutions
thmarx
I'm new here

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

View solution in original post

0 Kudos
2 Replies
thmarx
I'm new here

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

0 Kudos

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.