Search the FirstSpirit Knowledge Base
Hallo,
ich würde gerne wissen, wie ich mittels der FS-API vorherige Revisionen von Datensätzen wiederherstellen kann (so wie es mit der Versionshistorie im Client funktioniert)?
Hintergrund ist, daß Änderungen an mehreren Tausend Datensätzen, die von einem bestimmten Nutzer modifiziert wurden, wieder rückgängig gemacht werden sollen.
Server-Version 4.1.51
Gruß
Martin
Unter 4.0 und 4.1 gibt es eine ähnliche Methode unter dem Namen "getInvalidEntities" (in der Doku, die Herr Gockel verlinkt hat, steht jeweils die FirstSpirit-Version dabei, ab der die Methoden verfügbar sind). Beide Methoden benötigen aber als Parameter einen Entity-Schlüssel (Entity.getKeyValue()).
Über Session#getHistory() kommt man an die historischen Stände eines Datensatzes. Aus diesen kann man die entsprechenen historischen Daten auslesen und dann in die aktuellen Datensätze übertragen.
Kann es sein, daß die History über die Session erst ab Version 4.2 zur Verfügung steht?
Wenn ich folgenden Code ausführe (Beanshell-Script):
context.logInfo("entity id: " + entity.get("fs_id"));
eSession = entity.getSession();
eHistory = eSession.getHistory();
context.logInfo("eHistory: " + eHistory);
bekomme ich eine:
de.espirit.firstspirit.access.script.ExecutionException: Error in method invocation: Method getHistory() not found in class'de.espirit.or.impl.SessionImpl'
Unter 4.0 und 4.1 gibt es eine ähnliche Methode unter dem Namen "getInvalidEntities" (in der Doku, die Herr Gockel verlinkt hat, steht jeweils die FirstSpirit-Version dabei, ab der die Methoden verfügbar sind). Beide Methoden benötigen aber als Parameter einen Entity-Schlüssel (Entity.getKeyValue()).
Ok, mittels "getInvalidEntities()" bekomme ich die alten Stände.
Wenn ich dann die aktuelle Entity durch eine alte ersetze (entity = historyxy), dann hat die entity ebenfalls den
Entity.PersistentState = TEMPORAL_INVALID
Wie komme ich nun von diesem invaliden Zustand auf einen validen? Muß ich dazu das Objekt "Identifier" modifizieren? Wenn ja, wie?
Sie müssen die Daten aus der Historie auf den jeweils aktuellen Datensatz übertragen (abhängig vom Anwendungsfall eventuell auch nur punktuell).
D.h. eine einfache, direkte Zuweisung ist nicht drin, sondern nur das explizite auslesen und setzen von Attributen?
Frage meinerseits: Wie konnte das passieren ("Hintergrund ist, daß Änderungen an mehreren Tausend Datensätzen, die von einem bestimmten Nutzer modifiziert wurden, wieder rückgängig gemacht werden sollen."). Mich würde interessieren, wie man sowas (außer durch rabiates Sperren einer Datenquelle) verhindern kann, z.B. durch einen Workflow
Bei der Menge der Datensätze tippe ich auf ein fehlerhaft programmiertes Skript oder Modul. Das lässt sich durch gründliche QS vermeiden.
Wie man fehlerhafte Eingaben von Redakteuren verhindern kann, dazu habe ich keine Idee.
Hallo zusammen,
ich würde hier nochmal andocken wollen, jedoch helfen mir die Ausführungen oben nicht wirklich.
Mein Anliegen ist es, mit einer bestimmten RevisionsID einer Page den Inhalt der Variablen abzufragen.
Ich weiß, wie man über die API die RevisionsIDs einer Page (BasicElementInfo liefert noch etwas mehr) abrufen kann, jedoch fehlt mir der Ansatz zu sagen, dass ich über die API das StoreElement (in diesem Falle eine Page) in der jeweiligen Revision mir zurückgeben kann.
Ziel ist es textliche Veränderungen in den einzelnen Variablen herauszufinden.
Danke und Gruß