5.2
Se l'oggetto esiste:
Poi caricamento della scheda
Riverifica delle autorizzazioni
VERROU IMP_VERROU
LIENSIMP_LIENS
SETBOUT IMP_SETBOUT
AVANT_MOD IMP_AVANT_MOD
6.1
Simulazione di inserimento delle videate associate
alla tabella principale
IMPORT
IMP_DEFTRT (*)
6.2
Per ciascun campo della videata:
Esecuzione delle azioni avant_zone
avant_saisie
init
Se il campo è inserito:
Per sapere se il campo è in un riquadro:
(questa azione assegna nolign se necessario)
Se OK=1, trasferimento dalla classe [F]
Del campo di nome identico
Esecuzione delle azioni après_zone
E all'occorrenza après_modif
IMP_ZONE
7.1
Lettura di un record del file secondario (ciò avviene per tutti i livelli di record secondari)
IMPORT
IMP_TAB
AP_IMPORT
7.2
Simulazione delle videata associate.
Nel caso di un riquadro, la variabile
nolign viene utilizzata.
Di default, viene aggiunta una riga
( nolign = 0)
8
Registrazione dell'oggetto
8.1
Caso della creazione:
Inizio transazione
Scrittura
Fine transazione
In caso di Rollback:
VERIF_CRE IMP_VERIF_CRE
INICREIMP_INICRE
CREATION IMP_CREATION
APRES_CRE IMP_APRES_CRE
AB_CREATION
IMP_AB_CREATION
8.2
Caso della modifica:
Inizio transazione
Lock del record
Assegnazione delle variabili [F]
Riscrittura
Fine transazione
In caso di Rollback:
Sblocco
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
Fine programma:
FERME IMP_FERME
(*) Le azioni MODIF et IMP_MODIF sono utilizzate in principio per gestire la registrazione delle righe (MODIF è utilizzato in standard dalla gestione di oggetto, IMP_MODIF permette di gestire delle azioni supplementari). L'azione IMP_DEFTRT permette di riassegnare, se necessario, la variabile TRTMSK, che definisce il nome del programma automatico definito nel dizionario delle videate.
L’azione IMP_SETBOUT è utilizzata per completare le opzioni di gestione dell'oggetto: è possibile che si debba fare una Call VIREBOUT in import per vietare ad esempio la creazione, ed agire generalmente sulla variabile CHAINE che contiene tutte le opzioni.
Sequenza | Contesto | Azioni |
1.1 | Prima della creazione del programma di import: L’Openo che permette di scrivere il programma temporaneo di import (con nome assegnato dalla variabile IMPTRT) non è ancora avvenuta. E' possibile cambiare il nome delle videate utilizzate (riquadro NOMMSK, il numero di videate è dato da NBMASK) | IMP_COMPILE |
1.2 | Dopo la creazione del programma di import: Il programma temporaneo di import (con nome assegnato dalla variabile IMPTRT) è sempre aperto da Openo: è quindi possibile aggiungervi (con Wrseq) delle istruzioni complementari. Il programma sarà compilato dopo questa azione, dopodiché la procedura di import vera e propria comincerà. | IMP_TRTSUP |
1.3 | Inizio programma | OUVREIMP_OUVRE |
2 | Lettura del file di import e trasferimento nella classe [F] L'azione AP_IMPORT è richiamata dopo il caricamento delle variabili decodificate di ciascun blocco (il livello di nidificazione è conosciuto dalla variabile SEPNUM (da 1 a 8), l'abbreviazione della tabella principale in corso di elaborazione dalla variabile IMPABR | AP_IMPORT |
3 | Test di esistenza dell'oggetto (numero righe >0) |
|
3.1 | Se l'oggetto esiste: | VERROUIMP_VERROU |
3.2 | Verifica dell'autorizzazione a creare o a modificare: | SETBOUTIMP_SETBOUT |
3.3 | Se l'oggetto non esiste: | SETBOUTIMP_SETBOUT RAZCREIMP_RAZCRE |
4.1 | Ciclo di lettura dei record Record collegati a ciascuna riga: Trasferimento nella classe [F] Fine ciclo di lettura Record collegati al termine del ciclo: | FILTRE LIENS0IMP_LIENS0 LIENSIMP_LIENS
LIENS2IMP_LIENS2 |
5.1 | Simulazione di inserimento delle videate associate alla tabella principale | IMPORT IMP_DEFTRT (*) |
5.2 | Per ciascun campo della videata: Esecuzione delle azioni avant_zone avant_saisie init Se il campo è inserito: Se OK=1, trasferimento dalla classe [F] del campo con nome uguale Esecuzione delle azioni après_zonee all'occorrenza après_modif |
IMP_ZONE |
6.1 | Lettura di un record del file secondario [F] L'azione AP_IMPORT è richiamata dopo il caricamento delle variabili decodificate di ciascun blocco (il livello di nidificazione è conosciuto dalla variabile SEPNUM (da 1 a 8), l'abbreviazione della tabella principale in corso di elaborazione dalla variabile IMPABR | IMPORT
AP_IMPORT |
6.2 | Simulazione delle videata associate. Nel caso di un riquadro, la variabilenolign è utilizzata. Di default, viene aggiunta una riga ( nolign = 0) |
|
7 | Registrazione dell'oggetto |
|
7.1 | Caso della creazione:
Inizio transazione Per ciascuna riga: Scrittura
Al termine della scrittura delle righe: Transazione terminata: | VERIF_CRE IMP_VERIF_CRE DEBUT_CRE IMP_DEBUT_CRE INICREIMP_INICRE CREATIONIMP_CREATION MODIFIMP_MODIF APRES_CREIMP_APRES_CRE |
7.2 | Caso della modifica: Inizio transazione Cancellazione delle righe Ciclo sulle righe:
Creazione riga Al termine del ciclo Fine transazione | VERIF_MOD IMP_VERIF_MOD DEBUT_MOD IMP_DEBUT_MOD FILTRE INICREIMP_INICRE CREATIONIMP_CREATION MODIFIMP_MODIF APRES_MODIMP_APRES_MOD DEVERROUIMP_DEVERROU |
8 | Fine programma: | FERME IMP_FERME |
Sequenza | Contesto | Azioni |
1.1 | Prima della creazione del programma di import: L’Openo che permette di scrivere il programma temporaneo di import (con nome assegnato dalla variabile IMPTRT) non è ancora avvenuta. E' possibile cambiare il nome delle videate utilizzate (riquadro NOMMSK, il numero di videate è dato da NBMASK) | IMP_COMPILE |
1.2 | Dopo la creazione del programma di import: Il programma temporaneo di import (con nome assegnato dalla variabile IMPTRT) è sempre aperto da Openo: è quindi possibile aggiungervi (con Wrseq) delle istruzioni complementari. Il programma sarà compilato dopo questa azione, dopodiché la procedura di import vera e propria comincerà. | IMP_TRTSUP |
1.3 | Inizio programma | OUVREIMP_OUVRE |
2 | Lettura dei dati del file e caricamento della classe [F] L'azione AP_IMPORT è richiamata dopo il caricamento delle variabili decodificate di ciascun blocco (il livello di nidificazione è conosciuto dalla variabile SEPNUM (da 1 a 8), l'abbreviazione della tabella principale in corso di elaborazione dalla variabile IMPABR |
AP_IMPORT |
3 | Se l'oggetto esiste: | VERROUIMP_VERROU |
4 | Lock della tabella Inizio lettura: Ciclo di lettura dei record Al termine della lettura | FILTRE LIENS0IMP_LIENS0 LIENSIMP_LIENS LIENS2IMP_LIENS2 |
5 | Verifica dell'autorizzazione a modificare: | SETBOUTIMP_SETBOUT |
6.1 | Simulazione di inserimento delle videate associate alla tabella principale | IMPORT IMP_DEFTRT (*) |
6.2 | Per ciascun campo della videata: Esecuzione delle azioni avant_zone avant_saisie init Se il campo è inserito: Se OK=1, trasferimento dalla classe [F] del campo con nome uguale Esecuzione delle azioni après_zonee all'occorrenza après_modif |
IMP_ZONE |
7.1 | Lettura di un record del file secondario | IMPORT |
7.2 | Simulazione delle videate associate. una riga viene aggiuta al riquadro (nolign è gestito dalla gestione oggetto) |
|
8 | Registrazione dell'oggetto |
|
8.1 | Si è sempre in creazione Inizio transazione poi blocco tabella se OK<>0 in seguito a MOD_IMPORT, la transazione prosegue: Si cancellano tutti i record esistenti Per ogni riga: Scrittura Al termine della scrittura delle righe: Fine transazione | VERIF_MOD IMP_VERIF_MOD MOD_IMPORT
FILTRE INICREIMP_INICRE CREATIONIMP_CREATION MODIFIMP_MODIF |
9 | Quando la transazione è riuscita | APRES_MODIMP_APRES_MOD |
10 | Fine programma: | FERMEIMP_FERME |
Tutte le azioni IMPxxx hanno lo stesso contesto di quelle di SUBxxx e vengono richiamate dopo.
Le azioni seguenti sono particolari.
L'azione IMPORT è richiamata dopo ciascuna lettura di record.
La variabile IMPFIC contiene l'abbreviazione del file importato. La classe corrispondente è disponibile (per le informazioni effettivamente importate).
Nel caso di un riquadro, la variabile nolign è inizializzata a 0, e sarà utilizzata in uscita per sapere quale riga viene inserita. Se nolign è lasciata a zero, sarà creata una nuova riga.
L'azione IMPORT è utilizzata per gestire i campi di una tabella secondaria raggruppati in un riquadro (la pagina 3 dell'oggetto definisce a questo scopo le tabelle secondarie, le videate e le variabili di fondo riquadro corrispondenti). Questo permette di distinguere i campi non indicizzati che devono essere posizionati in un riquadro degli altri campi. Questa azione è utilizzata solo per gli import di oggetto di tipo normale.
L'azione IMP_ZONE è richiamata al posto dell'inserimento di un campo, essa permette di recuperare un valore in una videata che nel file avrebbe un nome diverso (es: caso dei campi dimensionati in una tabella che corrisponde a più colonne di un riquadro):
L’azione MOD_IMPORT serve solo in import di un oggetto riquadro (per vietare eventualmente questo import).
Questo programma di import bypassa (in generale per ragioni di prestazioni) la gestione standard d'oggetto e include solo un numero limitato di label richiamate da Gosub dalla funzione di import. Queste label sono definite qui di seguito:
Label | Contesto |
$OUVRE | All'inizio dell'import, questa label permette di dichiarare videate, tabelle e variabili necessarie. |
$RAZCRE | All'inizio della lettura (si sta per leggere un nuovo record). Permette di azzerare le variabili che saranno in seguito alimentate dall'import. |
$SAIMSK | Quando un gruppo di dati è stato letto. La variabile IMPFIC permette di conoscere l'abbreviazione della tabella il cui contenuto è stato letto. La classe [F] che corrisponde a questa tabella è allora alimentata ed è possibile effettuare dei trasferimenti di dati verso delle videate (quando si lavora con degli oggetti di tipo testata / riga, in generale è in una videata che si memorizzano temporaneamente i dati). |
$VALID | Fine della lettura dei dati: questa label permette di fare i controlli e creare o modificare i dati nel database. |
Si consiglia di realizzare questa modalità di import solo se si pongono dei particolari problemi di prestazioni. Infatti, anche se è più pesante, l'import "standard" d'oggetto permette di ottenere un controllo automatico includendo tutto ciò che è descritto nella logica d'oggetto, mentre il programma di import specifico necessita di ricodificare tutto a mano, richiamando eventualmente dei componenti esistenti.
Nel modello di import o di un export, ADONIX X3 riceve un flusso di dati in in set di caratteri che non è obbligatoriamente il set di caratteri interno (corrispondente al set di caratteri WE8ISO8951P1 in oracle). E' necessario essere in grado di trascodificarlo. Attenzione, si parlerà in questa documentazione solo di trascodifica di caratteri memorizzati su un byte corrispondenti in generale a caratteri accentati o specifici di alcune lingue occidentali. Questi caratteri sono normalmente codificati in un byte con valori compresi tra 160 e 250. Qui di seguito, si troveranno le corrispondenze tra questi caratteri ed i codici ascii del set standard utilizzati da ADONIX X3 (visualizzati con un font di tipo Arial).
Byte | 0 | 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 |
16… |
| ¡ | ¢ | £ | ¤ | ¥ | ¦ | § | ¨ | © |
17… | ª | « | ¬ |
| ® | ¯ | ° | ± | ² | ³ |
18… | ´ | µ | ¶ | · | ¸ | ¹ | º | » | ¼ | ½ |
19… | ¾ | ¿ | À | A | Â | Ã | Ä | Å | Æ | Ç |
20… | È | É | Ê | Ë | Ì | Í | Î | Ï | Ð | Ñ |
21… | Ò | Ó | Ô | Õ | Ö | × | Ø | Ù | Ú | Û |
22… | Ü | Ý | Þ | ß | à | á | â | ã | ä | å |
23… | æ | ç | è | é | ê | ë | ì | í | î | ï |
24… | ð | ñ | ò | ó | ô | õ | ö | ÷ | ø | ù |
25… | ú | û | ü | ý | þ | ÿ |
|
|
|
|
Ciò si fa per mezzo del campo Set di caratteri nel riquadro di trascodifica. Il campo in questione assume dei valori definiti dal menù locale 9. Questo menù locale non è parametrizzabile di default, ma è possibile aggiungervi dei valori in sviluppo, per gestire nuovi set di caratteri esterni.
A ciascun valore di questo menù locale corrisponde un file esterno, installato sul server, che definisce le trascodifiche da realizzare. Questo file si trova nella directory SYS del dossier X3, e ha come nome TRANS#.cnv, dove # corrisponde al numero del menù locale (1, 2, 3…). Il file TRANS0.cnv contiene dei commenti che spiegano (in inglese) il modo di procedere:
adonix="stringa1"
output="stringa2"stringa1 e stringa2 sono prefissi su 3 caratteri che definiscono il codice del set che si vuole definire. Ad esempio, si potrà usare ado per la stringa 1, e set per il secondo set di caratteri.
adoeacuta="238"
seteacuta="233"
E' importante osservare che:
Si troverà qui di seguito il contenuto del file TRANS0.cnv, che spiega in inglese come usarlo:
#
########################################################################
#
# 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"
Questo file permette di trascodificare nel set IBM PC. Il file è stato ripulito dalla maggior parte delle righe di commento.
#
########################################################################
# 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
Se si desidera attivare direttamente un import in un programma, è possibile procedere inserendo le seguenti righe:
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
Dove
Le variabili passate in argomento sono le seguenti:
Lo stato di fine dell'import è contenuto nel campo [M:IMP2]STAT
E' possibile avere il testo esteso del messaggio legato all'errore chiamando il seguente sotto-programma:
Call ERR_IMPORT([M:IMP2]STAT,MESSAGE) From GIMPOBJ