5.2
Jeśli obiekt istnieje:
Ładowany jest rekord
Ponowna weryfikacja uprawnień
VERROUIMP_VERROU
LIENSIMP_LIENS
SETBOUTIMP_SETBOUT
AVANT_MODIMP_AVANT_MOD
6.1
Symulacja wpisu na powiązanych ekranach
głównej tabeli
IMPORT
IMP_DEFTRT (*)
6.2
Dla każdego pola ekranu:
Wykonanie operacji avant_zone
avant_saisie
init
Jeśli obszar jest uzupełniony:
Aby dowiedzieć się, czy obszar jest w tabeli:
(ta operacja przypisuje nolign, jeśli konieczne)
Jeśli OK=1, transfer z klasy [F]
Z pola o takiej samej nazwie
Wykonanie operacji apres_zone
W danym przypadku apres_modif
IMP_ZONE
7.1
Odczyt rekordy drugorzędnego pliku (odbywa się to dla wszystkich poziomów drugorzędnych rekordów)
IMPORT
IMP_TAB
AP_IMPORT
7.2
Symulacja powiązanych ekranów
W przypadku tabeli używana jest zmienna
nolign.
Domyślnie dodawana jest pozycja
(nolign = 0).
8
Rekord obiektu
8.1
Przypadek tworzenia:
Początek transakcji
Zapis
Koniec transakcji
W przypadku wycofania:
VERIF_CREIMP_VERIF_CRE
INICREIMP_INICRE
CREATIONIMP_CREATION
APRES_CREIMP_APRES_CRE
AB_CREATION
IMP_AB_CREATION
8.2
W przypadku modyfikacji:
Początek transakcji
Blokada rekordu
Przypisanie zmiennych [F]
Ponowny zapis
Koniec transakcji
W przypadku wycofania:
Odblokowanie
VERIF_MODIMP_VERIF_MOD
AVANT_MODFIC
IMP_AVANT_MODFIC
INIMODIMP_INIMOD
MODIFIMP_MODIF (*)
APRES_MODIMP_APRES_MOD
AB_MODIFIMP_AB_MODIF
DEVERROUIMP_DEVERROU
9
Koniec programu:
FERMEIMP_FERME
(*) Operacje MODIF i IMP_MODIF są głównie używane do zarządzania rekordem pozycji (MODIF jest używana w standardzie do zarządzania obiektem, a IMP_MODIF umożliwia zarządzanie operacjami dodatkowymi). Operacja IMP_DEFTRT umożliwia ponowne przypisanie, jeśli jest to konieczne, zmiennej TRTMSK, która definiuje nazwę automatycznego procesu zdefiniowanego w słowniku ekranów.
Operacja IMP_SETBOUR jest wykorzystywana do uzupełnienia opcji zarządzania obiektem – można np.posiadać do wykonania wywołanie VIREBOUT w imporcie w celu zabronienia tworzenia i ma to w szczególności wpływ na zmienną CHAINE, która zawiera wszystkie opcje.
Sekwencja | Kontekst | Operacje |
1.1 | Przed utworzeniem programu importu: Openo, które umożliwia zapis tymczasowego programu importu (nazwy nadanej przez zmienną IMPTRT) nie jest jeszcze dokonywane. Można zmienić nazwę używanych masek (tabela NOMMSK, liczba masek jest podawana przez NBMASK). | IMP_COMPILE |
1.2 | Po utworzeniu programu importu: Tymczasowy proces importu (nazwy nadanej przez zmienną IMPTRT) jest zawsze otwierany przez Openo – można więc dodać (za pomocą Wsdeq) dodatkowe instrukcje. Proces zostanie skompilowany po tej operacji, a następnie rozpocznie się właściwa procedura importu. | IMP_TRTSUP |
1.3 | Początek programu | OUVREIMP_OUVRE |
2 | Odczyt pliku importu i transfer w klasie [F] Operacja AP_IMPORT jest wywoływana po załadowaniu odkodowanych zmiennych każdego bloku (poziom zachodzenia podawany jest przez zmienną SEPNUM (od 1 do 8), skrót głównej tabeli w trakcie przetwarzania przez zmienną IMPABR). | AP_IMPORT |
3 | Test istnienia obiektu (liczba pozycji > 0) |
|
3.1 | Jeśli obiekt istnieje: | VERROUIMP_VERROU |
3.2 | Weryfikacja uprawnienia do tworzenia lub modyfikacji: | SETBOUTIMP_SETBOUT |
3.3 | Jeśli obiekt nie istnieje: | SETBOUTIMP_SETBOUT RAZCREIMP_RAZCRE |
4.1 | Pętla odczytu rekordów Rekordy powiązane z każdą pozycją: Transfer w klasie [F] Koniec pętli odczytu Rekordy powiązane z końcem pętli: | FILTRE LIENS0IMP_LIENS0 LIENSIMP_LIENS
LIENS2IMP_LIENS2 |
5.1 | Symulacja wpisu na powiązanych ekranach głównej tabeli | IMPORT IMP_DEFTRT (*) |
5.2 | Dla każdego pola ekranu: Wykonanie operacji avant_zone avant_saisie init Jeśli obszar jest uzupełniony: Jeśli OK=1, transfer z klasy [F] pola o tej samej nazwie Wykonanie operacji apres_zone i w danym przypadku apres_modif |
IMP_ZONE |
6.1 | Odczyt rekordu pliku drugorzędnego Operacja AP_IMPORT jest wywoływana po załadowaniu odkodowanych zmiennych każdego bloku (poziom zachodzenia podawany jest przez zmienną SEPNUM (od 1 do 8), skrót głównej tabeli w trakcie przetwarzania przez zmienną IMPABR). | IMPORT
AP_IMPORT |
6.2 | Symulacja powiązanych ekranów W przypadku tabeli używana jest zmienna nolign. Domyślnie dodawana jest pozycja (nolign = 0). |
|
7 | Rekord obiektu |
|
7.1 | Przypadek tworzenia:
Początek transakcji Dla każdej pozycji: Zapis
Po zakończeniu zapisu pozycji: Transakcja zakończona: | VERIF_CREIMP_VERIF_CRE DEBUT_CREIMP_DEBUT_CRE INICREIMP_INICRE CREATIONIMP_CREATION MODIFIMP_MODIF APRES_CREIMP_APRES_CRE |
7.2 | W przypadku modyfikacji: Początek transakcji Usuwanie pozycji Pętla w pozycjach:
Tworzenie pozycji Na koniec pętli Koniec transakcji | VERIF_MODIMP_VERIF_MOD DEBUT_MOD IMP_DEBUT_MOD FILTRE INICREIMP_INICRE CREATIONIMP_CREATION MODIFIMP_MODIF APRES_MODIMP_APRES_MODDEVERROUIMP_DEVERROU |
8 | Koniec programu: | FERMEIMP_FERME |
Sekwencja | Kontekst | Operacje |
1.1 | Przed utworzeniem programu importu: Openo, które umożliwia zapis tymczasowego programu importu (nazwy nadanej przez zmienną IMPTRT) nie jest jeszcze dokonywane. Można zmienić nazwę używanych masek (tabela NOMMSK, liczba masek jest podawana przez NBMASK). | IMP_COMPILE |
1.2 | Po utworzeniu programu importu: Tymczasowy proces importu (nazwy nadanej przez zmienną IMPTRT) jest zawsze otwierany przez Openo – można więc dodać (za pomocą Wsdeq) dodatkowe instrukcje. Proces zostanie skompilowany po tej operacji, a następnie rozpocznie się właściwa procedura importu. | IMP_TRTSUP |
1.3 | Początek programu | OUVREIMP_OUVRE |
2 | Odczyt danych rekordu i załadowanie klasy [F] Operacja AP_IMPORT jest wywoływana po załadowaniu odkodowanych zmiennych każdego bloku (poziom zachodzenia podawany jest przez zmienną SEPNUM (od 1 do 8), skrót głównej tabeli w trakcie przetwarzania przez zmienną IMPABR). |
AP_IMPORT |
3 | Jeśli obiekt istnieje: | VERROUIMP_VERROU |
4 | Blokada tabeli Początek odczytu: Pętla odczytu rekordów Koniec odczytu | FILTRE LIENS0IMP_LIENS0 LIENSIMP_LIENS LIENS2IMP_LIENS2 |
5 | Weryfikacja uprawnień do modyfikacji: | SETBOUTIMP_SETBOUT |
6.1 | Symulacja wpisu na powiązanych ekranach głównej tabeli | IMPORT IMP_DEFTRT (*) |
6.2 | Dla każdego pola ekranu: Wykonanie operacji avant_zone avant_saisie init Jeśli obszar jest uzupełniony: Jeśli OK=1, transfer z klasy [F] pola o tej samej nazwie Wykonanie operacji apres_zone i w danym przypadku apres_modif |
IMP_ZONE |
7.1 | Odczyt rekordu pliku drugorzędnego | IMPORT |
7.2 | Symulacja powiązanych ekranów Do tabeli dodawana jest pozycja (nolign jest generowane przez zarządzanie obiektem). |
|
8 | Rekord obiektu |
|
8.1 | Cały czas w trybie tworzenia. Początek transakcji następnie blokada tabeli jeśli OK <> 0 w następstwie MOD_IMPORT, operacja jest kontynuowana: Usuwane są wszystkie istniejące rekordy Dla każdej pozycji: Zapis Po zakończeniu zapisu pozycji: Koniec transakcji | VERIF_MODIMP_VERIF_MOD MOD_IMPORT
FILTRE INICREIMP_INICRE CREATIONIMP_CREATION MODIFIMP_MODIF |
9 | Jeśli transakcja zakończyła się powodzeniem | APRES_MODIMP_APRES_MOD |
10 | Koniec programu: | FERMEIMP_FERME |
Wszystkie operacje IMPxxx mają taki sam kontekst, co operacje SUBxxx i są wywoływane jako kolejne.
Dla procesu właściwe są następujące operacje
Operacja IMPORT jest wywoływana po każdym odczycie rekordu.
Zmienna IMPFIC zawiera skrót importowanego pliku. Odpowiadająca klasa to pozycja (dla informacji rzeczywiście zaimportowanych).
W przypadku tabeli zmienna nolign jest inicjalizowana jako 0 i będzie ona wykorzystywana, aby przy wyjściu móc stwierdzić, która pozycja została uzupełniona. Jeśli nolign jest pozostawiona jako zero, tworzona jest nowa pozycja.
Operacja IMPORT jest wykorzystywana do zarządzania obszarami tabeli dodatkowej umiejscowionymi w tabli (strona 3 obiektu definiuje w tym celu tabele dodatkowe, ekrany i odpowiadające zmienne końca tabeli). Umożliwia to rozróżnienie obszarów niezaindeksowanych przed umiejscowieniem w tabeli od innych obszarów. Ta operacja jest wykorzystywana wyłącznie dla importu obiektów standardowych.
Operacja IMP_ZONE jest wywoływana podczas wpisu obszaru i umożliwia pobranie wartości na ekranie, której nazwa byłaby inna w pliku (np. przypadek wymiarowanych obszarów w tabeli odpowiada wielu kolumnom tabeli):
Operacja MOD_IMPORT służy tylko do importu obiektu tabeli (do ewentualnego zabronienia tego importu).
Ten proces importu omija (zazwyczaj ze względów wydajnościowych) zarządzanie obiektem standardowym i zawiera tylko ograniczoną liczbę etykiet wywoływanych przez Gosub z poziomu funkcji importu. Te etykiety są zdefiniowane poniżej:
Etykieta | Kontekst |
$OUVRE | Na początku importu ta etykieta umożliwia zadeklarowanie koniecznych masek, tabel i zmiennych. |
$RAZCRE | Na początku odczytu (odczytany zostanie nowy rekord). Umożliwia wyzerowanie zmiennych, które następnie zostaną uzupełnione przez import. |
$SAIMSK | Jeśli grupa danych została odczytana. Zmienna IMPFIC umożliwia zapoznanie się ze skrótem tabeli, której zawartość została odczytana. Klasa [F] odpowiadająca tej tabeli jest więc uzupełniana i można dokonać transferu danych do masek (jeśli pracuje się z obiektami typu nagłówek / pozycja jest to zazwyczaj maska, w której przechowywane są tymczasowo dane). |
$VALID | Zakończenie odczytu danych – ta etykieta umożliwia dokonanie kontroli oraz utworzenie i modyfikację danych w bazie. |
Zaleca się wykonywania tego trybu importu tylko, jeśli wystąpiły szczególne problemy z wydajnością. Nawet jeśli jest on ciężki, „standardowy” import obiektu umożliwia otrzymanie automatycznej kontroli uwzględniając wszystko, co jest zapisane w logice obiektu, chociaż konkretny program importu wymaga ręcznego kodowania wszystkiego, wywołując ewentualnie istniejące składniki.
W szablonie importu lub eksportu ADONIX X3 otrzymuje przepływ danych w zestawie znaków, które nie są koniecznie wewnętrznym zestawem znaków (odpowiadającym zestawowi znaków WE8ISO8951P1 w Oracle). Konieczne jest ich transkodowania. Uwaga, w tej dokumentacji mowa jest wyłącznie o transkodowaniu znaków przechowywanych w bajcie, odpowiadającemu ogólnie znakom akcentowanym lub właściwym dla niektórych języków wschodnich. Te znaki są zazwyczaj kodowane w bajcie z wartościami zawierającymi się między 160 a 250. Poniżej podano odpowiedniki między tymi znakami a kodami ASCII zestawu standardowego używanymi przez ADONIC X3 (wyświetlanymi w czcionce Arial).
Bajt | 0 | 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 |
16… | ¡ | ¢ | £ | ¤ | ¥ | ¦ | § | ¨ | © | |
17… | ª | « | ¬ | ® | ¯ | ° | ± | ² | ³ | |
18… | ´ | µ | ¶ | · | ¸ | ¹ | º | » | ¼ | ½ |
19… | ¾ | ¿ | À | Á | Â | Ã | Ä | Å | Æ | Ç |
20… | È | É | Ê | Ë | Ì | Í | Î | Ï | Ð | Ñ |
21… | Ò | Ó | Ô | Õ | Ö | × | Ø | Ù | Ú | Û |
22… | Ü | Ý | Þ | ß | à | á | â | ã | ä | å |
23… | æ | ç | è | é | ê | ë | ì | í | î | ï |
24… | ð | ñ | ò | ó | ô | õ | ö | ÷ | ø | ù |
25… | ú | û | ü | ý | þ | ÿ |
Odbywa się to za pośrednictwem pola Zestaw znaków w numerze transkodowania. Dane pole przyjmuje wartości zdefiniowane przez menu lokalne 9. To menu lokalne nie jest domyślnie możliwe do skonfigurowania, ale można do niego dodać wartości w trybie programowania w celu zarządzania nowymi, zewnętrznymi zestawami znaków.
Każda wartość tego menu lokalnego odpowiada zewnętrznemu plikowi, zainstalowanemu na serwerze, który definiuje transkodowanie do wykonania. Ten plik znajduje się w katalogu SYS folderu X3 i nazywa się TRANS#.cnv, gdzie # odpowiada numerowi menu lokalnego (1,2, 3 itd.). Plik TRANS#.cnv musi być zakodowany w formacie UNIX i z zestawem znaków UTF8. Jeśli tak nie jest, transkodowanie nie będzie działało podczas importu/eksportu.
Katalog SYS nie istnieje domyślnie. Należy go utworzyć na poziomie folderu punktu końcowego.
Przykład ścieżki dostępu do folderu SYS: SAGE\SAGEX3V6\X3V6SQL\Folders\DEMO\SYS
Plik TRANS0.cnv zawiera komentarze (w języku angielskim) wyjaśniające sposób wykonania:
łańcuch1 i łańcuch2 to prefiksy liczące 3 znaki, które definiują zestaw, który ma zostać zdefiniowany. Na przykład można użyć ado dla łańcucha 1 i zestawu dla drugiego zestawu znaków.
Poniżej znajduje się zawartość pliku TRANS0.cnv, która opisuje po angielsku wykonanie:
#
########################################################################
#
# 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"
Ten plik umożliwia transkodowanie w zestawie IBM PC. Ten plik został pozbawiony większości komentarzy.
#
########################################################################
# 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
#
# Następnie kod 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
Jeśli import ma być wywołany bezpośrednio w procesie można kontynuować wpisując następujące pozycje:
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
Z
W argumencie przekazywane są następujące zmienne:
Status zakończenia importu może zostać pobrany z pola [M:IMP2]STAT
Tekst komunikatu powiązanego z błędem można otrzymać wywołując następujący podprogram:
Call ERR_IMPORT([M:IMP2]STAT,MESSAGE) From GIMPOBJ