seegers
Returning Observer

Auf ein (gelöschtes) Element in einer früheren Revision zugreifen

Jump to solution

Servus allerseits,

für eine Aufgabe erstelle ich gerade ein Skript, welches gelöschte Knoten in der Struktur analysieren soll. Für dieses Analyse scheint es notwendig zu sein, den Knoten in einer früheren Revision zu laden um Zugriff auf die incoming/outgoingReferences zu bekommen.

Initial dachte ich, dass dies mit dem entsprechenden Aufruf des SpecialistBrokerzu machen wäre:

SpecialistsBroker getBroker(long revision) "Get hold of a broker operating on the given revision."

for (ElementInfo info : deletedElementsInfo.getDeletedElements()) {

   SpecialistsBroker broker = brokerAgent.getBroker(info.getRevisionId());

   ...

}

Jedoch stellt sich beim Debugging heraus, dass dieser Aufruf immer zu einem Null führt:

/de/espirit/firstspirit/agency/ConnectionDelegatingSpecialistsBroker.class

public SpecialistsBroker getBroker(long revision) {

  return null;

}

:smileyalert: Gibt es andere Implementierungen von diesem Aufruf, wo dies anders ist oder verstehe ich an dieser Stelle etwas falsch? Zumindest ist dieses Verhalten etwas unerwartet für mich. Derzeit verbinde ich mich mit dem Projekt in meiner IDE mit dem ConnectionManager.

Meine gewünschten Infos bekomme ich jetzt über den UserService des Projektes, mit dem ich verbunden bin:

UserService userService = project.getUserService(info.getRevisionId() - 1);

Store store = userService.getStore(Store.Type.SITESTORE, false);

IDProvider storeElement = store.getStoreElement(info.getUid(), IDProvider.UidType.SITESTORE_LEAF);

:smileyalert: Allerdings habe ich noch nicht verstanden, wieso hier von RevisionId noch 1 subtrahiert wird.

Falls hier jemand mehr zu den Hintergründen weiß, mein Verständnis wird sich freuen.

Beste Grüße,

René

FS Version: 5.2.422

0 Kudos
1 Solution

Accepted Solutions
tenter
I'm new here

Hallo René,

von getBroker gibt es mehrere Implementierungen - also nicht alle geben einfach null zurück Smiley Happy Je nach Kontext, in dem du dich befindest, gibt die API dir also etwas zurück, oder auch nicht. In welchen Kontexten du diesen Aufruf machen könntest, kann ich dir spontan nicht beantworten. Der Weg den du gefunden hast ist in vielen Fällen eine Alternative und das ist genau das, was du machen musst. Dass du da noch eins subtrahierst liegt daran, dass du ja eine vergangene Revision betrachten willst. Das heißt du nimmst die Id der aktuellen Revision, und da die RevisionsId fortlaufend vergeben wird, nimmst du mit -1 die vorangegangene.

Kleiner Tip dazu noch: Wenn seit dem Löschzeitpunkt des Knotens mehrere Revisionen durchlaufen wurden, musst du hier sowas machen wie

while (revisionId > 0) {

revisionId--;

}

View solution in original post

0 Kudos
2 Replies
tenter
I'm new here

Hallo René,

von getBroker gibt es mehrere Implementierungen - also nicht alle geben einfach null zurück Smiley Happy Je nach Kontext, in dem du dich befindest, gibt die API dir also etwas zurück, oder auch nicht. In welchen Kontexten du diesen Aufruf machen könntest, kann ich dir spontan nicht beantworten. Der Weg den du gefunden hast ist in vielen Fällen eine Alternative und das ist genau das, was du machen musst. Dass du da noch eins subtrahierst liegt daran, dass du ja eine vergangene Revision betrachten willst. Das heißt du nimmst die Id der aktuellen Revision, und da die RevisionsId fortlaufend vergeben wird, nimmst du mit -1 die vorangegangene.

Kleiner Tip dazu noch: Wenn seit dem Löschzeitpunkt des Knotens mehrere Revisionen durchlaufen wurden, musst du hier sowas machen wie

while (revisionId > 0) {

revisionId--;

}

0 Kudos
MichaelaReydt
Community Manager

Hallo René,

benötigst du noch weitere Hilfe oder konnte Hannes dir bereits weiterhelfen? In diesem Fall wäre es super, wenn du seine "richtige Antwort" entsprechend markierst.

Viele Grüße

Michaela

0 Kudos