====== HowTo - Datenbank Integration (DB Adapter) ====== Der Datenbank Adapter erlaubt die direkte Integration von eBiss mit einer Datenbank ====== Einstieg ====== Als Einsteig sollen hier Daten aus einer einfachen und flachen Tabelle 'DbAdapterTest' ausgelesen werden. Die notwendige Struktur zum Auslesen der Tabelle 'DbAdapterTest' definieren Sie im [[programmierung:typbibliotheken:start|]] (oder im .Net Code) wie beschrieben in [[howtos:dbadapter:create_structure|]] und erstellen die DLL, am besten auch direkt im Type Editor. In eBiss verwenden Sie den JobStep [[prozessdefinition:jobs:jobsteps:kommunikation:backend:backendobjectretrieverex|]] und wählen: - als BackendType den **eBiss.DbAdapter.StandardReader** aus (beachten Sie bei einer eBiss Version vor 3.5.237((in eBiss Version vor der Version Version 3.5.237 (14.1.21) war es notwendig, den Job-Step einmal neu Auszuwählen)) ) und - dann wählen dann unter DocumentTypeName die von Ihnen erstellte Klasse 'eBiss.TypeLib.DbAdapter.SimpleSample' aus. Definieren sie im Job Step oder am Systempartner die Variablen [[howtos:dbadapter:dbconnection|]]. Beispiele für die Variablen finden Sie in dem eBiss Installationsverzeichnis z.B. für den SQL-Server unter: * StandardTemplates\DBAdapter\MS-SQL\Integrated Security Oder unter demselben Namen beim Job-Step ((Eine Aktivierung vom Trace über die Variable eBiss.DbAdapter.TraceSql erfolgt mit dem True)), s.a. [[howtos:dbadapter:extendedvariablehandling|]] . Das war's schon, Job laufen lassen und die Daten sind in eBiss. Weitere Beispiele z.B., filtern nach Datum, schreiben eines Lese-Marker, etc. folgen. ====== Splitten von Nachrichten ====== Eine Aufteilung der Nachrichten nach einem Feldwert erreicht man durch das setzen der Attribute * GroupBy und * MapFrameInterchangeReference auf dem gewünschten Feld. ====== Übersicht ====== {{indexmenu>:howtos:dbadapter|navbar}} ===== Prozessautomation ===== Ein geeigneter Job kann analog der Beschrebung von [[prozessdefinition:jobs:beispiele:backendintegration]] angelegt werden. ===== DbAdapter Attribute ===== Attribute die auf DbAdapter Klassen gesetzt werden können sind unter [[transformation:mappings:objektdefinition:attribute#dbadapter_attribute|DbAdapter Attribute]] beschrieben. ===== Beispiel für JOIN Attribut ===== Will man im DbAdapter beispielsweise zu jeder Position jeweils noch Informationen aus einer zweiten Tabelle mit hinzuholen, kann das unter Umständen zu ganz vielen einzelnen Selects führen. Im Falle eines Kunden wird zu jeder PRICAT Position jeweils 4 Konditionssätze noch hinzuselektiert, was zu 82000 Selects für einen PRICAT führt. Mit dem Join Attribut ist es möglich, einen zusätzlichen Select zu umgehen und direkt auf die Daten zuzugreifen. Man kann dieses Join Attribut auch mehrmals anwenden und so mehrere Fremdwerte direkt mit dem Join in den aktuellen Datensatz mit einbeziehen. Dies wirkt sich positiv auf die Performance aus. **Beispiel:** Der 2. Join wird mit dem Alias „JT“ mit ausgeführt. Unten verweist also das Feld JoinFieldContent auf den ersten Join, das Feld DoubleJoinFieldContent auf den 2. Join. [Join("JoinTable", "JoinTable.Id = HeaderTable.[Key]")] [Join("JoinTable", "JoinTable.Id = HeaderTable.[Key]", Alias = "JT2")] public class HeaderRecord : IMapObjectItem { [PrimaryKey(PrimaryKeyType.Counter, "Counters", "Name = 'HeaderTable' and @Name = @Name ", "Current_Val")] [MapFrameDocumentNumber] [ReadMarker(ReadMarkerType.StatusTable, "StatusTable", true)] public int Key; public string Name; [ReadMarker(ReadMarkerType.CheckUpdate, 0, 1)] public decimal TestDecimal; [ReadMarker(ReadMarkerType.Timestamp), Where("< $LastExecutionStartDate")] public DateTime ReadTimestamp = new DateTime(1900, 1, 1); [MapExternalName("JoinTable.JoinFieldContent")] public string JoinFieldContent; [MapExternalName("JT2.JoinFieldContent")] public string DoubleJoinFieldContent; public DateTime? NullableDateTimeTest; [MapListType(typeof(DetailRecord)), MapExternalName("DetailTable")] public ArrayList Details; }