DBImport – Manuale Utente

Transcript

DBImport – Manuale Utente
DBImport – Manuale Utente
DBImport – Manuale Utente
Pagina 1 di 28
Versione 3 del 15/03/2013
DBImport – Manuale Utente
Pagina 2 di 28
Versione 3 del 15/03/2013
DBImport – Manuale Utente
SOMMARIO
1
Introduzione ........................................................................................................................ 4
2
Descrizione del processo di importazione ............................................................................ 5
2.1
3
Invocazione ............................................................................................................................................ 5
File XML di importazione ...................................................................................................... 6
3.1
File principale, dati ................................................................................................................................... 6
3.1.1
Struttura file ...................................................................................................................................... 6
3.1.2
Proprietà dei nodi ............................................................................................................................... 7
3.2
File esterno per la definizione di un DDS .................................................................................................... 10
3.2.1
Struttura file ..................................................................................................................................... 10
3.2.2
Proprietà dei nodi .............................................................................................................................. 10
3.2.3
3.3
Esempio ........................................................................................................................................... 10
File esterno per la definizione dei Matching ................................................................................................. 11
3.3.1
Struttura file ..................................................................................................................................... 11
3.3.2
Proprietà dei nodi .............................................................................................................................. 11
3.3.3
Esempio ........................................................................................................................................... 11
4
Trigger su eventi di importazione ...................................................................................... 12
4.1
Specifica dei trigger ................................................................................................................................ 12
4.1.1
Specifica all‟interno del file di importazione ............................................................................................ 12
4.1.2
Specifica in un file di definizione esterno ............................................................................................... 12
4.2
Parametri dei gestori degli eventi trigger .................................................................................................... 13
4.2.1
Gestori eventi OnFile* ........................................................................................................................ 13
4.2.2
Gestori eventi OnRecord* ................................................................................................................... 13
4.3
File esterno specifica trigger ..................................................................................................................... 14
4.3.1
Struttura file ..................................................................................................................................... 14
4.3.2
Proprietà dei nodi .............................................................................................................................. 14
4.3.3
Esempio ........................................................................................................................................... 14
5
Tipi di dato supportati ....................................................................................................... 15
5.1
Note sui tipi Data/Ora.............................................................................................................................. 15
5.2
Gestione CCSID ...................................................................................................................................... 16
6
Flow Chart ......................................................................................................................... 17
7
File multimembro .............................................................................................................. 20
8
Il file WGDBIMPS ............................................................................................................... 21
9
Esempi di file di importazione ............................................................................................ 22
9.1
Esempio 1: Importazione in file esistente ................................................................................................... 22
9.2
Esempio 2: Richiamo comandi .................................................................................................................. 23
9.3
Esempio 3: Nuovo file da template ............................................................................................................ 24
9.4
Esempio 4: Specifica match ...................................................................................................................... 25
9.5
Esempio 5: Nuovo file da DDS .................................................................................................................. 26
9.6
Esempio 6: Tipi di dato ............................................................................................................................ 27
9.7
Esempio 7: DDS e Match in file esterni ....................................................................................................... 28
Pagina 3 di 28
Versione 3 del 15/03/2013
DBImport – Manuale Utente
1 INTRODUZIONE
DBImport è nato come prodotto per l‟importazione di dati sul database della piattaforma IBM iSeries.
I dati elaborati sono descritti in un formato neutro basato su files XML, realizzato affinchè DBImport fosse interfacciabile con
la più vasta quantità di fonte dati.
Quello che DBImport offre è:
-
Aggiunta dati ad un file esistente
-
Aggiornamento dati di un file esistente
-
Eliminazione dati da un file esistente
-
Creazione nuovi files
Il prodotto offre supporto multilingua, attraverso la possibilità di specificare il CCSID dei dati trattati a livello di singolo
campo.
Ogni file di importazione contiene al proprio interno uno o più lavori di importazione descritti da:
-
una serie di dati da importare
-
una lista di comandi da eseguire prima dell‟importazione
-
una lista di comandi da eseguire dopo l‟importazione
-
la struttura del file destinazione o il nome del file fisico da utilizzare come modello per la sua creazione
La procedura di importazione può essere personalizzata attraverso la realizzazione di programmi ILE da richiamare durante
le fasi dell‟importazione al fine di eseguire la validazione dei dati, l‟importazione vera e propria e la gestione degli errori.
Questi saranno riferiti come trigger all‟interno del documento.
Lo scopo di questo manuale è descrivere come realizzare un file di importazione con le informazioni corrette e come invocare
il programma di importazione.
Pagina 4 di 28
Versione 3 del 15/03/2013
DBImport – Manuale Utente
2 DESCRIZIONE DEL PROCESSO DI IMPORTAZIONE
2.1 Invocazione
Il programma (DBIMPXX) viene invocato dalla riga di comando specificando il file xml che descrive il lavoro di importazione
che deve svolgere.
Sintassi:
DBIMPXX filedilavoro [filedilog [livellodilog [fileerrori [ignorablank]]]]
Il file di lavoro è un file xml realizzato secondo il modello descritto nel documento “Struttura file XML di importazione”.
E‟ un parametro obbligatorio senza il quale il programma non può funzionare.
Il contenuto di questo file deve rispettare tutte le regole descritte nel documento sopracitato o la procedura di importazione
non andrà a buon fine.
In particolare: se la sintassi XML del file non è corretta (tag lasciati aperti) il programma terminerà senza eseguire alcuna
operazione; se invece è la semantica del file a non essere corretta (informazioni mancanti, collocate in maniera errata) il
risultato ottenuto non è prevedibile.
Le operazioni eseguite dal programma di importazione vengono loggate in un file (qualora non si disabiliti questo
comportamento).
Questo viene specificato tramite il parametro “file di log” (percorso assoluto sull‟IFS) e la quantità di informazioni da loggare
viene specificata con il parametro livello di log.
Qualora non venga specificato il file di log è “/webgate400/log/dbimpxx.log”.
Il livello di log di default è 1.
Livelli di log
0 – Nessun log
1 – Log su file delle operazioni eseguite (ed eventuali errori)
2 – Log su file e a schermo delle operazioni eseguite (ed eventuali errori)
3 – Log su file delle operazioni eseguite (ed eventuali errori) e dei dati elaborati
4 – Log su file e a schermo delle operazioni eseguite (ed eventuali errori) e dei dati elaborati
E‟ inoltre possibile abilitare la creazione di un file xml di importazione valido che contiene tutti i record che hanno fallito
l‟importazione, file che potrà essere usato per ritentare nuovamente l‟operazione.
Per abilitarlo è sufficiente specificarne il percorso come parametro della riga di invocazione.
Il parametro “ignorablank” è stato introdotto al fine di indicare ai programmi utilizzati come trigger quali campi del record
passato sono stati valorizzati da file di importazione e quali invece non sono stati indicati.
Esempi di invocazione
CALL PGM(DBIMPXX) PARM(„/temp/import.xml‟)
Importa dal file /temp/import.xml, log livello 1 sul file /webgate400/log/dbimpxx.log
CALL PGM(DBIMPXX) PARM(„/temp/import.xml‟ „/temp/import.log‟)
Importa dal file /temp/import.xml, log livello 1 sul file /temp/import.log
CALL PGM(DBIMPXX) PARM(„/temp/import.xml‟ „/temp/import.log‟ „3‟)
Importa dal file /temp/import.xml, log livello 3 (con dati) sul /temp/import.log
CALL PGM(DBIMPXX) PARM(„/temp/import.xml‟ „/temp/import.log‟ „2‟ „/temp/import.err.xml‟)
Importa dal file /temp/import.xml, log livello 2 sul file /temp/import.log e a schermo. I record non importati sono
salvati nel file /temp/import.err.xml
Pagina 5 di 28
Versione 3 del 15/03/2013
DBImport – Manuale Utente
3 FILE XML DI IMPORTAZIONE
3.1 File principale, dati
3.1.1 Struttura file
<?xml version=”1.0” encoding=”UTF-8” ?>
<IMPORT_DOCUMENT>
<FILE>
<MATCH>
<FIELD />
…
<FIELD />
</MATCH>
<DDS>
<FIELD />
…
<FIELD />
</DDS>
<EXEC_PRE>
<COMMAND>…</COMMAND>
…
<COMMAND>…</COMMAND>
</EXEC_PRE>
<RECORDS>
<RECORD>
//Descrizione record
</RECORD>
…
<RECORD>
//Descrizione record
</RECORD>
<RECORDS>
<EXEC_POST>
<COMMAND />
…
<COMMAND />
</EXEC_POST>
</FILE>
</IMPORT_DOCUMENT>
Pagina 6 di 28
Versione 3 del 15/03/2013
DBImport – Manuale Utente
3.1.2 Proprietà dei nodi
Di seguito è riportata una breve descrizione dei nodi che vanno a comporre il file di importazione XML.
Per ogni nodo è riportata la lista delle proprietà supportate, il contenuto e la cardinalità rispetto al nodo genitore.
 IMPORT_DOCUMENT
Proprietà
Nessuna
Contenuto
Root del documento, contiene tutti i tag che definiscono l‟importazione
Cardinalità
Ogni file XML che descrive un importazione contiene 1 nodo IMPORT_DOCUMENT
 IMPORT_DOCUMENT/FILE
Proprietà
name
nome del file in cui importare i dati
library
libreria in cui si trova il file
[member]
membro da utilizzare (opzionale, vedi capitolo “File multimembro”)
[match]
file contenente il mapping dei campi sorgente/destinazione (opzionale)
[dds]
file contenente il DDS della tabella destinazione (opzionale)
[template]
file da usare come template per la tabella destinazione (opzionale)
[onFileStart]
gestore trigger (libreria/nomepgm)
[onFileError]
gestore trigger (libreria/nomepgm)
[onFileFinish]
gestore trigger (libreria/nomepgm)
[onRecordValidate] gestore trigger (libreria/nomepgm)
[onRecordImport]
gestore trigger (libreria/nomepgm)
[onRecordError]
gestore trigger (libreria/nomepgm)
[onRecordDone]
gestore trigger (libreria/nomepgm)
[trigger]
file contenente le informazioni sui trigger da scatenare (opzionale)
[ccsid]
codice del character set del file (solo in creazione nuovo file)
Contenuto
Descrive un lavoro di importazione su file
Cardinalità
Ogni nodo IMPORT_DOCUMENT contiene 1..N nodi FILE
 IMPORT_DOCUMENT/FILE/MATCH
Qualora per un FILE il nodo MATCH non fosse specificato si assume che il nome dei campi sorgente (presenti all‟interno
dei nodi RECORD) coincidano con i nomi dei campi destinazione.
Proprietà
Nessuna
Contenuto
Contiene le informazioni per effettuare il mapping tra i campi sorgente e quelli destinazione
Cardinalità
Ogni nodo FILE contiene 0..1 nodi MATCH
Pagina 7 di 28
Versione 3 del 15/03/2013
DBImport – Manuale Utente
 IMPORT_DOCUMENT/FILE/MATCH/FIELD
Proprietà
source
nome del campo sorgente
dest
nome del campo destinazione
Contenuto
Nessuno
Cardinalità
Ogni nodo MATCH contiene 1..N nodi MATCH/FIELD
 IMPORT_DOCUMENT/FILE/DDS
Qualora per un FILE il nodo DDS non fosse specificato è necessario che esista un riferimento ad un file di template dal
quale recuperare le informazioni sulla struttura della tabella che ospiterà i dati oggetto dell‟importazione.
Proprietà
Nessuna
Contenuto
Contiene la descrizione dei campi nel file di destinazione
Cardinalità
Ogni nodo FILE contiene 0..1 nodi DDS
 IMPORT_DOCUMENT/FILE/DDS/FIELD
Proprietà
name
nome del campo
sqltype
tipo di campo (vedi paragrafo “Tipi di dato”)
dblen
lunghezza del campo (se applicabile, vedi paragrafo tipi di dato)
decimals
numero di decimali del campo (se applicabile, vedi paragrafo tipi di dato)
[tag]
nome del tag all‟interno dei nodi RECORD con cui ci riferiamo a questo campo (equivalente a
specificare un blocco match)
[ccsid]
codice del character set del file (solo in creazione nuovo file)
Contenuto
Descrive un lavoro di importazione su file
Cardinalità
Ogni nodo DDS contiene 1..N nodi DDS/FIELD
 IMPORT_DOCUMENT/FILE/EXEC_PRE
Proprietà
Nessuna
Contenuto
Una lista di comandi da eseguire sulla macchina
Cardinalità
Ogni nodo FILE contiene 0..1 nodi EXEC_PRE
 IMPORT_DOCUMENT/FILE/EXEC_PRE/COMMAND
Proprietà
Nessuna
Contenuto
Riga di comando da eseguire
Cardinalità
Ogni nodo EXEC_PRE contiene 0..N nodi COMMAND
Pagina 8 di 28
Versione 3 del 15/03/2013
DBImport – Manuale Utente
 IMPORT_DOCUMENT/FILE/RECORDS
Proprietà
Nessuna
Contenuto
Records di lavoro
Cardinalità
Ogni nodo FILE contiene 1 nodo RECORDS
 IMPORT_DOCUMENT/FILE/RECORDS/RECORD
Proprietà
[verb]
indica l‟azione da eseguire sui dati (ADD / UPD / INS / DEL). Default: ADD
Contenuto
Dati di un record all‟interno del quale i campi sono identificati dai tag il cui nome è specificato nei nodi DDS/FIELD.
Es.
<F1>Valore campo</F1>
(F1 tag campo assegnato nel DDS/FIELD)
I campi sono descritti attraverso tag XML la cui sintassi è la seguente:
<NomeCampo>Valore campo</NomeCampo>
oppure
<FIELD name=”NomeCampo”>Valore campo</FIELD>
NomeCampo fa riferimento alla sorgente.
Cardinalità
Ogni nodo RECORDS contiene 1..N nodi RECORD
 IMPORT_DOCUMENT/FILE/EXEC_POST
Proprietà
Nessuna
Contenuto
Una lista di comandi da eseguire sulla macchina
Cardinalità
Ogni nodo FILE contiene 0..1 nodi EXEC_POST
 IMPORT_DOCUMENT/FILE/EXEC_POST/COMMAND
Proprietà
Nessuna
Contenuto
Riga di comando da eseguire
Cardinalità
Ogni nodo EXEC_POST contiene 0..N nodi COMMAND
Pagina 9 di 28
Versione 3 del 15/03/2013
DBImport – Manuale Utente
3.2 File esterno per la definizione di un DDS
3.2.1 Struttura file
<?xml version=”1.0” encoding=”UTF-8” ?>
<DDS>
<FIELD />
…
<FIELD />
</DDS>
3.2.2 Proprietà dei nodi
Di seguito è riportata una breve descrizione dei nodi che compongono il file di descrizione di una tabella tramite il suo DDS.
Per ogni nodo è riportata la lista delle proprietà supportate, il contenuto e la cardinalità rispetto al nodo genitore.
 DDS
Root del documento.
Proprietà
Nessuna
Contenuto
Contiene la descrizione dei campi nel file di destinazione
Cardinalità
Ogni file XML che descrive un importazione contiene 1 nodo DDS
 DDS/FIELD
Proprietà
name
nome del campo
sqltype
tipo di campo (vedi paragrafo “Tipi di dato”)
dblen
lunghezza del campo (se applicabile, vedi paragrafo tipi di dato)
decimals
numero di decimali del campo (se applicabile, vedi paragrafo tipi di dato)
[tag]
nome del tag all‟interno dei nodi RECORD con cui ci riferiamo a questo campo (equivalente a
specificare un blocco match)
[ccsid]
codice del character set del file (solo in creazione nuovo file)
Contenuto
Descrive un lavoro di importazione su file
Cardinalità
Ogni nodo DDS contiene 1..N nodi FIELD
3.2.3 Esempio
<?xml version=”1.0” encoding=”UTF-8” ?>
<DDS>
<FIELD name=”ID” sqltype=”INTEGER” />
<FIELD name=”Nome” sqltype=”CHAR” dblen=”30” />
<FIELD name=”Cognome” sqltype=”CHAR” dblen=”50” />
</DDS>
Pagina 10 di 28
Versione 3 del 15/03/2013
DBImport – Manuale Utente
3.3 File esterno per la definizione dei Matching
3.3.1 Struttura file
<?xml version=”1.0” encoding=”UTF-8” ?>
<MATCH>
<FIELD />
…
<FIELD />
</MATCH>
3.3.2 Proprietà dei nodi
Di seguito è riportata una breve descrizione dei nodi che vanno a comporre il file di descrizione dei match.
Per ogni nodo è riportata la lista delle proprietà supportate, il contenuto e la cardinalità rispetto al nodo genitore.
 MATCH
Root del documento
Proprietà
Nessuna
Contenuto
Contiene le informazioni per effettuare il mapping tra i campi sorgente e quelli destinazione
Cardinalità
Ogni file XML che descrive un importazione contiene 1 nodo MATCH
 MATCH/FIELD
Proprietà
source
nome del campo sorgente
dest
nome del campo destinazione
Contenuto
Nessuno
Cardinalità
Ogni nodo MATCH contiene 1..N nodi MATCH/FIELD
3.3.3 Esempio
<?xml version=”1.0” encoding=”UTF-8” ?>
<MATCH>
<FIELD source=”FIELD01” dest=”ID” />
<FIELD source=”FIELD02” dest=”Nome” />
<FIELD source=”FIELD03” dest=”Cognome” />
</MATCH>
Pagina 11 di 28
Versione 3 del 15/03/2013
DBImport – Manuale Utente
4 TRIGGER SU EVENTI DI IMPORTAZIONE
Per aumentare la flessibilità e la modularità del prodotto è stato introdotto un sistema di trigger che consente una gestione
avanzata del processo di importazione mediante il richiamo di procedure esterne.
Sono stati previsti gli eventi descritti nella tabella che segue:
Nome
Evento
Utilizzo consigliato
onFileStart
Ogni volta che si apre un file tag
Notifica l‟inizio di un lavoro di importazione
onFileError
Alla chiusura del file tag se sono stati registrati Notifica la conclusione di un lavoro parzialmente o
errori
totalmente fallito
onFileFinish
Alla chiusura del file tag
Notifica la conclusione di un lavoro di
importazione (riuscito o meno)
onRecordValidate
Ogni volta che un record deve essere
elaborato
Consente la validazione dei dati all‟interno del
record prima della loro importazione
onRecordImport
Ogni volta che un record deve essere
elaborato (dopo la validazione)
Sovrascrive la funzione di importazione del record
onRecordError
Al termine di ogni importazione record fallita
Notifica importazione record fallita
onRecordDone
Al termine di ogni importazione record riuscita
Notifica importazione record riuscita
Ogni qual volta il processo di importazione si trova in una delle fasi sopra descritte DBImport verifica se è stato specificato
un gestore per tale evento e se è così lo richiama.
4.1 Specifica dei trigger
La specifica dei trigger da scatenare durante il processo di importazione può essere fatta all‟interno del file XML di
importazione o in un file esterno.
4.1.1 Specifica all’interno del file di importazione
I gestori per gli eventi vengono specificati come proprietà del tag file.
Sono state previste le proprietà: onFileStart, onFileError, onFileFinish, onRecordValidate, onRecordImport, onRecordError,
onRecordDone
Il valore di queste proprietà è una stringa “LIBRERIA/PROGGEST”
Es.
<?xml … ?>
<IMPORT_DOCUMENT>
…
<FILE … onRecordValidate=”MYLIB/VALIDATOR” onRecordError=”MYLIB/NOTIFYERR” … >
…
</FILE>
…
</IMPORT_DOCUMENT>
4.1.2 Specifica in un file di definizione esterno
Qualora non sia possibile o non sia indicato specificare tutti i gestori degli eventi all‟interno del file di importazione è possibile
ricorrere ad un file esterno in formato xml, la cui sintassi è specificata nel capitolo “File esterno specifica trigger”.
Ci si riferisce a questo file di specifica attraverso la proprietà “trigger” del tag FILE (permettendo l‟utilizzo di un set di gestori
diverso per ogni lavoro di importazione).
Qualora siano presenti informazioni sui trigger sia all‟interno del file xml di importazione che in un file esterno di specifica
trigger, le informazioni del file esterno (solo quelle definite) sovrascriveranno quelle del file di importazione.
Pagina 12 di 28
Versione 3 del 15/03/2013
DBImport – Manuale Utente
4.2 Parametri dei gestori degli eventi trigger
I programmi designati alla gestione degli eventi devono essere realizzati con una struttura fissa per consentire lo scambio di
informazioni con DBImport
4.2.1 Gestori eventi OnFile*
I parametri che vengono passati ai gestori di eventi tipo onFile (onFileStart, onFileError, onFileFinish) sono:
Numero Descrizione
1
Tipo
Percorso completo file xml di importazione
Alfanumerico 128 caratteri
DBImport non si aspetta valori di ritorno dalla chiamata ai gestori di questo tipo che quindi non influenzano in alcun modo il
comportamento del processo di importazione.
4.2.2 Gestori eventi OnRecord*
I parametri che vengono passati ai gestori degli eventi di tipo onRecord (onRecordValidate, onRecordImport, onRecordError,
onRecordDone) sono:
Numero Descrizione
Tipo
1
Buffer record
Alfanumerico
2
Dimensione in bytes del buffer record
Packed decimal 5,0
3
Schiera dei campi valorizzati („1‟ se il campo è citato)
Schiera 500 caratteri („0‟ o „1‟)
4
Azione richiesta (specificata come verb del record)
Alfanumerico 3 caratteri
5
Esito dell‟operazione (impostato dal gestore)
Packed decimal 3,0
6
Messaggio di ritorno (impostato dal gestore)
Alfanumerico 80 caratteri
7
Percorso completo file xml di importazione
Alfanumerico 128 caratteri
Attraverso i parametri 5 e 6 i gestori degli eventi onRecord sono in grado di restituire un valore di ritorno a DBImport
influenzando il flusso di importazione dei dati.
L‟esito dell‟operazione segue la seguente condizione:
0
Operazione riuscita
> 0
Operazione riuscita (ma registra sul log il messaggio di ritorno)
< 0
Operazione fallita (errore)
Influenze sul flusso di importazione:
onRecordValidate
se il valore di ritorno è negativo il record non viene importato e viene marcato come fallito.
onRecordImport
se il valore di ritorno è negativo il record non viene importato e viene marcato come fallito.
onRecordError
nessuna influenza, solo notifica nei log.
onRecordDone
nessuna influenza, solo notifica nei log.
Il parametro numero 4 (Schiera dei campi valorizzati) è stato introdotto per consentire di discriminare i campi del record che
sono passati a *Blank per default o perché impostati a *Blank nel file di importazione.
In questa per ogni campo che è stato citato nell‟XML (anche se vuoto, es. <XCODIC />) il corrispondente carattere è
impostato „1‟. Per ogni campo che non viene citato il corrispondente carattere è impostato a „0‟.
Pagina 13 di 28
Versione 3 del 15/03/2013
DBImport – Manuale Utente
4.3 File esterno specifica trigger
4.3.1 Struttura file
<?xml version=”1.0” encoding=”UTF-8” ?>
<TRIGGERSET>
<EVENT />
…
<EVENT />
</ TRIGGERSET >
4.3.2 Proprietà dei nodi
Di seguito è riportata una breve descrizione dei nodi che vanno a comporre il file di descrizione dei match.
Per ogni nodo è riportata la lista delle proprietà supportate, il contenuto e la cardinalità rispetto al nodo genitore.
 TRIGGERSET
Root del documento
Proprietà
Nessuna
Contenuto
Contiene le informazioni per specificare i gestori esterni degli eventi di importazione
Cardinalità
Ogni file XML che descrive un importazione contiene 1 nodo TRIGGERSET
 TRIGGERSET/EVENT
Proprietà
name
nome dell‟evento
handler
programma gestore dell‟evento (formato LIBRERIA/PROGGEST)
Contenuto
Nessuno
Cardinalità
Ogni nodo TRIGGERSET contiene 1..N nodi EVENT.
4.3.3 Esempio
<?xml version=”1.0” encoding=”UTF-8” ?>
<TRIGGERSET>
<EVENT name=”onFileStart”
handler=”MYLIB/DBFILSTA” />
<EVENT name=”onFileError”
handler=”MYLIB/DBFILERR” />
<EVENT name=”onFileFinish”
handler=”MYLIB/DBFILFIN” />
<EVENT name=”onRecordValidate”
handler=”MYLIB/DBRECVAL” />
<EVENT name=”onRecordImport”
handler=”MYLIB/DBRECIMP” />
<EVENT name=”onRecordError”
handler=”MYLIB/DBRECERR” />
<EVENT name=”onRecordDone”
handler=”MYLIB/DBRECDON” />
</TRIGGERSET>
Nota. Non è necessario specificare tutti i trigger: per quelli che non sono specificati verranno utilizzate le funzioni interne del
DBImport.
Pagina 14 di 28
Versione 3 del 15/03/2013
DBImport – Manuale Utente
5 TIPI DI DATO SUPPORTATI
I tipi di dato supportati dal programma per la generazione dei files e l‟importazione dei dati sono identificati dalle seguenti
keywords:
-
SMALLINT
numero intero di 2 byte
-
INTEGER
numero intero di 4 byte
-
BIGINT
numero intero di 8 byte
-
REAL
numero in virgola mobile di 4 byte
-
DOUBLE
numero in virgola mobile di 8 byte
-
ZONED
numero decimale
-
PACKED
numero decimale
-
CHAR
stringa di lunghezza fissa
-
VARCHAR
stringa di lunghezza variabile
-
DATE
data
-
TIME
ora
-
TIMESTAMP
data e ora
Nella specifica del campo DDS il tipo di dato utilizzato influenza le proprietà che vanno specificate.
In particolare:
-
Per i numeri interi (SMALLINT, INTEGER, BIGINT), per quelli in virgola mobile (REAL, DOUBLE) e per i tipi di dato
tempo (DATE, TIME, TIMESTAMP) vanno specificate le proprietà name ed sqltype (eventualmente tag).
-
Per i numeri decimali (PACKED, ZONED) vanno specificate le proprietà name, sqltype, dblen (numero di cifre totali)
e decimals (numero di cifre decimali) (eventualmente tag).
-
Per i tipi stringa (CHAR, VARCHAR) vanno specificate le proprietà name, sqltype, dblen (numero di caratteri
massimo per la stringa) (eventualmente tag).
Se verranno specificate altre proprietà saranno ignorate.
5.1 Note sui tipi Data/Ora
Il formato della data DEVE ESSERE YYYY-MM-DD (anno mese giorno).
Il formato delle ore DEVE ESSERE hh.mm.ss (ore minuti secondi).
Il formato del timestamp DEVE ESSERE YYYY-MM-DD-hh.mm.ss.uuuuuu (anno mese giorno ore minuti secondi
microsecondi).
Se la data, l‟ora o il timestamp non rispettano questo formato il programma fallirà l‟importazione dell‟intero record!
[Aggiornamento: 2017/03/03] E' stata estesa la possibilità di gestire formati data e ora differenti, qualora il file di
destinazione dell'importazione esista già e preveda altri formati data e ora.
Al momento non è possibile specificare nella sezione DDS, formati data e ora diversi da quelli indicati.
Pagina 15 di 28
Versione 3 del 15/03/2013
DBImport – Manuale Utente
5.2 Gestione CCSID
I dati del file di importazione vengono rappresentati internamente al programma in codifica UTF-EBCDIC.
Poiché al momento della scrittura su database in campi di tipo CHAR ed in campi di tipo VARCHAR è necessaria una
conversione verso il formato dati del campo di destinazione, per evitare la perdita di dati è stato introdotta una gestione dei
CCSID (Coded Character Set IDentifier).
Al momento della scrittura di un dato di tipo CHAR oppure VARCHAR su database DBImport effettuerà una conversione in
automatico verso:
-
CCSID impostato sul CAMPO destinazione
oppure in mancanza
-
CCSID impostato sul FILE di destinazione
oppure in mancanza
-
CCSID dell‟utente che ha lanciato il lavoro
Durante la creazione di un nuovo file fisico da parte di DBImport viene impostato di default il CCSID 65535 (HEX, nessuna
conversione).
E‟ possibile specificare il CCSID desiderato per il file o per il singolo campo utilizzando l‟attributo CCSID dei tag FILE e dei tag
FIELD della DDS.
NOTA
I CCSID specificati come attributi nel file XML di importazione hanno validità solo al momento della creazione di un nuovo file
poiché, al momento della scrittura dei records sul file di destinazione, DBImport ricarica la descrizione del formato dati dal
file fisico.
E‟ possibile vedere come sono impostati i CCSID sul file fisico e sui suoi campi utilizzando i comandi DSPFD e DSPFFD su
iSeries.
Pagina 16 di 28
Versione 3 del 15/03/2013
DBImport – Manuale Utente
6 FLOW CHART
Di seguito alcuni grafici che mostrano la logica del processo di importazione.
Figura 1 - Flusso del programma
In figura 1 è mostrato il flusso principale del programma partendo dall‟invocazione dalla riga di comando. L‟unica funzione
del programma è l‟interpretazione delle istruzioni contenute nel file XML passato come parametro.
Qualora la sintassi del file XML passato fosse errata il programma terminerà senza eseguire nessuna operazione.
Qualora fosse la semantica del file XML ad essere errata i risultati che si possono ottenere non sono prevedibili.
Pagina 17 di 28
Versione 3 del 15/03/2013
DBImport – Manuale Utente
Figura 2 - Inizializzazione file fisico di destinazione
In figura 2 è mostrata la logica della procedura di inizializzazione del file fisico di destinazione dalla quale si possono
facilmente ricavare le priorità di cui tiene conto DBImport nel leggere le informazioni quando queste sono disponibili in forme
diverse (è il caso delle informazioni di DDS/template per creare il file fisico o delle informazioni di Match).
Pagina 18 di 28
Versione 3 del 15/03/2013
DBImport – Manuale Utente
Figura 3 - Importazione dei record
In figura 3 è mostrato il flusso di importazione dei records nel file fisico di destinazione. Se il programma si trova in modalità
“Insert only” (vero quando il file fisico di destinazione è stato creato dal DBImport) i files vengono semplicemente aggiunti al
file destinazione assieme all‟informazione sull‟operazione che si intendeva svolgere sui dati (ADD, UPD, INS o DEL) ed un
numero unico progressivo (RRN).
Pagina 19 di 28
Versione 3 del 15/03/2013
DBImport – Manuale Utente
7 FILE MULTIMEMBRO
Qualora nella specifica del tag FILE sia presente la proprietà “member” si assume che il file di destinazione debba essere
multimembro.
La gestione dei file fisici multimembro funziona solo per file fisici già esistenti e per i quali è stata specificato un numero
massimo di membri superiore ad 1.
Per i files di destinazione multimembro è possibile specificare il membro di destinazione per i files:
-
se non specifico il membro di destinazione verrà utilizzato *FIRST
-
se specifico come membro di destinazione *NEW verrà creato un nuovo membro dal nome casuale
-
se specifico un nome membro il programma tenterà di aprirlo, se non esiste tenta di crearlo
Figura 4 - Scelta membro file di destinazione
Il riferimento al membro utilizzato in fase di importazione viene scritto nel file WGDBIMPS in particolare nel campo WGMBRN
del record corrispondente al lavoro di importazione corrente.
Pagina 20 di 28
Versione 3 del 15/03/2013
DBImport – Manuale Utente
8 IL FILE WGDBIMPS
Al termine di ogni lavoro di importazione viene scritto un record nel file WG4SYSFD/WGDBIMPS con alcune informazioni sul
lavoro eseguito.
La struttura del file WGDBIMPS è la seguente:
WGK18I
Identificatore univoco della sessione di importazione (18 caratteri)
WGFNUM
Identificatore del blocco file all‟interno del file XML di importazione
WGJOBN
Nome job
WGUSER
Nome utente
WGJNUM
Numero processo
WGDATE
Data di fine importazione
WGTIME
Ora di fine importazione
WGFLIB
Libreria di destinazione per il lavoro di importazione corrente
WGFILE
File di destinazione per il lavoro di importazione corrente
WGMBRN
Membro all‟interno del file di destinazione per il lavoro corrente
WGXMLP
Path assoluto su IFS al file xml di importazione
WGLOGP
Path assoluto su IFS del file di log per il lavoro di importazione corrente
Pagina 21 di 28
Versione 3 del 15/03/2013
DBImport – Manuale Utente
9 ESEMPI DI FILE DI IMPORTAZIONE
Gli esempi che seguono sono tutti completi e funzionanti.
Ogni esempio è costruito apportando piccole modifiche al precedente.
In tutti gli esempi presentati è mostrato un solo lavoro di importazione (un solo blocco file) tuttavia è possibile racchiudere in
un unico file xml un numero illimitato di lavori di importazione specificando più nodi file.
9.1 Esempio 1: Importazione in file esistente
Scenario:
Importazione per un solo file di destinazione (esistente), dati da importare racchiusi in tag con lo stesso nome dei campi
destinazione.
<?xml version=”1.0” encoding=”UTF-8” ?>
<IMPORT_DOCUMENT>
<FILE name=”RUBRICA” library=”UTENTI”>
<RECORDS>
<RECORD>
<ID>12</ID>
<Nome>Mario</Nome>
<Cognome>Rossi</Cognome>
</RECORD>
<RECORD>
<ID>19</ID>
<Nome>Giovanni</Nome>
<Cognome>Bianchi</Cognome>
</RECORD>
<RECORD verb=”DEL”>
<ID>63</ID>
</RECORD>
</RECORDS>
</FILE>
</IMPORT_DOCUMENT>
A fronte di un file di input di questo tipo il programma apre il file di destinazione (UTENTI/RUBRICA) insersce due nuovi
records ed elimina il record che ha per id 63.
NOTA:
Si assume che ID sia la chiave primaria del file.
Se il file di destinazione non contiene chiavi primarie non è possibile aggiornare o eliminare i records.
Pagina 22 di 28
Versione 3 del 15/03/2013
DBImport – Manuale Utente
9.2 Esempio 2: Richiamo comandi
Scenario:
Importazione per un solo file di destinazione (esistente), dati da importare racchiusi in tag con lo stesso nome dei campi
destinazione. Prima dell‟importazione viene lanciato un comando e al termine della procedura di importazione ne vengono
lanciati due.
Aggiungendo un blocco EXEC_PRE prima di RECORDS specifichiamo una serie di comandi da lanciare prima di importare i
dati.
Aggiungendo un blocco EXEC_POST dopo la chiusura di RECORDS specifichiamo una serie di comandi da lanciare al termine
dell‟importazione.
<?xml version=”1.0” encoding=”UTF-8” ?>
<IMPORT_DOCUMENT>
<FILE name=”RUBRICA” library=”UTENTI”>
<EXEC_PRE>
<COMMAND>CALL PGM(‘PrepDati’)</COMMAND>
</EXEC_PRE>
<RECORDS>
<RECORD>
<ID>12</ID>
<Nome>Mario</Nome>
<Cognome>Rossi</Cognome>
</RECORD>
<RECORD>
<ID>19</ID>
<Nome>Giovanni</Nome>
<Cognome>Bianchi</Cognome>
</RECORD>
<RECORD verb=”DEL”>
<ID>63</ID>
</RECORD>
</RECORDS>
<EXEC_POST>
<COMMAND>CALL PGM(‘ElimDati’)</COMMAND>
<COMMAND>CALL PGM(‘NotifDati’)</COMMAND>
</EXEC_POST>
</FILE>
</IMPORT_DOCUMENT>
A fronte di un file di input di questo tipo il programma:
-
esegue il comando specificato nell‟EXEC_PRE
-
apre il file di destinazione (UTENTI/RUBRICA) inserirà due nuovi records ed eliminerà il record che ha per id 63
-
esegue i comandi specificati nell‟EXEC_POST
Pagina 23 di 28
Versione 3 del 15/03/2013
DBImport – Manuale Utente
9.3 Esempio 3: Nuovo file da template
Scenario:
Importazione per un solo file di destinazione (non esistente), dati da importare racchiusi in tag con lo stesso nome dei campi
destinazione.
Il file di destinazione non esiste e verrà creato sulla base di un file già esistente nel sistema (che funge da template).
<?xml version=”1.0” encoding=”UTF-8” ?>
<IMPORT_DOCUMENT>
<FILE name=”RUBRICA” library=”UTENTI” template=”DEFFILES/RUBRICA”>
<EXEC_PRE>
<COMMAND>CALL PGM(‘PrepDati’)</COMMAND>
</EXEC_PRE>
<RECORDS>
<RECORD>
<ID>12</ID>
<Nome>Mario</Nome>
<Cognome>Rossi</Cognome>
</RECORD>
<RECORD>
<ID>19</ID>
<Nome>Giovanni</Nome>
<Cognome>Bianchi</Cognome>
</RECORD>
<RECORD verb=”DEL”>
<ID>63</ID>
</RECORD>
</RECORDS>
<EXEC_POST>
<COMMAND>CALL PGM(‘ElimDati’)</COMMAND>
<COMMAND>CALL PGM(‘NotifDati’)</COMMAND>
</EXEC_POST>
</FILE>
</IMPORT_DOCUMENT>
A fronte di un file di input di questo tipo il programma:
-
esegue il comando nel blocco EXEC_PRE
-
verifica l‟esistenza del file di destinazione (UTENTI/RUBRICA)
-
se il file non esiste lo crea sulla base del file di template specificato (DEFFILES/RUBRICA) aggiungendo due colonne
(DBIMPRRN che contiene il numero univoco del record e DBIMPVERB che contiene il codice (ADD, UPD, INS o DEL)
dell‟azione che si vuole eseguire sul record)
-
importa i dati nel file destinazione (se il file è stato creato non esegue le operazioni sul file ma si limita ad inserire
tutti i record abbinandogli un codice univoco ed allegando il codice dell‟azione che si vuole eseguire sul record)
-
esegue i comandi specificati nell‟EXEC_POST
Pagina 24 di 28
Versione 3 del 15/03/2013
DBImport – Manuale Utente
9.4 Esempio 4: Specifica match
Scenario:
Importazione per un solo file di destinazione (non esistente). Nomi dei campi all‟interno del file identificati da nomi simbolici
specificati all‟interno di un blocco match.
Il file di destinazione non esiste e verrà creato sulla base di un file già esistente nel sistema (che funge da template).
<?xml version=”1.0” encoding=”UTF-8” ?>
<IMPORT_DOCUMENT>
<FILE name=”RUBRICA” library=”UTENTI” template=”DEFFILES/RUBRICA”>
<MATCH>
<FIELD source=”F1” dest=”ID” />
<FIELD source=”F2” dest=”Nome” />
<FIELD source=”F3” dest=”Cognome” />
</MATCH>
<EXEC_PRE>
<COMMAND>CALL PGM(‘PrepDati’)</COMMAND>
</EXEC_PRE>
<RECORDS>
<RECORD>
<F1>12</F1>
<F2>Mario</F2>
<F3>Rossi</F3>
</RECORD>
<RECORD>
<F1>19</F1>
<F2>Giovanni</F2>
<F3>Bianchi</F3>
</RECORD>
<RECORD verb=”DEL”>
<F1>63</F1>
</RECORD>
</RECORDS>
<EXEC_POST>
<COMMAND>CALL PGM(‘ElimDati’)</COMMAND>
<COMMAND>CALL PGM(‘NotifDati’)</COMMAND>
</EXEC_POST>
</FILE>
</IMPORT_DOCUMENT>
Il comportamento è lo stesso di cui all‟Esempio 3.
A fronte di un file di input di questo tipo il programma:
-
esegue il comando nel blocco EXEC_PRE
-
verifica l‟esistenza del file di destinazione (UTENTI/RUBRICA)
-
se il file non esiste lo crea sulla base del file di template specificato (DEFFILES/RUBRICA) aggiungendo due colonne
(DBIMPRRN che contiene il numero univoco del record e DBIMPVERB che contiene il codice (ADD, UPD, INS o DEL)
dell‟azione che si vuole eseguire sul record)
-
importa i dati nel file destinazione (se il file è stato creato non esegue le operazioni sul file ma si limita ad inserire
tutti i record abbinandogli un codice univoco ed allegando il codice dell‟azione che si vuole eseguire sul record)
esegue i comandi specificati nell‟EXEC_POST
Pagina 25 di 28
Versione 3 del 15/03/2013
DBImport – Manuale Utente
9.5 Esempio 5: Nuovo file da DDS
Scenario:
Importazione per un solo file di destinazione (non esistente). Nomi dei campi all‟interno del file identificati da nomi simbolici
specificati all‟interno di un blocco DDS.
Il file di destinazione non esiste e verrà creato sulla base delle informazioni incluse nel blocco DDS.
<?xml version=”1.0” encoding=”UTF-8” ?>
<IMPORT_DOCUMENT>
<FILE name=”RUBRICA” library=”UTENTI”>
<DDS>
<FIELD name=”ID” sqltype=”INTEGER” tag=”F1” />
<FIELD name=”Nome” sqltype=”CHAR” dblen=”30” tag=”F2” />
<FIELD name=”Cognome” sqltype=”CHAR” dblen=”50” tag=”F3” />
</DDS>
<EXEC_PRE>
<COMMAND>CALL PGM(‘PrepDati’)</COMMAND>
</EXEC_PRE>
<RECORDS>
<RECORD>
<F1>12</F1>
<F2>Mario</F2>
<F3>Rossi</F3>
</RECORD>
<RECORD>
<F1>19</F1>
<F2>Giovanni</F2>
<F3>Bianchi</F3>
</RECORD>
<RECORD verb=”DEL”>
<F1>63</F1>
</RECORD>
</RECORDS>
<EXEC_POST>
<COMMAND>CALL PGM(‘ElimDati’)</COMMAND>
<COMMAND>CALL PGM(‘NotifDati’)</COMMAND>
</EXEC_POST>
</FILE>
</IMPORT_DOCUMENT>
A fronte di un file di input di questo tipo il programma:
-
esegue il comando nel blocco EXEC_PRE
-
verifica l‟esistenza del file di destinazione (UTENTI/RUBRICA)
-
se il file non esiste lo crea sulla base delle informazioni contenute nel blocco DDS aggiungendo due colonne
(DBIMPRRN che contiene il numero univoco del record e DBIMPVERB che contiene il codice (ADD, UPD, INS o DEL)
dell‟azione che si vuole eseguire sul record)
-
importa i dati nel file destinazione (se il file è stato creato non esegue le operazioni sul file ma si limita ad inserire
tutti i record abbinandogli un codice univoco ed allegando il codice dell‟azione che si vuole eseguire sul record)
-
esegue i comandi specificati nell‟EXEC_POST
Pagina 26 di 28
Versione 3 del 15/03/2013
DBImport – Manuale Utente
9.6 Esempio 6: Tipi di dato
Quest‟esempio non è mostrato un file di importazione bensì la descrizione di un file fisico contenente un campo per ogni tipo
di dato supportato.
…
<DDS>
<FIELD name=”FIELD01” sqltype=”SMALLINT”
tag=”F1”
/>
<FIELD name=”FIELD02” sqltype=”INTEGER”
tag=”F2”
/>
<FIELD name=”FIELD03” sqltype=”BIGINT”
tag=”F3”
/>
<FIELD name=”FIELD04” sqltype=”REAL”
tag=”F4”
/>
<FIELD name=”FIELD05” sqltype=”DOUBLE”
tag=”F5”
/>
<FIELD name=”FIELD06” sqltype=”ZONED”
dblen=”10”
decimals=”4”
tag=”F6”
/>
<FIELD name=”FIELD07” sqltype=”PACKED”
dblen=”10”
decimals=”2”
tag=”F7”
/>
<FIELD name=”FIELD08” sqltype=”CHAR”
dblen=”50”
tag=”F8”
/>
<FIELD name=”FIELD09” sqltype=”VARCHAR”
dblen=”50”
tag=”F9”
/>
<FIELD name=”FIELD10” sqltype=”DATE”
tag=”F10”
/>
<FIELD name=”FIELD11” sqltype=”TIME”
tag=”F11”
/>
<FIELD name=”FIELD12” sqltype=”TIMESTAMP”
tag=”F12”
/>
</DDS>
…
Un DDS definito in questo modo porta alla creazione di un file fisico con i seguenti campi:
-
FIELD01 numerico intero 2 byte
non nullo
-
FIELD02 numerico intero 4 byte
non nullo
-
FIELD03 numerico intero 8 byte
non nullo
-
FIELD04 numerico virgola mobile 4 byte
non nullo
-
FIELD05 numerico virgola mobile 8 byte
non nullo
-
FIELD06 numerico zonato 10 cifre (4 decimali)
non nullo
-
FIELD07 numerico packed 10 cifre (2 decimali)
non nullo
-
FIELD08 stringa lunghezza fissa (50 caratteri)
non nullo
-
FIELD09 stringa lunghezza variabile (50 caratteri)
non nullo
-
FIELD10 data
non nullo
-
FIELD11 tempo
non nullo
-
FIELD12 data ora
non nullo
-
DBIMPRRN numerico zonato 10 cifre (0 decimali)
chiave primaria
-
DBIMPVERB stringa fissa 3 caratteri
chiave primaria
Pagina 27 di 28
Versione 3 del 15/03/2013
DBImport – Manuale Utente
9.7 Esempio 7: DDS e Match in file esterni
In quest‟ultimo esempio son riportati 3 file che mostrano come descrivere i blocchi DDS e di Match all‟interno di files esterni
a quello di importazione.
Es. file “/temp/dds01.xml”
<?xml version=”1.0” encoding=”UTF-8” ?>
<DDS>
<FIELD name=”ID” sqltype=”INTEGER” />
<FIELD name=”Nome” sqltype=”CHAR” dblen=”30” />
<FIELD name=”Cognome” sqltype=”CHAR” dblen=”50” />
</DDS>
Es. file “/temp/match01.xml”
<?xml version=”1.0” encoding=”UTF-8” ?>
<MATCH>
<FIELD source=”FIELD01” dest=”ID” />
<FIELD source=”FIELD02” dest=”Nome” />
<FIELD source=”FIELD03” dest=”Cognome” />
</MATCH>
Es. file “import.xml”
<?xml version=”1.0” encoding=”UTF-8” ?>
<IMPORT_DOCUMENT>
<FILE name=”RUBRICA” library=”UTENTI” dds=”/temp/dds01.xml” match=”/temp/match01.xml”>
<EXEC_PRE>
<COMMAND>CALL PGM(‘PrepDati’)</COMMAND>
</EXEC_PRE>
<RECORDS>
<RECORD>
<FIELD01>12</FIELD01>
<FIELD02>Mario</FIELD02>
<FIELD03>Rossi</FIELD03>
</RECORD>
<RECORD>
<FIELD01>19</FIELD01>
<FIELD02>Giovanni</FIELD02>
<FIELD03>Bianchi</FIELD03>
</RECORD>
</RECORDS>
<EXEC_POST>
<COMMAND>CALL PGM(‘ElimDati’)</COMMAND>
<COMMAND>CALL PGM(‘NotifDati’)</COMMAND>
</EXEC_POST>
</FILE>
</IMPORT_DOCUMENT>
NOTA. Nell‟esempio sono stati specificati un blocco di match ed uno di DDS. In questi casi il blocco di match è inutile poiché
potrebbe essere tranquillamente sostituito dalla proprietà “tag” dei nodi field del DDS.
Pagina 28 di 28
Versione 3 del 15/03/2013