Vereinfachter Zugriff auf Microtech büro+ per .NET
Die COM-Aktiv-Schnittstelle von Büro Plus Next bietet nur unkomfortablen, untypisierten Zugriff auf die Daten von Büro Plus Next. Abhilfe schafft eine mit T4 generierte Wrapper-API.Für die Implementierung individueller Schnittstellen zu Büro Plus Next stellt Microtech die sogenannte COM-Activ-Schnittstelle Bereich. Es handelt sich hierbei um ein COM-Server Objekt, das im Executable des Büro Plus Next-Client BpNext.exe enthalten ist. Das .Net-Framework wiederrum macht den Zugriff auf COM-Dienste per Interop sehr einfach.
So weit, so gut. Jedoch ist die API der COM-Aktiv-Schnittstelle, die von .Net Interop bei Referenzierung des COM-Servers automatisch generiert wird, unkomfortabel und untypisiert. Sie erfordert Kenntnis der Namen und Typen der DataSets, Felder und Indices von Büro Plus Next.
Jedoch hat die API auch ihre Stärken: Über einen Introspektion-Mechanismus (z.B. die Interfaces BpNT.AutoDataSetInfo, BpNT.AutoFieldInfo, etc.) stehen Informationen über das Schema der Tabellen zur Verfügung. Dies kann genutzt werden, um einen stark-typisierten Wrapper um die Basis-Klassen des COM-Dienstes zu erstellen.
Aufgrund der grossen Anzahl an DataSets, Felder und Indices von Büro Plus Next bietet es sich an den Quellcode für die Wrapper-Klassen automatisch zu generieren. Hierzu bietet sich das sogenannte Text Template Transformation Toolkit (T4), das seit Visual Studio 2008 standardmäßig in der IDE enthalten ist, an. T4 transformiert textuelle Vorlagen/Templates unter Einbeziehung externen Daten in eine textuelle Ausgabe-Datei (z.B. C#-Quelltext). Diese Transformationsvorgänge sind nichts Besonderes; z.B. werden in der Webprogrammierung PHP- bzw. ASP.Net-Vorlagen (textuelles Template) in HTML (Ausgabe-Datei), das Daten aus einer Datenbank darstellt, überführt. Eine gute Quelle für weitere Informationen zu T4 ist die Homepage von Oleg Sych.
Wir haben uns für eine Lösung entschieden, bei der für jedes DataSet (z.B. Adressen) mehrere Dateien generiert werden. Es gibt eine Datei, die den Zugriff auf die Menge alle Datensätze regelt (z.B. AdressenSet.generated.cs), eine Datei für den Zugriff auf die einzelnen Felder als .Net-Eigenschaften (z.B. Adressen.generated.cs und jeweils eine Datei für die Indices der Tabelle.
Mit Hilfe dieser Wrapper vereinfacht sich z.B. die Selektierung von Datensätzen ungemein. Was jedoch noch viel wichtiger ist, der Quelltext wird viel leichter lesbar, da die Abstraktion durch die COM-Api entfällt. Im folgenden z.B. zwei Testmethoden für das selektieren von Datensätzten per Index:
[TestMethod] public void CanApplyRangeWithSingleArgument() { BpnConnection con = new BpnConnection("Firma", "Mandant", "User", "Passwd"); var adressenSet = AdressenSet.CreateInstance(con); int count = adressenSet.Indices.NrIndex.ApplyRange( new AdressenSetNrIndex.IndexFields() { AdrNr = "EBAY840" } ); Assert.AreEqual(1, count, "Falsche Anzahl von Anschriften selektiert"); foreach (var adresse in adressenSet) Assert.AreEqual (16326, adresse.ID, "Ids stimmen nicht"); } [TestMethod] public void CanApplyRangeWithBeginAndEnd() { BpnConnection con = new BpnConnection("Firma", "Mandant", "User", "Passwd"); var postleitzahlenSet = PostleitzahlenSet.CreateInstance(con); int count = postleitzahlenSet.Indices.PLZIndex.ApplyRange( new PostleitzahlenSetPLZIndex.IndexFields() { PLZ = "86600" }, new PostleitzahlenSetPLZIndex.IndexFields() { PLZ = "86699" } ); Assert.AreEqual (37, count, "Falschen Anzahl PLZs selektiert"); }
Einen weiteren Produktivitätsgewinn erhält man durch Intellisense/Code-Vervollständigung und die Dokumentation von Feld-Eigenschaften. So enthält z.B. das Anschriften-Objekt alle Felder, die in diesem DataSet definiert sind. Im Kommentar, wird der Anzeige-Name des Feldes wie im Büro Plus Next-Client sowie der interne Datentyp angegeben. Man kann quasi durch die DataSets von Büro Plus Next navigieren.
Die Bibliothek zum Zugriff auf alle Büro Plus Next-DataSets kann im Quelltext und als DLL als Visual Studio 2010 Projekt hier heruntergeladen werden. Falls Sie Interesse am Code-Generator haben, oder zusätzliche Funktionalität in den generierten Klassen wünschen, kontaktieren Sie mich unverbindlich unter joachim.rosskopf@lx-networking.de oder hinterlassen einen Kommentar.
Danke für den tollen Artikel und den Quellcode.
Wow das hebt ja mal meine Stimmung, ich bin stolz das meine Arbeit so nett für .Net aufbereitet wird.
(auch wenn die Idee dahinter ja nicht neu ist)
Bysen; Der der die Schnittstelle definiert und mit Leben füllt.
Hallo Krid,
verstehe Deinen Kommentar leider nicht? Deine Arbeit?
Grüße
—
Joachim
Joar.. Ich hab die Schnittstelle beim Hersteller verbrochen :). Da freut es mich das meine Arbeit im großen www von anderen als uns als Firma aufbereitet wird.
[…] .Net Hilfestellung This entry was posted in Dev. Bookmark the permalink. ← “Gestern ging´s doch noch” und “Ich hab nix gemacht” LikeBe the first to like this post. […]
Wie kann ich einzelne Datensätze in die Vorgänge. Position Tabelle hinzufügen?
Unter Add wird ein key und ein objekt benötigt, wovon ich keine Ahnung habe.
Ansonsten bestehe noch die Möglichkeit komplette Dateien zu importieren, dort gibt es aber nur Methoden für Vorgangsarten und ein key wird auch wieder abverlangt…
Hi Joachim,first of all Thanks a lot, it`s best what i need!
could you please be so kind to let me know, how can i create a new „Vorgang“ with some positions in it, and how can i get your wonderful Code-Generator? Thank you very much, please mail me at> mail – servise @ mail . ru
*please remove all spaces between words
Andrey
Hello Andrey,
the Code-Generator, and and larger Framework depending on it, is now a commercial product. If you are interested, you can reach me via email at <jr at=““ gluelogic.de=““> and describe your needs.
Regrads
—
Joachim</jr>