Search the FirstSpirit Knowledge Base
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 SpecialistBroker zu 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
Hallo René,
von getBroker gibt es mehrere Implementierungen - also nicht alle geben einfach null zurück 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--;
}
Hallo René,
von getBroker gibt es mehrere Implementierungen - also nicht alle geben einfach null zurück 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--;
}
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