5.2
Das Objekt ist vorhanden:
Datenblatt laden
Berechtigungen erneut prüfen
VERROU IMP_VERROU
LIENSIMP_LIENS
SETBOUT IMP_SETBOUT
AVANT_MOD IMP_AVANT_MOD
6.1
Simulation der Erfassung der der
Haupttabelle zugeordneten Masken
IMPORT
IMP_DEFTRT (*)
6.2
Für alle Maskenfelder:
Ausführung der Aktionen avant_zone
avant_saisie
init
Wenn das Feld erfasst wird:
Um zu ermitteln, ob das Feld sich in einer Tabelle befindet:
(diese Aktion belegt nolign, sofern notwendig)
Wenn OK = 1, dann Übernahme aus der Klasse [F]
des gleichnamigen Feldes
Ausführung der Aktionen après_zone
sowie ggf. après_modif
IMP_ZONE
7.1
Lesen eines Datensatzes der sekundären Datei (für alle sekundären Datensatzebenen)
IMPORT
IMP_TAB
AP_IMPORT
7.2
Simulation der zugehörigen Masken
Im Falle einer Tabelle wird die Variable
nolign verwendet.
Standardmäßig wird eine Zeile hinzugefügt
(nolign = 0)
8
Speichern des Objekts
8.1
Anlage:
Transaktionsbeginn
Buchung
Transaktionsende
Rollback:
VERIF_CRE IMP_VERIF_CRE
INICREIMP_INICRE
CREATION IMP_CREATION
APRES_CRE IMP_APRES_CRE
AB_CREATION
IMP_AB_CREATION
8.2
Änderung:
Transaktionsbeginn
Datensatz wird gesperrt
Variablen [F] werden belegt
Es wird erneut geschrieben
Transaktionsende
Rollback:
Aufhebung der Sperre
VERIF_MOD IMP_VERIF_MOD
AVANT_MODFIC
IMP_AVANT_MODFIC
INIMODIMP_INIMOD
MODIF IMP_MODIF (*)
APRES_MOD IMP_APRES_MOD
AB_MODIF IMP_AB_MODIF
DEVERROU IMP_DEVERROU
9
Programmende:
FERME IMP_FERME
(*) Mit den Aktionen MODIF und IMP_MODIF werden im Prinzip die Zeilen gespeichert (MODIF im Standard von der Objektverwaltung, IMP_MODIF für die Verwaltung zusätzlicher Aktionen). Mit der Aktion IMP_DEFTRT kann die Variable TRTMSK belegt werden, sofern notwendig. Durch diese ist der im Masken-Dictionary definierte Name der Automatik-Verarbeitung gegeben.
Die Aktion IMP_SETBOUT wird zur Vervollständigung der Objektverwaltungsoptionen verwendet. Beispiel: Um die Datenanlage zu verhindern, kann ein Call VIREBOUT notwendig sein, das sich insbesondere auf die Variable CHAINE auswirkt, welche sämtliche Optionen enthält.
Sequenz | Kontext | Aktionen |
1.1 | Vor Anlage des Importprogramms: Openo - Das Schreiben des temporären Importprogramms (dessen Name durch die Variable IMPTRT gegeben ist) ist noch nicht erfolgt. Die Namen der verwendeten Masken können noch geändert werden (Tabelle NOMMSK, die Anzahl der Masken ist durch NBMASK gegeben). | IMP_COMPILE |
1.2 | Nach Anlage des Importprogramms: Die temporäre Importverarbeitung (deren Name durch die Variable IMPTRT gegeben ist) wird immer noch von Openo geöffnet: Es können (mit Wrseq) zusätzliche Anweisungen hinzugefügt werden. Die Verarbeitung wird nach dieser Aktion kompiliert. Im Anschluss daran beginnt der eigentliche Importprozess. | IMP_TRTSUP |
1.3 | Programmbeginn | OUVREIMP_OUVRE |
2 | Lesen der Importdatei und Übernahme in die Klasse [F] Die Aktion AP_IMPORT wird nach dem Laden der in den einzelnen Blöcken dekodierten Variablen aufgerufen (die Verschachtelungsebene ist durch die Variable SEPNUM (1 bis 8) gegeben, die Abkürzung der aktuell verarbeiteten Haupttabelle durch die Variable IMPABR). | AP_IMPORT |
3 | Existenzprüfung Objekt (Anzahl Zeilen > 0) |
|
3.1 | Das Objekt ist vorhanden: | VERROUIMP_VERROU |
3.2 | Prüfung der Anlage- oder Änderungsberechtigung: | SETBOUTIMP_SETBOUT |
3.3 | Das Objekt ist nicht vorhanden: | SETBOUTIMP_SETBOUT RAZCREIMP_RAZCRE |
4.1 | Leseschleife über die Datensätze Für die den Zeilen zugeordneten Datensätze: Übernahme in die Klasse [F] Ende Leseschleife Am Schleifenende verbundene Datensätze: | FILTER LIENS0IMP_LIENS0 LIENSIMP_LIENS
LIENS2IMP_LIENS2 |
5.1 | Simulation der Erfassung der der Haupttabelle zugeordneten Masken | IMPORT IMP_DEFTRT (*) |
5.2 | Für alle Maskenfelder: Ausführung der Aktionen avant_zone avant_saisie init Wenn das Feld erfasst wird: Wenn OK = 1, dann Übernahme des gleichnamigen Feldes aus der Klasse [F] Ausführung der Aktionen après_zone und ggf. après_modif |
IMP_ZONE |
6.1 | Lesen eines Datensatzes der sekundären Datei Die Aktion AP_IMPORT wird nach dem Laden der in den einzelnen Blöcken dekodierten Variablen aufgerufen (die Verschachtelungsebene ist durch die Variable SEPNUM (1 bis 8) gegeben, die Abkürzung der aktuell verarbeiteten Haupttabelle durch die Variable IMPABR). | IMPORT
AP_IMPORT |
6.2 | Simulation der zugehörigen Masken Im Falle einer Tabelle wird die Variable nolign verwendet. Standardmäßig wird eine Zeile hinzugefügt ( nolign = 0) |
|
7 | Speichern des Objekts |
|
7.1 | Anlage:
Transaktionsbeginn Für jede Zeile: Buchung
Am Ende des Lesevorgangs: Transaktion beendet: | VERIF_CRE IMP_VERIF_CRE DEBUT_CRE IMP_DEBUT_CRE INICREIMP_INICRE CREATIONIMP_CREATION MODIFIMP_MODIF APRES_CREIMP_APRES_CRE |
7.2 | Änderung: Transaktionsbeginn Zeilen löschen Schleife über die Zeilen:
Zeile anlegen Am Ende der Schleife Transaktionsende | VERIF_MOD IMP_VERIF_MOD DEBUT_MOD IMP_DEBUT_MOD FILTER INICREIMP_INICRE CREATIONIMP_CREATION MODIFIMP_MODIF APRES_MODIMP_APRES_MOD DEVERROUIMP_DEVERROU |
8 | Programmende: | FERME IMP_FERME |
Sequenz | Kontext | Aktionen |
1.1 | Vor Anlage des Importprogramms: Openo - Das Schreiben des temporären Importprogramms (dessen Name durch die Variable IMPTRT gegeben ist) ist noch nicht erfolgt. Die Namen der verwendeten Masken können noch geändert werden (Tabelle NOMMSK, die Anzahl der Masken ist durch NBMASK gegeben). | IMP_COMPILE |
1.2 | Nach Anlage des Importprogramms: Die temporäre Importverarbeitung (deren Name durch die Variable IMPTRT gegeben ist) wird immer noch von Openo geöffnet: Es können (mit Wrseq) zusätzliche Anweisungen hinzugefügt werden. Die Verarbeitung wird nach dieser Aktion kompiliert. Im Anschluss daran beginnt der eigentliche Importprozess. | IMP_TRTSUP |
1.3 | Programmbeginn | OUVREIMP_OUVRE |
2 | Lesen der Daten aus der Datei und Übernahme in die Klasse [F] Die Aktion AP_IMPORT wird nach dem Laden der in den einzelnen Blöcken dekodierten Variablen aufgerufen (die Verschachtelungsebene ist durch die Variable SEPNUM (1 bis 8) gegeben, die Abkürzung der aktuell verarbeiteten Haupttabelle durch die Variable IMPABR). |
AP_IMPORT |
3 | Das Objekt ist vorhanden: | VERROUIMP_VERROU |
4 | Sperren der Tabelle Lesebeginn: Leseschleife über die Datensätze Am Ende der Schleife | FILTER LIENS0IMP_LIENS0 LIENSIMP_LIENS LIENS2IMP_LIENS2 |
5 | Prüfung der Änderungsberechtigung: | SETBOUTIMP_SETBOUT |
6.1 | Simulation der Erfassung der der Haupttabelle zugeordneten Masken | IMPORT IMP_DEFTRT (*) |
6.2 | Für alle Maskenfelder: Ausführung der Aktionen avant_zone avant_saisie init Wenn das Feld erfasst wird: Wenn OK = 1, dann Übernahme des gleichnamigen Feldes aus der Klasse [F] Ausführung der Aktionen après_zone und ggf. après_modif |
IMP_ZONE |
7.1 | Lesen eines Datensatzes der sekundären Datei | IMPORT |
7.2 | Simulation der zugehörigen Masken Der Tabelle wird eine Zeile hinzugefügt (nolign wird in der Objektverwaltung verwaltet) |
|
8 | Speichern des Objekts |
|
8.1 | Immer noch Anlage Transaktionsbeginn Sperren der Tabelle Wenn nach MOD_IMPORT OK <> 0, wird die Transaktion fortgesetzt: Alle vorhandenen Datensätze werden gelöscht Für jede Zeile: Buchung Am Ende des Lesevorgangs: Transaktionsende | VERIF_MOD IMP_VERIF_MOD MOD_IMPORT
FILTER INICREIMP_INICRE CREATIONIMP_CREATION MODIFIMP_MODIF |
9 | Bei erfolgreicher Transaktion | APRES_MODIMP_APRES_MOD |
10 | Programmende: | FERMEIMP_FERME |
Alle IMPxxx-Aktionen weisen denselben Kontext auf wie die SUBxxx-Aktionen und werden nach diesen aufgerufen.
Bei folgenden Aktionen handelt es sich um spezielle Aktionen.
Die Aktion IMPORT wird nach jedem gelesenen Datensatz aufgerufen.
Die Variable IMPFIC enthält die Abkürzung der importierten Datei. Die entsprechende Klasse ist (bei tatsächlich importierten Daten) online.
Bei Tabellen wird die Variable nolign mit 0 initialisiert und beim Abgang für die Ermittlung der erfassten Zeile verwendet. Bleibt nolign = 0, wird eine neue Zeile angelegt.
Die Aktion IMP_TAB wird für die Verwaltung der Felder einer in eine Tabelle eingeordneten Sekundärtabelle verwendet (in der dritten Objektseite sind zu diesem Zweck die Sekundärtabelle, Masken und entsprechenden Tabellenendevariablen definiert). Auf diese Weise können die nicht indizierten Felder unterschieden werden, die in eine Tabelle mit anderen Feldern eingeordnet werden müssen. Diese Aktion wird lediglich beim Import von normalen Objekttypen verwendet.
Die Aktion IMP_ZONE wird bei der Felderfassung aufgerufen und dient der Wiederherstellung eines Wertes in einer Maske, der in der Datei einen anderen Namen aufweist (Beispiel: mehrdimensionale Felder in einer Tabelle, denen mehrere Spalten in einer Tabelle entsprechen):
Die Aktion MOD_IMPORT dient lediglich dem Import eines Tabellenobjekts (um diesen Import eventuell zu verhindert).
Diese Importverarbeitung ist eine (im Allgemeinen aus Performancegründen gewählte) Abkürzung der Standard-Objektverwaltung und umfasst lediglich eine begrenzte Anzahl von mit Gosub aus der Importfunktion heraus aufgerufenen Labels. Diese Labels werden nachstehend aufgelistet.
Etikett | Kontext |
$OUVRE | Bei Importbeginn können mit diesem Label die benötigten Masken, Tabellen und Variablen deklariert werden. |
$RAZCRE | Beim Lesebeginn (ein neuer Datensatz wird gelesen). Die Variablen werden auf 0 zurückgesetzt und können im Anschluss daran durch den Import belegt werden. |
$SAIMSK | Wenn eine Datengruppe gelesen wurde. Mit der Variable IMPFIC lässt sich die Abkürzung der Tabelle ermitteln, deren Inhalt gelesen wurde. Die diese Tabelle entsprechende Klasse [F] wird belegt, und die Daten können in Masken übernommen werden (wenn mit Objekten vom Typ Kopfzeile / Zeile gearbeitet wird, werden die Daten im Allgemeinen in einer Maske zwischengespeichert). |
$VALID | Das Lesen der Daten ist abgeschlossen: Mit diesem Label können die Prüfungen durchgeführt und die Daten in der Datenbank angelegt oder geändert werden. |
Die Verwendung dieses Importmodus wird nur empfohlen, wenn sonst Performanceprobleme auftreten. Der Standardimport weist zwar eine längere Laufzeit auf, ermöglicht dafür aber die automatische Prüfung unter Berücksichtigung sämtlicher Beschreibungen in der Objektlogik, wohingegen das spezifische Importprogramm die manuelle Aufzeichnung voraussetzt (eventuell per Aufruf der vorhandenen Komponenten).
In einem Import- bzw. Exportmodell empfängt X3 einen Datenfluss, dessen Zeichensatz nicht unbedingt dem internen Zeichensatz entspricht (unter Oracle entspricht der in kleine Zeichensatz WE8ISO8951P1). Daher muss es möglich sein, den Zeichensatz umzuschlüsseln. Achtung: In der vorliegenden Dokumentation wird lediglich die Umschlüsselungen von 1 Byte großen Zeichen behandelt. Dies entspricht im Allgemeinen den Sonderzeichen der westlichen Sprachen. Diese Zeichen werden in der Regel in einem Byte kodiert, und ihre Werte liegen zwischen 160 und 250. Nachstehend werden die Entsprechungen zwischen diesen Zeichen und den ASCII-Codes des von X3 verwendeten Standardzeichensatzes aufgelistet (bei Anzeige in einer Police vom Typ Arial).
Byte | 0 | 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 |
16… | ¡ | ¢ | £ | ¤ | ¥ | ¦ | § | ¨ | © | |
17… | ª | « | ¬ | ® | ¯ | ° | ± | ² | ³ | |
18… | ´ | µ | ¶ | · | ¸ | ¹ | º | » | ¼ | ½ |
19… | ¾ | ¿ | À | Á | Â | Ã | Ä | Å | Æ | Ç |
20… | È | É | Ê | Ë | Ì | Í | Î | Ï | Ð | Ñ |
21… | Ò | Ó | Ô | Õ | Ö | × | Ø | Ù | Ú | Û |
22… | Ü | Ý | Þ | ß | à | á | â | ã | ä | å |
23… | æ | ç | è | é | ê | ë | ì | í | î | ï |
24… | ð | ñ | ò | ó | ô | õ | ö | ÷ | ø | ù |
25… | ú | û | ü | ý | þ | ÿ |
Dies erfolgt mithilfe des Feldes Zeichensatz im Umschlüsselungsbereich. Das entsprechende Feld nimmt die im Lokalen Menü 9 definierten Werte an. Dieses Lokale Menü ist standardmäßig nicht parametrierbar, es können jedoch in der Entwicklung Werte hinzugefügt werden, um neue externe Zeichensätze zu verwalten.
Jedem Wert dieses Lokalen Menüs entspricht eine externe Datei, die auf dem Server installiert ist und die durchzuführenden Umschlüsselungen enthält. Diese Datei liegt im Verzeichnis SYS des X3-Ordners und heißt TRANS#.cnv, wobei # der Nummer des Lokalen Menüs entspricht (1, 2, 3 etc.). Die Datei TRANS#.cnv muss in einem UNIX-Format und einem UTF8-Zeichensatz kodiert werden. Ist dies nicht der Fall, wird die Umschlüsselung beim Import/Export fehlschlagen.
Das Verzeichnis SYS existiert standardmäßig nicht. Es muss auf Ordnerebene des Endpoints erstellt werden.
Beispiel für einen Zugriffspfad zum Verzeichnis SYS: SAGE\SAGEX3V6\X3V6SQL\Folders\DEMO\SYS
Die Datei TRANS0.cnv enthält Kommentare, die (in englischer Sprache) die Vorgehensweise erklären:
chaîne1 und chaîne2 sind dreistellige Präfixe, aus denen sich der Code des zu definierenden Zeichensatzes ableiten lässt. Beispiel: ado könnte für die erste Zeichenkette und jeu für die zweite Zeichenkette verwendet werden.
Im Folgenden wird der Inhalt der Datei TRANS0.cnv beschrieben. Es ist dort in englischer Sprache die Vorgehensweise beschrieben:
#
########################################################################
#
# trans0.cnv
#
# Transcodification file used for ADONIX X3 import/export
#
# Each line (except the comments prefixed by # ) must have the following format
#
# adoxxxxx = value1 or extxxxxx = value2
#
# (ado for adonix internal code, ext for "external" file code
#
# xxxxx is an identifier used to associate external & internal code together
#
# values can be defined in following formats :
#
# nnn or "nnn" value in decimal
# \nnn or "\nnn" value in octal
# Hnnn or "Hnnn" value in hexadecimal
#
# Author : Bertrand YVINEC
# Translated by Dominique BOPP
#
# Copyright (c) ADONIX 1992-2001
#
########################################################################
#
# Identifier definition (default is ado and ext)
#
adonix = "iso"
output = "ibm"
Mit dieser Datei kann der Zeichensatz IBM PC umgeschlüsselt werden. Aus dieser Datei wurden hier die meisten Kommentarzeilen entfernt.
#
########################################################################
# trans2.cnv
# Copyright (c) ADONIX 1992-2001
########################################################################
adonix = "iso"
output = "ibm"
#
# ISO code first
isoagr="\340" # a grave
isoeai="\351" # e acute
isoegr="\350" # e grave
isocce="\347" # c cedilla
isougr="\371" # u grave
isodeg="\260" # degree
isoali="\247" # alinea
isoaci="\342" # a circumflex
isoeci="\352" # e circumflex
isoici="\356" # i circumflex
isooci="\364" # o circumflex
isouci="\373" # u circumflex
isoatr="\344" # a dieresis
isoetr="\353" # e dieresis
isoitr="\357" # i dieresis
isootr="\366" # o dieresis
isoutr="\374" # u dieresis
isopou="\243" # pound
#
# Ensuite en code PC
ibmagr="\205" # a grave
ibmeai="\202" # e acute
ibmegr="\212" # e grave
ibmcce="\207" # c cedilla
ibmugr="\227" # u grave
ibmdeg="\370" # degree
ibmali="\365" # alinea (CP 850)
ibmaci="\203" # a circumflex
ibmeci="\210" # e circumflex
ibmici="\214" # i circumflex
ibmoci="\223" # o circumflex
ibmuci="\226" # u circumflex
ibmatr="\204" # a dieresis
ibmetr="\211" # e dieresis
ibmitr="\213" # i dieresis
ibmotr="\224" # o dieresis
ibmutr="\201" # u dieresis
ibmpou="\234" # pound
Soll ein Import direkt in einer Verarbeitung gestartet werden, kann man durch Einfügen der folgenden Zeilen fortfahren:
If !GSERVEUR
Call OUVRE_TRACE(TIT) From LECFIC
Endif
Call IMPORTSIL([L]COD_MODELE,[L]NOM_FICHIER)from GIMPOBJ
If !GSERVEUR
Call FERME_TRACE From LECFIC
Endif
, wobei:
Als Argument übergebene Variablen:
Der Endstatus des Imports kann aus dem Feld [M:IMP2]STAT übernommen werden.
Der Klartext der Fehlermeldung kann durch Aufruf des folgenden Unterprogramms angezeigt werden:
Call ERR_IMPORT([M:IMP2]STAT,MESSAGE) From GIMPOBJ