Marsupilami
I'm new here

Mittels FS-API frühere Revision eines Datensatzes wiederherstellen

Jump to solution

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

1 Solution

Accepted Solutions

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()).

Peter

View solution in original post

0 Kudos
14 Replies
gockel
Crownpeak employee

Ü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.

0 Kudos

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'

0 Kudos

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()).

Peter
0 Kudos

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?

0 Kudos

Sie müssen die Daten aus der Historie auf den jeweils aktuellen Datensatz übertragen (abhängig vom Anwendungsfall eventuell auch nur punktuell).

Peter

D.h. eine einfache, direkte Zuweisung ist nicht drin, sondern nur das explizite auslesen und setzen von Attributen?

0 Kudos
arnbae
I'm new here

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

0 Kudos

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.

Smiley Wink

Peter
0 Kudos
lmeric
I'm new here

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ß

0 Kudos