eBiss 3

Hilfe & Dokumentation

Benutzer-Werkzeuge

Webseiten-Werkzeuge


transformation:mappings:objektdefinition:klassenaufbau:class_dbintegration

Beispiel für Datenbank Integration:

Hier wird der Klassenaufbau des gleichen ORDERS-Objekts, nun aber für eine Datenbank Integration, dargestellt.
Die Klasse ORDERS implementiert hier die Schnittstelle DbAdapterTypeBase. Diese wandelt die Objektdefiniton bei Lesevorgängen auf der Quelldatenbank mit dem BackendObjectRetriever in das entsprechende SELECT-Statement um. I.d.R. wird das Attribut ReadMarker() verwendet um Datensätze als gelesen zu vermerken. Dann wird nach dem SELECT auch ein UPDATE-Statement ausgeführt. Bei Schreibvorgängen mit dem BackendObjectTransmitter werden entsprechende INSERT-Statements erzeugt.

Beispiel C# Code

using System;
using System.Collections;
using eBiss.Api;
using eBiss.DbAdapter;
 
namespace XYZ.DB
{
    public class ORDERS : DbAdapterTypeBase
    {
        [MapTrigger, MapExternalName("ORDERSKOPF")]
        public ORDERS_HEADER HEADER;
    }
 
    public class ORDERS_HEADER : IMapObjectItem
    {
        public Decimal PK_ORDERSKOPF;
        [MapSize(35)]
        public string DOCNUMBER;
        public DateTime DOCDATE;
        [MapSize(35)]
        public string ORDERTYPE;	
        public DateTime DELIVERYDATEFROM;
        public DateTime DELIVERYDATETO;	
        [MapFrameDocumentRecipient, MapSize(13)]
        public string SU_GLN;
        [MapFrameDocumentSender, MapSize(13)]
        public string BUYERGLN;
        [MapSize(13)]
        public string DELIVERYPARTYGLN;
        [MapSize(13)]
        public string ULTIMATECONSIGNEEGLN;
        [MapSize(13)]
        public string INVOICERECEIPIENTGLN;
        [MapSize(3)]
        public string XYZ_WCD; //XYZ Währungscode
        [MapSize(1)]
        [ReadMarker(ReadMarkerType.CheckUpdate, "N", "V")]
        public string MUTATION_Type;
        [ReadMarker(ReadMarkerType.Timestamp)]
        public DateTime MUTATION_Date;
 
        [MapListType(typeof(ORDERS_DETAIL)), MapExternalName("ORDERSDETAIL")]
        public ArrayList DETAIL;
 
    }
 
    public class ORDERS_DETAIL : IMapObjectItem
    {
        public Decimal PK_ORDERSDETAIL;
        [Relation("PK_ORDERSKOPF")]
        public Decimal PK_ORDERSKOPF;
        public Int32 POSNUMBER;	
        public string EAN;	
        public int ORDEREDQUANTITY;	
        public decimal PURCHASEPRICENET;
        [MapSize(3)]
        public string PURCHASEPRICENETCURRENCY;
        [MapSize(1)]
    }	
}

Die Klasse ORDERS_HEADER beinhaltet die Kopf-Informationen der ORDERS und implementiert die Schnittstelle IMapObjectItem. Diese Darf einmal je Datei vorkommen. Mit dem Attribut MapExternalName(„ORDERSKOPF“) wird explizit der Tabellenname der Kopfdaten bestimmt und mit MapExternalName(„ORDERSDETAIL“) ist der Tabellenname der Detaildaten deklariert. Die Relation der Details zu den Kopfdaten wird hier über das Mapping Attribut [Relation(„PK_ORDERSKOPF“)] auf Datenelement public Decimal PK_ORDERSKOPF; hergestellt.

Hinweis: using eBiss.DbAdapter;

Lesemarkierungen

Werden Daten ausgelesen, so muss man dies auf geeignete Art vermerken damit diese nicht wiederholt gelesen werden. In der Praxis kommen zwei Methoden zur Anwendung:

  1. Vermerken des Lesevorgangs in einer separaten STATUS1)-Tabelle.2)
  2. Vermerken des Lesevorgangs auf den Datensätzen selbst.3)

Das gezeigt Beispiel verwendet hierfür das Mappingattribut ReadMarker() wie folgt:

        [ReadMarker(ReadMarkerType.CheckUpdate, "N", "V")]
        public string MUTATION_Type;
        [ReadMarker(ReadMarkerType.Timestamp)]
        public DateTime MUTATION_Date;

Das Attribut ReadMarkerType.CheckUpdate verwendet bei einem SELECT den ersten Parameter „N“ als Filter in der WHERE-Clause und nach dem Select wird ein UPDATE Statement mit dem zweiten Parameter „V“ auf dem attributierten Datenelement ausgeführt.

Eine Alternative zu Attribut ReadMarkerType.CheckUpdate gibt es mit Attribut ReadMarkerType.UpdateOnly:

        [ReadMarker(ReadMarkerType.UpdateOnly, DoneVal = "UPDATED")]
        public string MUTATION_Type;

oder:

        [ReadMarker(ReadMarkerType.UpdateOnly, DoneVal = "$UpdateVariable")]
        public string MUTATION_Type;

Dieses Attribut bietet die Möglichkeit einen Datensatz beim Commit feste Werte oder Werte aus Variablen mitzugeben ohne diese wie beim ReadMarker.CheckUpdate vorher zu überprüfen.

Hierachische Strukturen

Hierachische Strukturen sind vorzugsweise in der Datenbank durch verschieden Tabellen etabliert, können aber auch mit Hilfe von Datensatztypen innerhalb einer Tabelle deklariert sein. Im Normalfall kann dies ausreichend mit dem Attribut Relation] erreicht werden. Im letzteren Fall kann zusätzlich zu dem Attribut [[transformation:mappings:objektdefinition:attribute#dbadapter_attribute|Relation mit dem Where_Attribut diese Beziehung hergestellt werden.

1)
Diese Tabelle benötigt drei Felder und zwar TypeName(Char), DocumentId(Char) und ReadTimeStamp(DateTime).
2)
Diese Methode kommt dann zur Anwendung wenn die Datenbank keine Markierungsfelder anbietet oder gar schreibgeschützt verbleiben soll.
3)
Dies ist, aufgrund einfacher Anwendbarkeit und besseren Performance, die bevorzugt Methode.
transformation/mappings/objektdefinition/klassenaufbau/class_dbintegration.txt · Zuletzt geändert: 2024/02/20 08:15 von 127.0.0.1