|
|||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
|
Der Connector im Einsatz
Im gleichen Verzeichnis, in dem die Connector-DLL abgelegt ist, befindet sich eine XML-Datei,
in der alle notwendigen Tabellen- und Feldinformationen abgelegt sind. Wird eine Instanz des
Dateizugriffobjektes (Erläuterungen zu diesem Objekt finden Sie weiter unten) erzeugt, so lädt
der Connector die in der XML-Datei gespeicherten Informationen und greift darüber auf die
entsprechenden Tabellen der Classic Line zu.
Wenn Sie detaillierte Informationen zu diesen Tabellen benötigen, so drucken Sie sich die entsprechenden Tabellenbeschreibungen in Ihrer Classic Line aus oder lesen Sie die entsprechenden Dokumentationen der Classic Line. Innerhalb des Connectors können Sie viele Informationen, die in der XML-Dateibeschreibung gespeichert sind, über das clDateiinfo-Objekt (Informationen dazu finden Sie weiter unten) abrufen und in Ihrer Applikation verwenden. Von dieser Möglichkeit sollten Sie auch ausgiebig Gebrauch machen, da dadurch Ihre Applikation dynamisch auf Änderungen und Erweiterung der Dateibeschreibungen reagieren kann. Wichtiger Hinweis: Diese XML-Datei darf nicht verändert werden, da sie ansonsten unbrauchbar wird und der Connector nicht mehr in der Lage ist, auf die Daten der Classic Line zuzugreifen. Wenn Sie eine Anpassung benötigen, so wenden Sie sich an den Hersteller des Connectors. In der Demoversion ist nur die Tabelle "Artikel" (A10130) mit wenigen Feldern frei geschaltet. Die hier beschriebenen Funktionalitäten stehen Ihnen für diese Tabelle uneingeschränkt für 30 Tage zur Verfügung.
Bevor Sie in Ihrer Applikation und Ihrer Entwicklungsumgebung auf die Funktionalität der Connector-DLL zugreifen
können, müssen Sie einen Verweis auf die COM-Klasse setzen. Dazu hier einige Beispiele
(sollte Ihre Entwicklungsumgebung hier nicht beschrieben sein, so schauen Sie in der Dokumentation Ihrer
Entwicklungsumgebung nach, wie Sie einen Verweis auf eine COM-Klasse setzen):
Wenn Sie mit Microsoft Excel arbeiten, öffnen Sie zunächst den VBA-Editor über das Menü "Extras" und dem Menüpunkt "Makro"
und "Visual Basic Editor". Im VBA-Editor rufen Sie im Menü "Extras" den Menüpunkt "Verweise" auf.
Um einen Verweis auf die Connector-DLL in Visual Basic Version 6.0 zu setzen, öffnen Sie in der
Entwicklungsumgebung den Menüpunkt "Projekt" und dort den Menüpunkt "Verweise".
Öffnen Sie den Projektexplorer, wenn er noch nicht geöffnet ist. Hier finden Sie unter "Verweise"
alle zu diesem Projekt gehörenden Klassen und Objekte.
Verbindung zur Classic Line herstellen Damit ein Zugriff auf die Classic Line überhaupt möglich ist, muss zunächst eine Verbindung zum
Datenbankdienst hergestellt werden. Legen Sie eine entsprechende Variable an, in der Sie die Referenz auf das
Verbindungsobjekt ablegen können und erzeugen Sie eine Instanz des Verbindungsobjektes:
Über diese Instanz können Sie nun im anschließenden Schritt eine Verbindung zur Classic Line mit die Methode blnCLConnect herstellen. Dabei öffnet sich der bekannte Anwenderdialog der Classic Line, in der der Anwender seinen Stationsnamen, seinen Usernamen und sein Passwort eingeben kann.
In diesem Beispiel wurde der gewünschte Mandant in der Applikation "fest verdrahtet" und auf "991" vorgegeben. Natürlich können Sie hier auch eine Mandantenauswahl zulassen, so dass der Anwender Ihrer Applikation zwischen den vorhandenen Mandanten wechseln kann. Weiter unten ist erläutert, wie Sie die in der Classic Line vorhandenen Mandanten ermitteln können. Die Methode blnConnect liefert ein False zurück, wenn keine Verbindung hergestellt werden konnte. Dies ist beispielsweise der Fall, wenn der Datenbankdienst gestört ist oder der Anwender im Verbindungsdialog die Taste "Abbrechen" betätigt hat. Natürlich kann Ihre Applikation den Anmeldedialog der Classic Line auch unterdrücken, so dass die Anmeldung im Hintergrund erfolgt. Dazu müssen Anmeldenamen, Stationsname und Passwort bekannt sein und in Ihrer Anwendung einmalig eingegeben worden und intern abgespeichert sein. Erweitern Sie Ihren Sourcecode wie hier gezeigt:
Wichtiger Hinweis: Beachten Sie, dass der Connector als Dienst auf die Classic Line zugreifen muss. Daher muss für die Stationsangabe ein UNC-Pfad angegeben werden, wenn Sie Ihrer Applikation in einer Netzwerkumgebung nutzen möchten. Verbindung zur Classic Line abbauen Nach dem Ihre Applikation die benötigten Daten in der Classic Line gelesen und ggf.
auch geschrieben hat, muss die Verbindung zur Classic Line wieder abgebaut werden. Dazu bietet Ihnen
das Verbindungsobjekt eine entsprechende Methode:
Im Anschluss daran kann das Verbindungsobjekt zerstört werden, wenn es nicht mehr gebraucht wird. Sie sollten auf jeden Fall die Verbindung zur Classic Line unterbrechen, wenn ein weiterer Datenzugriff nicht mehr erforderlich ist. Sicherheitshalber wird die Verbindung automatisch abgebrochen, wenn das Verbindungsobjekt zerstört wird. Das Verbindungsobjekt stellt die Methode blnCLConnected zur Verfügung, mit der die Applikation prüfen kann, ob eine Verbindung zur Classic Line besteht oder nicht. Das Verbindungsobjekt stellt eine Methode zur Verfügung, mit der die Applikation die in
der Classic Line angelegten Mandanten abfragen kann.
Als Parameter bekommt die Methode ein Stringarray und eine Integervariable (Short) übergeben. In dem Array legt die Methode die Nummern und Bezeichnungen der Mandanten ab; in der Integerzahl teilt sie mit, wie viele Mandanten angelegt sind. Beachten Sie, dass das Array in der Regel größer angelegt ist, als tatsächlich Mandanten vorhanden sind. Eine Abfrage der Größe und anschließendes Auslesen aller Elemente des Arrays wird zu einem Fehler führen. Benutzen Sie auf jeden Fall die zu-rück gelieferte Anzahl. Mit den erhaltenen Mandanten-Informationen können Sie beispielsweise eine Combobox füllen, aus der der Anwender einen Mandanten auswählen kann.
Hinweis: Die Übergabe der Mandantennummer an das Verbindungsobjekt kann selbstverständlich auch erfolgen, nachdem eine Verbindung aufgebaut wurde. Die Connector-DLL stellt Ihnen verschiedene Funktionen zur Verfügung, über die Sie ausführliche Informationen über die
unterstützten Tabellen der Classic Line abfragen können; diese Informationen werden aus einer XML_Datei gelesen (siehe oben).
Durch Anpassen der XML-Dateibeschreibungen kann die Connector-DLL auf beliebige Tabellen der Classic Line zugreifen.
Selbst kundenspezifische Anpassungen an den Tabellen können so berücksichtigt werden.
Sollten Sie bereits ein Verbindungsobjekt (siehe oben) erzeugt haben, so können Sie auch das dortige Dateiinfo-Objekt verwenden. Beim Instanzieren des Verbindungsobjektes wird automatisch ein Dateiinfo-Objekt angelegt, das Sie über die Eigenschaft oDateiinfo alternativ nutzen können. Im folgenden Text finden Sie eine Übersicht über die vorhandenen Methoden und Eigenschaften des Dateiinfo-Objektes. Weitergehende Informationen finden Sie auch im Referenzteil dieser Dokumentation.
Informationen zu Datensatzfeldern
Anwendungsbeispiel zum Dateiinfo-Objekt
Im beigefügten Beispiel-Worksheet für das Programm Microsoft Excel werden einige Informationen zu der Artikel-Tabelle
über das Dateiinfo-Objekt ausgelesen und in den Excel-Tabellenfeldern abgelegt.
Die Namen der in dieser Tabelle enthaltenen Datensatzfeldnamen werden anschließend über die Methode blnErmittleFeldnamen ausgelesen und in einer Schleife in eine Spalte der Excel-Tabelle übertragen. Die Rückgabe der Feldnamen erfolgt über das Stringarray Felder().
Zusätzlich werden der Datentyp des Feldes ermittelt, die Vor- und Nachkommastellen und ob es sich bei dem jeweiligen Feld um ein Schlüsselfeld handelt. Diese Informationen werden wiederum in eine separate Spalte geschrieben. Details dazu entnehmen Sie dem Source des Programmierbeispiels. Beachten Sie an dieser Stelle auch, dass noch keine Verbindung zur Classic Line besteht, da dass Dateiinfo-Objekt alle Informationen selbst beinhaltet.
Eine weitere Klasse des Connectors ist die Dateizugriffs-Klasse, über die auf die Classic Line Daten-sätze zugegriffen wird.
Dem Dateizugriffs-Objekt wird zusätzlich eine offene Verbindung zur Classic Line zur Verfügung ge-stellt. Dies erfolgt durch Zuweisung des Verbindungsobjektes an die Eigenschaft oCLConnector. Im nachfolgenden Programmablauf öffnen Sie die gewünschte Tabelle über die Methode blnDatei_Oeffnen; hier der Artikelstamm:
Konnte die Tabelle geöffnet werden, so erhalten Sie ein True zurück. Im anderen Fall sollte die weitere Programmausführung abgebrochen werden, da ein Lesen in diesem Fall dann nicht möglich ist. Im gezeigten Beispiel wird eine Fehlermeldung ausgegeben, die Verbindung zur Classic Line abgebaut und die Prozedur verlassen.
Eine geöffnete Tabelle sollte über die Methode Schliesse_Datei wieder geschlossen werden, sobald ein weiterer Zugriff nicht mehr
erforderlich ist. Eine geöffnete Datei wird automatisch beim Zerstören des Dateizugriffs-Objektes geschlossen oder wenn die Verbindung
zur Classic Line abgebaut wird.
Datensatz lesen (ISAM-Tabelle)
Ist eine Verbindung zur Classic Line hergestellt und die gewünschte Tabelle geöffnet,
so können Datensätze über einen Schlüssel aus einer ISAM-Tabelle (R300-Datei) gelesen werden:
Wie ein solcher Schlüssel auszusehen hat, ist von der geöffneten Tabelle abhängig und kann den Dateibeschreibungen der Classic Line entnommen werden. Konnte der Lesevorgang erfolgreich durchgeführt werden und wurde ein Datensatz mit diesem Schlüssel gefunden, so wird dies durch ein True als Rückgabewert angezeigt. Datensätze einer Kettdatei werden mit einer anderen Methode gelesen, die weiter unten beschrieben ist.
Ist ein Datensatz eingelesen, so kann Ihre Applikation die einzelnen Werte über die
Methode blnGetFeldwert auslesen. Exemplarisch ist dies hier
anhand der Felder "Artikel", "Hersteller", "Matchcode" und den
Verkaufspreisen 1 bis 9 dargestellt.
Zunächst übergeben Sie an die Funktion den Namen des Feldes, welches Sie auslesen möchten. Weiterhin übergeben Sie die Satzart (In unserem Beispiel übergeben wir einen Leerstring, da die Tabelle Artikel keine unterschiedliche Satzarten kennt) und zwei Variablen, in denen zum einen der gelesene Wert und zum anderen der Typ des Wertes abgelegt werden. In unserem Beispiel wird der gelesene Wert in der Variablen vntFeldwert vom Typ Variant gespeichert. Um welchen Werttypen es sich handelt, kann (hier) über die Variable clDatatyp ermittelt werden. In Abhängigkeit davon, wird der Variantwert in den entsprechenden Wertetyp umgewandelt und dann weiterverarbeitet. Werte in Datensatzfeldern verändern
Mit einer Funktion, die der im vorhergehenden Kapitel beschriebenen Methode blnGetFeldwert sehr ähnlich ist, lassen sich auch
Inhalte eines Feldes verändern. Das Dateizugriffs-Objekt stellt dazu die Methode blnSetFeldwert zur Verfügung.
Auch hier übergeben Sie zunächst den Namen des Feldes, in das die Information gespeichert werden soll und die Satzart (wie bereits oben erwähnt, wird hier ein Leerstring übergeben, da die Tabelle Artikel keine unterschiedliche Satzarten kennt). Die Variable vntWert beinhaltet den zu speichernden Wert. Sie sollten natürlich darauf achten, dass Sie nur Werte übergeben, die in dem angegeben Feld auch tatsächlich gespeichert werden können. Es macht wohl keinen Sinn ein alphanumerisches Zeichen in einem numerischen Feld abzulegen. In diesem Fall wird ein Laufzeitfehler ausgelöst und die Applikation beendet, wenn diese nicht entsprechend auf den Fehler reagiert. Wichtiger Hinweis: Ändern Sie keine Felder, deren Inhalte an anderer Stelle nochmals abgelegt sind. Beispiel: Wenn Sie den Matchcode im Artikelstamm ändern, so können Sie davon ausgehen, dass eine Dateninkonsistenz entsteht, da es eine Index-Tabelle gibt, die aus dem Matchcode und der Artikelnummer besteht. Ändern Sie den Matchcode im Artikelstammsatz, so stimmt dieser Matchcode nicht mehr mit dem Matchcode überein, der in der Indexdatei abgelegt ist. Mit der hier beschriebenen Methode ändern Sie Werte des zuletzt gelesenen Datensatzes. Bevor Sie also einen Datensatz abändern möchten, müssen Sie diesen zunächst lesen und dann die Werte ändern. Haben Sie vor der Änderung keinen Datensatz gelesen, wird ein Laufzeitfehler erzeugt. Schlüsselfelder können nicht verändert werden! Datensätze abspeichern (ISAM-Tabelle)
Nachdem Sie eine Änderung an einem Datensatz vorgenommen haben, können Sie ihn wieder in der Classic Line abspeichern.
Dazu verwenden Sie die Funktion blnSchreibeDatensatz
Konnte der Datensatz erfolgreich abgelegt werden, erhalten Sie den Rückgabewert True. Beachten Sie, dass für die Zeit des Lesens und des Schreibens des Datensatzes keine Satzsperre gesetzt wird, da der Connector so konzipiert ist, dass auch ein (scheinbar) verbindungsloser Datenzugriff möglich ist. Über die Synchronisationsroutinen ist es möglich, vor dem Abspeichern zu prüfen, ob eine Änderung stattgefunden hat, so dass die Applikation darauf entsprechend reagieren kann. Mehrere Datensätze in einer Schleife lesen
Der Connector bietet die Möglichkeit Datensätze innerhalb eines bestimmten Schlüsselbereiches zu lesen;
dazu werden eine untere und eine obere Schlüsselgrenze angegeben.
Mit der Methode blnLeseDatensatz_Erster wird der erste Datensatz gelesen, der sich innerhalb des angegebenen Schlüsselbereiches befindet. Im gezeigten Beispiel werden alle Artikel gelesen, da als untere Grenze eine 30stellige Zeichenfolge aus dem Charakter mit dem ASCII-Code 1 und eine obere Grenze aus einer 30stelligen Zeichenfolge aus dem Charakter mit dem ASCII-Code 254 angegeben wurde. Der Parameter AlleStati gibt an, dass alle Datensätze gelesen werden sollen. Der Connector ist in der Lage, auch nur "gelöschte", "geänderte" oder "neue" Datensätze zu lesen. Informationen dazu finden Sie im Referenzteil dieser Dokumentation. Wurde ein Datensatz gefunden, liefert die Methode ein True zurück und die Applikation kann in einer Schleife die Verarbeitung oder Darstellung des Datensatzes vornehmen. Anschließend wird der nächste Datensatz mit der Methode blnLeseDatensatz_Naechster gelesen und ebenfalls verarbeitet. Diese Methode liefert ein False zurück, wenn kein weiterer Datensatz gefunden wurde, so dass die Schleife verlassen wird. Datensatz in einer Kettdatei lesen
Das Lesen eines Datensatzes aus einer Kettdatei ist ähnlich dem Lesen aus einer ISAM-Datei.
Allerdings wird nicht nach einem Schlüssel selektiert, sondern nach einer festen Datensatznummer.
Die Datensatznummer für den ersten Datensatz ist in der Regel im Kopfsatz der Datensatzfolge abgelegt,
während die Datensatznummern aller folgenden Sätze in den vorhergehenden Datensätzen abgelegt sind.
Um also eine Kette zu lesen, muss zunächst der Anfang der Kette ermittelt werden.
Dazu wird der zugehörige Kopfsatz gelesen:
Zunächst wird die Kopfsatzdatei geöffnet und anschließend die Positionsdatei. Beachten Sie, dass beim Öffnen der Positionsdatei der zusätzliche Parameter Kettdatei angegeben ist. Dadurch wird mitgeteilt, dass es sich eben um eine Kettdatei und nicht um eine ISAM-Datei handelt. Nachdem der gewünschte Kopfdatensatz gelesen wurde (in diesem Beispiel ist der Schlüssel in der Variable strSchluessel abgelegt), wird die Datensatznummer des ersten Kettdatensatzes aus dem Feld Positionsanker ausgelesen. (Beachten Sie, dass der Name dieses Feldes von der jeweiligen Tabelle abhängig ist und ggf. angepasst werden muss.) In einer Schleife werden nun alle Datensätze dieser Kette durchlaufen, gelesen und ggf. verarbeitet. Die Methode blnLeseNaechsterDatensatz_Kette erkennt dabei automatisch den Zeiger auf den nächsten Datensatz. Weitere Informationen zu den verschiedenen Methoden zum Lesen von Kettdateien entnehmen Sie bitte dem Referenzteil dieser Dokumentation. Hinweis: Kettdateien können zurzeit mit dem Connector nur vorwärts gelesen werden. |