SOG-Helpcenter Logo SOG Business - Software

Datenobjekte


Datenobjekte werden benötigt, wenn Daten aus Datenbanktabellen genutzt werden sollen. Für jede Datenbanktabelle muss dabei das eigentliche Datenobjekt als Datenhalter und eine korrespondierende Tabellenklasse vorhanden sein, die den Zugriff auf Datensätze gewährleistet.

Verwendung


Um Datenobjekte nutzen zu können müssen folgende Voraussetzungen geschaffen werden:

  • Erstellen Sie mit dem Programm "sogdd" ein Data Dictionary für alle gewünschten Tabellen. Tragen Sie die Tabelle in den Dateien "cobol\base\file\file.ccf" ein, wenn diese auch in echten Cobol-Programmen verwendet wird.
    Tragen Sie die Tabelle in den Dateien "cobol\base\file\dbs.hhcsgen" ein. Aktivieren Sie "EnableNoneDbFields" wenn der Zugriff auf Datenfelder über Gruppenstufen unterstützt werden soll. (veraltet)

  • Führen Sie im Projektteil SqlDBEntity die Generierung für _GenerateAllFileModules.sogmangenerate.cs aus.

  • Fügen Sie ggf neu erzeugte Tabellen diesem Workspace hinzu.

  • Wurden neue Tabellen hinzugefügt, oder hat sich die Keystruktur von Key1 für eine Tabelle verändert, generieren Sie in "Entity" Verzeichnis "Generated" die Datei "SOGERPDatabase.soggenerate.cs" neu.

Zugriff auf Datensätze


Für den Zugriff auf einen Datensatz benötigen Sie zuerst ein Datenbankobjekt.
Über die Klasse "SOGERPDatabase" können Sie diese aus der Eigenschaft "Current" erhalten.
Zur Vereinfachung implementieren viele SOG ERP (VACOS) -Klassen eine Eigenschaft "Dbs" die genau diese Datenbank zurückliefert.
Von dem Datenbankobjekt können Sie nun ein Tabellenobjekt für die Tabelle erhalten, auf die Sie zugreifen wollen. Mit Hilfe dieses Tabellenobjektes können Sie wiederum einzelne Datensätze abrufen, einfügen, oder Listen von Datensätzen erhalten oder zählen.


    SOGERPDatabase Dbs = SOGERPDatabase.Current;
    RechnungsLeitsatzTable rlTab = Dbs.GetTable<RechnungsLeitsatzTable>();
    RechnungsLeitsatz rl = rlTab.GetRechnungsLeitsatz( Aph.Firma, 1, 1, 1 );

Diese Systematik erlaubt es, einzelne Objekttypen projektindividuell abzuleiten und mit neuen Funktionen zu versehen.

Aktualisieren von Datensätzen


Um die Daten eines Datensatzes aktualisieren zu können reicht es nicht aus einfach nur die Membervariablen des Datenobjekts zu verändern. Die Membervariablen sind vielmehr normalerweise vor Überschreiben geschützt, um unberechtigte Veränderungen von vorn herein entgegen zu wirken.

Damit Daten aktualisiert werden können müssen entsprechende Aktualisierungsfunktionen auf dem Datenobjekt implementiert werden. Beispiel in der Klasse Notizen:

    public void SetDocAnz( int DokAnz )
    {
        UpdateBegin();
        try
        {
            m_anzdok=DokAnz;
            Update();
        }
        finally
        {
            UpdateEnd();
        }
    }

Die Funktion "SetDocAnz" aktualisiert die Anzahl Dokumente. Die Aktualisierung wird mit "UpdateBegin" eingeleitet und mit "UpdateEnd" beendet. Der Try-Finally-Block sorgt dafür, dass der "UpdateEnd" auf jeden Fall durchlaufen wird.

Alternativ kann auch geschrieben werden:

        rl.Update( () => rl.m_status = 4711 );

Innerhalb des Update-Ausdruck können Datenfelder verändert werden.

Einfügen von Datensätzen


Um neue Datensätze in eine Datenbanktabelle einfügen zu können, gibt es in der Tabellenklasse eine Funktion "NewRecord". Diese liefert einen noch nicht eingefügrten, leeren Datensatz. Nun können die Datenfelder des neuen Satzes belegt werden. Der eingentliche Insert erfolgt dann über die Methode "Insert" der Tabellenklasse.
Hier ein Beispiel mit der Klasse "Notizen":

    Notizen nRec = nTab.NewRecord();

    nRec.m_firma = Aph.Firma;
    nRec.m_bereich = Bereiche.BereichPersonen;
    nRec.m_sa = sa;
    nRec.m_sachnr = skto;
    nRec.m_lnr = 1;
    nRec.m_bereich2 = Bereiche.BereichPersonen;
    nRec.m_txt = "Personendokumente";
    nRec.m_ltz_dat = DateHelper.Now8();
    nRec.m_ltz_user = ((SOGSession)v.sess).sach;
    nRec.m_txt_zeilen = 1;

    nTab.Insert(nRec);

Löschen von Datensätzen


Zum Löschen von Datensätzen aus einer Datenbanktabelle kann die Methode "Delete" des Datensatzes aufgerufen werden.
Sollen vor dem Löschen noch Konsistenzprüfungen durchgeführt werden, Kann hierfür die Virtualle Methode "OnDelete" überschrieben werden.

    nRec.Delete();