Lade...
 

Einlesen der Erstdaten

Einlesen von Daten aus Excel Dateien

Nahezu jedes Modul im Atlas BIT System erlaubt es, anhand von nach vordefinierten Schemata aufgebauten Excel Dateien, Stamminformationen zu laden. Die Laderoutinen der Module sind in Extradateien ausgelagert, um die Stammmodule nicht überflüssig mit dem zusätzlichen, im normalen Betrieb nicht benötigtem, Datencode zu belasten - sie heißen immer so, wie das oberste Stammmodul mit der Endung .lod anstelle von .mod. also z.B. customer.lod

Diese Extradateien sind im normalen Projekt nicht enthalten, müssen also bei Bedarf bei ClassiX angefordert und eingespielt werden.

Die Verzeichnisstruktur sollte dann folgendermaßen aussehen:

appswh\[projektname]\load\*.lod

Dieser Dateipfad muss im CX_PATH in der START.bat angegeben sein.

Da die Laderoutinen verallgemeinert sind, ist es immer notwendig, auch die dfltrout.lod mit einzuspielen. Sie kommt ebenfalls in das Load Verzeichnis hinein.

Zum Einlesen von Stammdaten sind somit immer folgende Dateien erforderlich:

  • Stamm- .lod Datei des Moduls, dessen Daten eingelesen werden sollen
  • dfltrout.lod für die verallgemeinerten Laderoutinen
  • Excel Datei mit einzulesenden Stammdaten

Der Name und der Pfad zur Excel Einlesedatei ist im jeweiligen Stamm-.lod Modul im Makro "NameOfExcelFile" fest verdrahtet. Entweder muss zum Einlesen also die Excel Datei entsprechend umbenannt, oder der Dateiname in der -lod angepasst werden.

Hinweis:
Wenn weder der Dateiname der Excel Datei, noch der Dateipfad zu dieser in der lod angepasst werden soll, so kann auch vor dem Aufruf "LoadObjects" der Dateiname mit dem Pfad der Excel Datei in die Variable manualFile geschrieben werden. Die Einleseroutine benutzt dann diese Datei anstatt der in der .lod fest verdrahteten.

z.B. könnte dann der Einleseaufruf wie folgt aussehen:
"Y:\ClassiX\Evaluate\Kundendaten.xls" -> manualFile LoadObjects

Das Einlesen wird über den Befehl "LoadObjects" auf dem Bearbeitungsfenster des jeweiligen Moduls gestartet.

Beispiel für Dateien - Hier gehen wir einmal von Kundendaten aus:

Benötigte Dateien:

  • customer.lod  (im load Verzeichnis)
  • dfltrout.lod       (im load Verzeichnis)
  • customer.xls   (im projects\data Verzeichnis)

Aufbau der Excel Dateien und verallgemeinerte Makros

Verallgemeinertes:

Name der Excel Datei
Der Name und der Pfad zur einzulesenden Excel Datei steht immer in der entsprechenden .lod Datei im Makro NameOfExcelFile

Datenaufbau der Excel Datei

  • In der ersten Zeile steht im Klartext, was in der Tabellenspalte erfolgen soll. Dieser Hinweis ist optional und nur für den Benutzer. Er wird vom System nicht interpretiert.
  • In der zweiten Zeile steht der Programmaufruf, der für jede Zeile in der aktuellen Spalte ausgeführt werden soll. Es handelt sich um InstantView Befehle und Makroaufrufe aus dem aktuellen Modul bzw. aus der aktuellen .lod Datei, die nur für das Einlesen erstellt wurden.
    Hinweis
    Wird also ausschließlich zum Einlesen eine bestimmte Programmfunktion benötigt, so muss diese in der .lod Datei erstellt werden.
  • In allen weiteren Zeilen werden die einzulesenden Daten angegeben.

Datenbanklayer:
Über die Mappe innerhalb der Excel Datei wird gesteuert, in welchen Datenbanklayer die Daten geschrieben werden.
Die Daten der Mappe 1 (immer ganz links) werden also in den ersten Layer geschrieben, die von Mappe 2 in den zweiten usw.

Datenbankdomänen / Mandantentrennung
Innerhalb der Datenbanklayer gibt es eine weitere Unterteilungsmöglichkeit der Daten, nämlich die Domänen. In der lod Datei für allgemeine Laderoutinen (dfltrout.lod) gibt es hierfür ein Makro, welches anhand von 2 übergebenen Parametern die Domäne immer richtig setzt: SetDomainByClass. Es erwartet als ersten Parameter (Stack TOP) die Klasse, um die es geht und als zweiten Parameter die Domäne, auf die zum Lesen und Schreiben umgestellt werden soll.
2 CX_PARTNER SetDomainByClass würde also im aktuellen Layer die Domäne der CX_PARTNER zum Lesen und Schreiben auf 2 stellen. Je nach Einstellung in dem Systemdaten ist dies dann die Domäne des zweiten Mandanten. Die mit dieser Einstellung eingelesenen Daten sind also nur in der Partner-Maske des zweiten Mandanten auffindbar.

Einleseroutine
Nach jeder eingelesenen Zeile wird das Makro "InitEditObject" aus der entsprechenden .lod Datei aufgerufen, welches immer die leere Bearbeitungsmaske öffnen soll. In verschiedenen Modulen sieht der EditObject Makroaufruf eine andere Menge an übergebenen Parametern vor. Daher ist es pro Modul notwendig, diese NULL EditObject Anweisung mit allen benötigten Parametern in der lod. Datei anzugeben.

Anhand des folgenden Beispiels soll das Prinzip der Importschnittstellen etwas verdeutlicht werden:

Domäne definieren Namen eintragen Ust. Id. Nr Branche Telefon Speichern
CX_PARTNER SetDomainByClass PutValue(, name) PutValue(, vatID) PutIndustry PutDeskPhone SaveObject
1 Johansdotter & Bensemann GmbH DE71818463 019 +49-69-7050262-0 NoOperation
2 Gebr. Oevermann Fördertechnik KG DE36288778 016 +49-89-049021-0 NoOperation

 

  • Domäne definieren: In der ersten Spalte wird der Mandant gesetzt, in diesem Fall erhält der Mandant 1 einen Partner Eintrag und der Mandant 2 einen anderen.
    Sollen beide Mandanten die selben Einträge erhalten, obwohl sie sonst getrennte Partner-Stämme haben, müssen die Daten kopiert und mit der anderen Domäne noch einmal am Ende der Datei eingefügt werden:
Domäne definieren Namen eintragen Ust. Id. Nr Branche Telefon Speichern
CX_PARTNER SetDomainByClass PutValue(, name) PutValue(, vatID) PutIndustry PutDeskPhone SaveObject
1 Johansdotter & Bensemann GmbH DE71818463 019 +49-69-7050262-0 NoOperation
2 Johansdotter & Bensemann GmbH DE71818463 019 +49-69-7050262-0 NoOperation
1 Gebr. Oevermann Fördertechnik KG DE36288778 016 +49-89-049021-0 NoOperation
2 Gebr. Oevermann Fördertechnik KG DE36288778 016 +49-89-049021-0 NoOperation
  • Namen eintragen: In der nächsten Spalte wird über den InstantView Befehl "PutValue" der Inhalt der Spalten Eingabefeld "name" auf dem Bearbeitungsfenster eingetragen. Beim Einlesen wirkt sich dieser Befehl genau so aus wie das sonst manuelle Eintragen eines Wertes auf der Bearbeitungsmaske selbst.
  • Ust. Id. Nr: Die nächste funktioniert wie die Spalte "Namen eintragen", jedoch wird hier das Eingabefeld "vatID" auf der Eingabemaske ausgefüllt
  • Branche: In dieser Spalte wird ein in der .lod Datei definiertes Makro aufgerufen, welches anhand der übergebenen Nummer eine Branche ermittelt und diese selbst auf der Maske einträgt.
  • Telefon: Auch in dieser Spalte wird die Telefonnummer an ein Makro geschickt, welches selbständig ein neues Zugriffsobjekt für den Partner anlegt und in diesem die übergebene Telefonnummer speichert.
  • Speichern: Die auf der Maske eingetragenen Daten werden gespeichert. Ein neuer Partner wird angelegt. Da nur die Spalten ausgeführt werden, in denen auch in den Datenzeilen ein Wert eingetragen wurde, steht in diesen Datenspalten der Wert "NoOperation", was bedeutet, dass das System diesen Wert zwar als Eingabe akzeptiert, es aber nicht weiter tut als zum nächsten Befehl, nämlich SaveObject weiter zu gehen.
    Über das Setzen der einer Steuervariable "TRUE -> executeEmptyCells" kann vor dem Einlesen gesteuert werden, dass das System die leeren Spalten trotzdem ausführen soll.
     

Über diesen Weg können vorhandene Excel Dateien schnell durch die entsprechenden ersten beiden Zeilen mit deren Spalten ergänzt und direkt eingelesen werden.