Die Klasse TeamWise.Runtime.NativeSupport.Persistency
ermöglicht es, den aktuellen Stand der Objekt- und Schnittstellendaten im aktuellen Modul auf eine Datei zu speichern und wiederherzustellen. Entweder kann die gesamte Modulschnittstelle mit den Daten aller zu dem Zeitpunkt bekannter Objekte gesichert werden (einschließlich lokaler Objekte), oder Objekte können einzeln gesichert werden.
Beliebige Instanzen der Klasse Persistency
können über die Services
mit der Methode CreatePersistency
angelegt werden.
var pers = this.Services.CreatePersistency();
DIe Klasse Persistency
unterstützt das IDisposable
Interface. Insofern macht es Sinn, Instanzen dieser Klasse immer in einem using
-Block zu verwenden.
using (var pers = this.Services.CreatePersistency()) { pers.SaveXml = true; pers.Filename = @"c:\t\test.xml"; pers.Add(this.Data.Pvgesl); pers.Add(this); pers.Save(); }
Man beachte, dass im obigen Beispiel die Save
-Anweisung im Grunde redundant ist, da beim Dispose
ebenfalls die Daten persistent gemacht werden würden, insofern es noch ungespeicherte Änderungen gibt. Auch ist die Anweisung, das Pvgesl
-Objekt hinzuzufügen, redundant, da durch die Add(this)
-Anweisung alle bekannten Objekte persistent gemacht werden. Das gleiche Objekt kann durchaus mehrfach hinzugefügt werden. Die letzte Fassung ist allerdings die einzige, die persistent gemacht wird.
bool Add(IDataObject obj); bool Add(Module modl); bool Remove(IDataObject obj);
Mit der Add
-Methode kann das jeweilige Objekt oder alle bekannten Objekte des Bausteins (globale, lokale und Parameterobjekte) der Persistenz hinzugefügt werden. Die Remove
-Methode entfernt das einzelne Objekt wieder aus der Persistenz.
bool Save(String path); bool Load(String path);
Mit der Save
-Methode werden die Daten im angegebenen Pfad persistent gemacht. Die Load
-Methode stellt das Persistenz-Objekt aus den gespeicherten Daten wieder her. Durch das Laden der Datei werden noch keine Objektdaten verändert. Sie können anschließend gezielt entscheiden, ob Sie diese Daten ganz oder teilweise in die Datenobjekte übernehmen möchten. Das Argument path
kann leer sein, wenn zuvor die Eigenschaft Filename
bestückt wurde.
bool Save(out byte[] data); bool Load(byte[] data);
Alternativ1) kann beim Speichern und Laden ein Byte Array
verwendet werden, wenn die Daten irgendwo anderes (z.B. eine SQL-Datenbank) gespeichert werden solle.
bool Restore(IDataObject obj); bool Restore(Module modl);
Mit der Restore
-Methode kann entweder ein einzelnes Datenobjekt oder sämtliche passende Datenobjekte für einen Baustein wiederhergestellt werden. Die vorher in den jeweiligen Objekten vorhandene Daten gehen dabei verloren.
public string Filename { get; set; }
Mit der Eigenschaft Filename
kann der Name der Datei für das anschließende Speichern oder Laden festgelegt werden. Dies ist insbesondere dann sinnvoll, wenn das Speichern als Nebeneffekt vom Dispose
erfolgt.
bool SaveBinary { set; } bool SaveXml { set; } bool SaveExcel { set; }
Über die Eigenschaften SaveBinary
und SaveXml
kann festgelegt werden, in welchem Format die Daten persistent gemacht werden sollen. Wenn nichts explizit angegeben wird, werden die Daten binär gespeichert, da diese Speicherung am effizientesten ist. Die Eigenschaften schließen sich gegenseitig aus. Beim Laden der Persistenz wird das Format automatisch erkannt. Es können neben binäre und XML Persistenz-Dateien auch sog. TMI
-Dateien geladen werden.
Ab TAA 9.07 kann man die Objektdaten (Parameter, globale oder lokale Objekte) zur Informationszwecken auch als Excel Tabelle (XLSX Datei) speichern. Die in Excel Format gespeicherten Objektdaten können nicht wieder geladen werden.
bool IgnoreRoleOnRestore { get; set; }
Wenn mit der Methode Restore
sämtliche Daten für einen Baustein wiederhergestellt werden sollen, werden durch die definierte Rolle schreibgeschützte Daten übersprungen. Wenn jedoch die Eigenschaft IgnoreRoleOnRestore
gesetzt wird, so werden sämtliche Daten wiederhergestellt. Außerdem werden in diesem Fall lokale Objekte angelegt für alle persistent gemachten Objekte, zu der nunmehr keinen passenden Empfänger ermittelt werden kann.
bool IgnoreEmpty { get; set; }
Beim Speichern im XML-Format kann Platz und Zeit gespart werden, wenn für leere Felder, resp. Felder dessen Inhalt mit dem Default- oder Initial-Wert übereinstimmen, keine Einträge vorgenommen werden. Bei der binären Speicherung wird diese Option ignoriert.
string ApplicationVersion(string appl);
Diese Funktion liefert die Anwendungsversion, die verwendet wurde, als das Persistenz-Objekt erzeugt wurde. Damit kann z.B. zur Laufzeit entschieden werden, ob die in dem Persistenz-Objekt enthaltene Daten überhaupt geladen werden sollen.
if (pers.ApplicationVersion(this.Appl) != this.Services.Application.Version) { ...