Esportazione in formato JASCII
EXPORTAZIONE in formato JASCII
FORMATO DEL FILE
(i campi facoltativi sono indicati tra parentesi quadre)
- [CAPTION=titolo del formato]
- [OUTPUT_FILENAME_FORMAT=[{LOCAL|FTP}::]nomefile output]
- [FILESYSTEM_LOCAL_PATH]
- [EXPORT_TYPE={JASCII|TEXT}]
- [PLAINTEXT=[filename]]
- [DEBUG=[filename]]
- [DEBUG_PATH=filepath]
- [LOG_SQL_EXPORT=[filename]]
- [SKIP_TABLE]
- [EMAIL_ADDRESS=[destinatario@xxx.com][;destinatario2@yyy.com][…]]
- [EMAIL_SUBJECT=[email subject]
- [impostazioni SMTP]
- [impostazioni FTP]
- [definizione macro globali]
- [IMPORT_OPTIONS=.............]
- [SCRIPT_VERSION=xxxx]
- [SQL_EXECUTE_BEFORE_EXPORT=istruzione SQL]
- [SQL_EXECUTE_AFTER_EXPORT=istruzione SQL]
- [OS_EXECUTE_BEFORE=comando (.BAT o .CMD)]
- [OS_EXECUTE_AFTER=comando (.BAT o .CMD)]
- [MESSAGEBOX=TEXT=testo;CAPTION=titolo[;FLAGS=xxxx]]
- [ABORT=TEXT=testo;CAPTION=titolo]
- [TEXT_HEADER=testo]
- [TEXT_FOOTER=testo]
- [SERVICE]
- [SKIP_END_OF_WORK_MESSAGEBOX]
- [USE_STORED_PROCEDURE=ON|OFF]
- [DBS=ASA|SQLSERVER|OTHER]
- TABLE_START=nome tabella da esportare
- SQL_SELECT=espressione SQL di selezione campi
- [SQL_EXECUTE_BEFORE_EXPORT=espressione SQL]
- [SQL_EXECUTE_AFTER_ROW=espressione SQL]
- [SQL_EXECUTE_AFTER_EXPORT=espressione SQL]
- [MESSAGEBOX=TEXT=testo;CAPTION=titolo[;FLAGS=xxxx]]
- [OS_EXECUTE_BEFORE=comando (.BAT o .CMD)]
- [OS_EXECUTE_AFTER=comando (.BAT o .CMD)]
- [EXPORT-ALLEGATO-JOLLY=nomefile]
- [DATAFILE=[{LOCAL|FTP}::]nomefile]
- [definizione macro locali]
- [MESSAGE_FIELD=nomecampo]
- [IMPORT_OPTIONS=.............]
- [{CHECK|WARNING}=§espressione SQL§[;message]]
- FIELDS_START (indica l'inizio della sezione contenente i fields)
- elenco dei campi da esportare, uno per riga
- TEXT testo da scrivere nel file generato
- TABLE_END
- [eventuali altre tabelle con analoga sintassi]
- END_OF_FILE
La doppia barra commenta il
resto della riga su cui si trova (in qualunque posizione).
Il punto e virgola sulla prima colonna commenta l'intera riga.
Un underscore a fine riga considera la riga successiva come una continuazione
della precedente (come in Visual Basic).
VARIABILI CONDIZIONALI
E' possibile
attivare/disattivare singole istruzioni o blocchi di istruzioni attraverso la
compilazione condizionale.
Le VARIABILI CONDIZIONALI sono case-insensitive e possono
contenere LETTERE, NUMERI e i seguenti caratteri (virgolette escluse):
"-_".
Se la riga contenente #IFDEF è vuota (o contiene solo commenti) si
intende come inizio di un blocco che deve essere concluso, altrimenti si intende
come un blocco formato da una sola riga che non prevede chiusura.
I comandi gestiti sono #DEFINE, #IFDEF, #IFNDEF, #ELSE,
#ENDIF, #UNDEF.
Questo formato di comando è stato introdotto a febbraio 2021, solo sulla
piattaforma DX.
#DEFINE TEST
#IFDEF TEST ISTRUZIONE SU LINEA SINGOLA
#IFDEF TEST
istruzione 1
istruzione 2
...
#ELSE
istruzione 3
istruzione 4
...
#ENDIF
STRINGHE CRYPTATE
Per garantire la riservatezza di
istruzioni o password riservate, tutte le assegnazioni possono avvenire
attraverso stringhe cryptate secondo la procedura
standard di JOLLY. I valori saranno opportunamente decrittati prima di essere
utilizzati.
Esempio:
SMTP-AUTH-PWD=#|-k2739F69BF12293678B0D1AA8E05B20A43D5CFC1DF8D6F67600
TABLE_START=#|-k2725A96B15922BCB69A6257516A3822738C764077BDD7E6396EC35
SQL_EXECUTE_BEFORE_EXPORT=#|-k27B3F3EE4EE6ECBED13C51DD893166BBAEAEB1D2AB57F7344F011C42
IF:condizione;istruzione
L'istruzione specificata viene eseguita solo se la condizione è
verificata. La condizione deve essere una condizione booleana contenente gli
operatori = != <
> <= >=
E' possibile raggruppare predicati tra parentesi tonde. E' possibile
usare AND logici (usare il simbolo && ) e OR logici
(simbolo || ). Esempi:
IF:@@QTA=0;SKIP_TABLE
IF:@@QTA=0 && @@POS=1;SKIP_TABLE
IF:(@@QTA=0 && @@POS=1) || @@X > @@Y;SKIP_TABLE
INCLUDE
La clausola INCLUDE, che deve essere
specificata sulla prima colonna della riga, carica all'interno del testo il
contenuto del file specificato.
E' possibile eseguire inclusioni all'interno di files inclusi. Esempio:
INCLUDE=prova.txt
INCLUDE=x:\bin\esportazione\dtx.txt
CAPTION=
Inserire il titolo del formato
di esportazione, ovvero la sua descrizione breve. Il valore inserito sarà
utilizzato, ad esempio, nelle finestre di selezione del formato di esportazione
da utilizzare.
La riga contenente il caption è facoltativa, ma nel caso sia presente DEVE
essere la prima riga del file. Prima del CAPTION non sono ammesse neppure righe
di commento o di qualunque altro genere.
EXPORT_TYPE={JASCII|TEXT}
Questa opzione definisce il tipo di esportazione:- JASCII: esporta in modalità JASCII, che consente una completa reimportazione secondo il formato definito su IMPORTAZIONE in formato JASCII; i files che definiscono exportazioni di tipo JASCII devono contenere un comando FIELDS_START
- TEXT: genera un file di testo, generalmente per uso proprietario (ad esempio: generazione di un file per la stampa di etichette) e non destinato ad una successiva reimportazione; i files che definiscono exportazioni di tipo TEXT devono contenere un comando TEXT
L'opzione è facoltativa; il valore default è JASCII.
MACRO
Il termine MACRO è da intendersi nel senso in cui è usato nel linguaggio C:
ogni occorrenza dell'identificatore di macro viene rigidamente sostituita dal
valore assegnato alla macro. L'unica eccezione a questo comportamento è rappresentata
da eventuali espressioni SQL che vengono interpretate immediatamente (cioè
prima dell'assegnazione).
La definizione delle macro può
avvenire nella sezione di intestazione del file
oppure nell'intestazione di ciascuna table. Le macro definite nell'intestazione
di una tabella hanno valore limitato alla tabella entro cui sono state definite.
Il nome di ogni macro DEVE iniziare con @@ (ad esempio: @@NOME).
Gli oggetti il cui nome inizia con @@ sono macro.
E' possibile effettuare dichiarazioni di macro secondo uno dei seguenti formati:
- @@NOME=valore|§espressione SQL§
- @@NOME=?TIPO;[CAPTION=TITOLO;]QUESTION=DOMANDA[;ANSWER=risposta[|valore]][;OPZIONI]
La prima forma di dichiarazione consiste in una mera
assegnazione di un certo valore alla macro. La seconda forma delle macro è interattiva
in quanto richiede all'utente di indicare una
risposta al momento dell'esportazione dei dati.
La dichiarazione di una macro interattiva deve essere redatta secondo una di queste
sintassi:
-
TIPO può essere:
- TEXT: richiesta di stringa liberamente digitata dall'utente;
- COMBO: scelta (singola) tra un certo numero di risposte predefinite;
- MULTI: scelta multipla tra un certo numero di risposte predefinite
- OPZIONI: vedi riquadro
- CAPTION=TITOLO e QUESTION=DOMANDA sono rispettivamente il titolo della finestra di dialogo e la domanda che sarà posta all'utente. Se racchiusi tra § vengono considerati come espressioni SQL.
- ANSWER=risposta[|valore] è utilizzabile solo se TIPO=COMBO; è una opzione ripetibile; risposta rappresenta il testo della risposta visualizzato nella combo; valore (se indicato) rappresenta il valore che sarà assegnato alla macro (se non indicato tale valore coincide con risposta). Invece della coppia risposta|valore è possibile utilizzare una espressione SQL che deve essere racchiusa tra § e che restituisce i valori utilizzabili nella combo: la prima colonna rappresenta il testo delle risposte, la seconda (opzionale) i corrispondenti valori da assegnare alla macro.
opzioni per tipo = TEXT
|
opzioni per tipo = COMBO
|
opzioni per tipo = MULTI
|
|---|---|---|
OPZIONI comuni a tutti i tipi di macro
|
||
Il valore di tutte le opzioni può essere indicato da una espressione SQL racchiusa tra §. Tale valore viene determinato immediatamente, e non viene espanso ad ogni citazione della macro.
Esempi di dichiarazione di macro interattive:
- @@KEY=?TEXT;CAPTION=Descrizione del documento;QUESTION=Indica la descrizione del documento
- @@KEY=?COMBO;CAPTION=Selezione tipo documento;QUESTION=Seleziona il tipo di documento da esportare;ANSWER=Bolla Fornitore|DDT-CAR-FOR;ANSWER=Ordine cliente|ORD-CLI;ANSWER=Fattura|FAT-VEN
- @@KEY=?COMBO;CAPTION=Selezione tipo documento;QUESTION=Seleziona il tipo di documento da esportare;ANSWER=§SELECT DISTINCT BDOC_str_descrizione, BOL_str_tipo_BDOC FROM temp JOIN bolle ON BOL_lo_key = lo_key KEY JOIN tipi_BDOC§
- @@KEY=?COMBO;CAPTION=Selezione articolo;QUESTION=Seleziona l'articolo da trattare;ANSWER=§SELECT BA_str_articolo || ' ' || BA_str_descrizione,BA_lo_key FROM temp JOIN bolle ON BOL_lo_key = lo_key KEY JOIN bolle_articoli WHERE BA_str_articolo IS NOT NULL ORDER BY BA_i_pos§
L'ordine di interpretazione delle macro è il seguente:
- le macro locali vengono tradotte prima di quelle globali;
- le macro sono interpretate in ordine di definizione.
MACRO PREDEFINITE
Le seguenti macro sono predefinite e sono liberamente utilizzabili:
| NOME | VALORE |
|---|---|
| @@ACAPO | sequenza acapo (#13#10) |
| @@MB_OK | 0 |
| @@MB_CANCEL | 1 |
| @@MB_ YESNO | 2 |
| @@MB_YESNOCANCEL | 3 |
| @@MB_RETRY | 4 |
| @@MB_ICONSTOP | 16 |
| @@MB_ICONQUESTION | 32 |
| @@MB_ICONINFORMATION | 64 |
| @@MB_DEFBUTTON2 | 256 |
| @@MB_DEFBUTTON3 | 512 |
| @@IDOK | 1 |
| @@IDYES | 6 |
| @@IDRETRY | 4 |
| @@IDNO | 7 |
| @@IDCANCEL | 2 |
| @@IDABORT | 3 |
| @@IDIGNORE | 5 |
TEXT_HEADER e TEXT_FOOTER
Definiscono una o più righe di testo che vengono scritte in testa al file prodotto dall'esportazione. Ad esempio:
TEXT_HEADER=SPEED 2.0
TEXT_HEADER=DENSITY 8
TEXT_HEADER=SET CUTTER OFFTEXT_FOOTER=PRINT 1,1
L'opzione può essere utilizzata
sia sull'intestazione del file che sull'intestazione di ciascuna delle tabelle
esportate.
L'opzione è utilizzabile solo se TIPO_EXPORT = TEXT.
OUTPUT_FILENAME_FORMAT
Nome del file di output. Se non specificato viene utilizzato un nome default.
OUTPUT_FILENAME=[{LOCAL|FTP}::]nomefile
Se è attivata l'exportazione su FTP, il file viene automaticamente creato sul
server FTP, o può esserne forzata la creazione su filesystem locale (opzione
"LOCAL::").
Il nome del file può contenere variabili di ambiente del sistema operativo
(esempio: %ProgramFilesDir%, oppure %TEMP%).
Se l'esportazione avviene su filesystem locale, ed il filename è locale
RELATIVO (non assoluto), il file viene creato relativamente a LOCAL_PATH
(se definito).
Se l'esportazione avviene su FTP, viene eventualmente utilizzato FTP_REMOTE_PATH.
In caso di esportazione FTP è consigliabile utilizzare filenames relativi.
Nel nome del file sono inoltre eseguite
le seguenti sostituzioni:
| simbolo |
sostituito da |
|
|---|---|---|
| %d | = | data creazione (YYYYMMDD) |
| %t | = | ora creazione (HHMMSS) |
| %o | = | codice operatore |
| %w | = | nome postazione (workstation) |
Esempio: se oggi è il primo febbraio 2003 e sono le 12:15:44, l' istruzione OUTPUT_FILENAME_FORMAT=EXP_BOLLE_%d_%t.DAT produrrà un nome di file del tipo EXP_BOLLE_20030201_121544.DAT.
FILESYSTEM_LOCAL_PATH
Opzionale. E' il path su cui
vengono salvati i files su filesystem locale (non i files di debug, quelli
generati dall'exportazione).
E' una opzione simnmetrica rispetto a FTP_REMOTE_PATH
e consente di utilizzare filenames (o filepaths) relativi, consentendo di
specificare il path su cui salvare i files locali in modo del tutto analogo a
come è possibile specificare il FTP_REMOTE_PATH.
EMAIL_ADDRESS
Dopo la generazione del file
viene proposta in automatico la spedizione dello stesso all'indirizzo
specificato. Se l'indirizzo viene lasciato vuoto, l'invio via mail sarà
proposto ugualmente e l'indirizzo dovrà essere specificato al momento
dell'invio.
E' possibile indicare più
indirizzi separati da puntoevirgola.
E' possibile ripetere l'opzione: gli indirizzi specificati saranno accodati.
Perchè l'invio avvenga con successo, è necessario configurare i parametri
SMTP.
EMAIL_SUBJECT
EMAIL_SUBJECT=oggetto della notifica
Specifica un 'subject' (oggetto) della che serve per caratterizzare le mail di notifica inviate all'utente. Serve ad esempio per distinguere le notifiche di differenti exportazioni.
CONFIGURAZIONE SMTP
Per configurare l'invio di messaggi via SMTP (posta elettronica) è necessario configurare i seguenti parametri.
SMTP-HOST=
SMTP-FROM=
[SMTP-SENDER-DESCRIPTION=descrizione mittente]
SMTP-AUTH-ID=
SMTP-AUTH-PWD=password
[SMTP-PORT=nnn]
[SMTP-TLS=[YES|NO]]
[SMTP-NEED-AUTHENTICATION=[YES|NO]]
Per proteggere la riservatezza della password (e degli altri parametri, se necessario) è possibile utilizzare stringhe cryptate.
CONFIGURAZIONE FTP
Per configurare una exportazione verso un server FTP, è necessario configurare i seguenti parametri:
FTP-HOST=
FTP-USERNAME=
FTP-PASSWORD=
[FTP_PORT=]
[FTP_PASSIVE={YES|NOT}] (default: NOT)
[FTP_REMOTE_PATH=]
[FTP_SLASH=] (default: \ )
Se viene definita una
configurazione FTP valida, il programma per default esegue l'exportazione di
tutti i files dati sul server FTP (i files di debug vengono comunque salvati su
file system locale). E' possibile sovrascrivere tale impostazione utilizzando
l'apposita opzione del parametro DATAFILE (LOCAL::).
Le regole per determinare il path e i nomi dei files su cui scrivere sono le
stesse valide per i files scritti su file-system locale. Se viene indicata
l'opzione FTP_REMOTE_PATH, i files vengono salvati usando la cartella indicata
come cartella base.
Il meccanismo base di funzionamento dell'exportazione su server FTP è il
seguente: il programma genera dapprima i files localmente, su una cartella
temporanea, e provvede poi a trasmetterli sul canale FTP. Se viene indicata
l'opzione FTP_STORE_PATH, i files exportati vengono spostati sul percorso
specificati, altrimenti vengono semplicemente eliminati dalla cartella
temporanea.
Per proteggere la riservatezza
della password è possibile utilizzare stringhe cryptate.
L'opzione FTP_SLASH consente di specificare il carattere di separazione da
utilizzare nei path. Per sistemi Windows deve essere utilizzato tipicamente il
BACK SLASH \ , per sistemi UNIX/LINUX deve essere utilizzato lo SLASH / . Il
valore default è il BACK SLASH.
SCRIPT_VERSION
Identificativo della versione dello script utilizzato per generare l'output. E' un valore alfanumerico che funge esclusivamente da riferimento.
SQL_EXECUTE_BEFORE_EXPORT
Istruzione SQL che viene
eseguita prima dell'importazione. La clausola può essere ripetuta.
Tale istruzione può essere utile per la preparazione dei dati da esportare.
SQL_EXECUTE_AFTER_EXPORT
Istruzione SQL che viene
eseguita dopo l'importazione. La clausola può essere ripetuta.
Tale istruzione può essere utile per la preparazione dei dati da esportare.
TABLE_START=nome tabella da esportare
Indicare l'inizio del blocco di
istruzioni relative ad una tabella da cui si desidera esportare dati.
Il nome specificato non è necessariamente il nome
della tabella fisica da esportare, ma è estremamente significativo sotto due
aspetti:
- è il nome utilizzato sulla clausola FK nei campi di eventuali tabelle collegate;
- è il nome della tabella che sarà trattata in una eventuale successiva importazione dei dati.
A volte è necessario trattare più volte la stessa tabella nella stessa procedura di esportazione/reimportazione. Poiché è impossibile ripetere l'attributo TABLE_START con lo stesso nome di tabella bisogna utilizzare la clausola TABLE_NAME.
SQL_SELECT
Contiene l'istruzione di selezione dei dati che si desidera esportare.
NB: durante la preparazione
all'esportazione JOLLY carica il riferimento ai dati da esportare sulla table
TEMP.
La primary key dei records da
esportare è caricata su TEMP.STR_CODICE (se testo) oppure TEMP.LO_KEY (se
integer).
In genere si deve perciò
costruire un JOIN con la table TEMP che renda i soli records che si desidera
esportare.
MESSAGE_FIELD
Identifica il record e che viene utilizzata per la generazione di eventuali messaggi relativi a specifici records. Se non indicata, all'occorrenza viene utilizzato il primo campo (o la primary key, se definita). Non può essere un'espressione, deve essere per forza il nome di un campo (oppure può essere un'espressione SQL definita dalla clausola SQL_SELECT.
Esempio:MESSAGE_FIELD = NUMERODOC
EXPORT-ALLEGATO-JOLLY=[filename]
Esporta su filename l'allegato jolly identificato dal campo SQL ALLI_LO_KEY.
La query deve contenere un campo (integer) ALLI_LO_KEY.
filename può contenere macros e/o campi della query SQL. Se filename
non viene indicato, l'allegato viene exportato utilizzando il nomefile
originale.
DATAFILE
Se questa clausola è assente, i
dati vengono scritti sul file principale di esportazione.
Se invece la clausola è presente, i files vengono esportati, privi di qualunque indicazione di formattazione,
sul file specificato. In luogo dei dati, sul file di esportazione principale
comparirà l'indicazione
DATAFILE=[{FTP|LOCAL}::]nomefile
Se privo di path, nomefile sarà
creato sulla cartella default. Se il file indicato esiste già, sarà cancellato
senza alcun avvertimento prima di eseguire l'operazione di esportazione.
Vengono eseguite le stesse sostituzioni valide per OUTPUT_FILENAME_FORMAT.
Nomefile può contenere variabili di ambiente del sistema operativo
(esempio: %ProgramFilesDir%, oppure %TEMP%).
Se è stata definita una valida configurazione FTP, l'exportazione avviene per
default verso il server FTP, ma è possibile forzare l'exportazione su
filesystem locale attraverso l'opzione LOCAL:
DATAFILE=LOCAL::nomefile
DATAFILE=FTP::nomefile
SQL_EXECUTE_AFTER_ROW = espressione SQL
Consente di specificare una espressione SQL che deve essere eseguita subito dopo l'importazione di ogni riga; ogni espressione può occupare una riga. E' possibile indicare il nome di campi della riga, compresi tra coppie di $. L'opzione è ripetibile.
SQL_EXECUTE_AFTER_EXPORT
= espressione SQL
SQL_EXECUTE_BEFORE_EXPORT = espressione SQL
Consente di specificare una espressione SQL che deve essere eseguita al termine/ prima dell'importazione delle righe per la table; non vengono eseguite sostituzioni (salvo le macro, naturalmente). L'opzione è ripetibile.
IMPORT_OPTIONS
Questa clausola specifica una opzione che si desidera venga riportata sul file di output, in modo da poter essere utilizzata durante la successiva eventuale importazione.
Tale opzione non influisce in
alcun modo sul processo di esportazione. La sintassi dell'opzione sarà
valutata al momento dell'importazione.
La clausola può comparire più di una volta, per poter
specificare più opzioni.
Se indicata nella sezione delle opzioni generali, la
clausola sarà riportata nella sezione delle opzioni generali. Se indicata
all'interno di una table, la clausola sarà riportata all'interno della
table.
CHECK | WARNING
Durante l'esportazione viene verificato che
l'espressione SQL specificata sia soddisfatta. Per soddisfatta si intende che
l'espressione deve restituire almeno una riga.
Qualora l'espressione non sia soddisfatta viene emesso un
messaggio e, nel caso di CHECK, viene immediatamente interrotta
l'esportazione.
L'espressione deve essere delimitata da § e può
contenere i campi esportati, delimitati da $. Ad esempio:
CHECK=§SELECT fl_sum(cr_importo) != 0 FROM vendite WHERE lo_key = $LO_KEY$§
WARNING=§SELECT codice FROM aa WHERE codice = '$codice$';ARTICOLO NON ESISTENTE§
L'opzione è disponibile solo se EXPORT_TYPE=JASCII.
FIELDS_START -- SINTASSI DEI CAMPI ESPORTATI
Il comando FIELDS_START (utilizzabile se EXPORT_TYPE=JASCII) inizia la sezione che contiene i campi da exportare. I campi devono essere elencati uno per riga secondo la seguente sintassi:
[nomecampo=]sql_field_name[,tipo[:len[:dec]][*]] [,REM] [,PK] [,FK: table] [,{autoincrement | compute} = §§sql expression§§][--commento]
NOMECAMPO è il nome del campo utilizzato nel file di output.
SQL_FIELD_NAME è il nome del campo nella tabella di origine. Può assumere valori espressi secondo una differente sintassi (vedi valori speciali SQL_FIELD_NAME).
Ogni campo viene esportato nel suo formato naturale, a meno che non gli vengano fornite specifiche istruzioni di formattazione
-
TIPO può essere:
- S string
- B blob [a partire dalla versione 1.02]
- F floating point
- I integer
- C Currency con numero di decimali default (esempio: euro = 2)
- D data, in formato YYYY-MM-DD, default len = 10
- T time, in formato HH:MM:SS, default len=8
- X datetime, data+ora in formato YYYY-MM-DD HH:MM:SS, default len=19
- LEN è la lunghezza del campo; se negativa il campo viene allineato a destra;
- DEC è il numero di decimali da esportare; valido solo per campi floating o currency;
PK indica che la colonna fa parte della Primary Key per la table.
FK indica l'esistenza di una FOREIGN KEY con la table specificata; utilizzare il nome indicato sulla clausola TABLE_START. Non viene eseguito alcun controllo sul nome della tabella referenziata.
NB: le opzioni PK e FK possono essere utili perché caricano sul file esportato informazioni necessarie per il trattamento dei dati.
Per i tipi stringa e blob è possibile utilizzare, in alternativa alla dichiarazione di lunghezza del campo, l'indicatore * (asterisco), che indica che il campo è a lunghezza variabile. Il valore dei campi marcati con l'asterisco viene riportato su righe dati supplementari, in ordine di dichiarazione.
Poiché il
file prodotto dall'esportazione è un file ascii, i campi
BLOB vengono convertiti in sequenze di codici esadecimali (un codice a due
cifre per ogni carattere: ad esempio la
stringa "ABC 123" viene scritta come "41424320313233"). Tale
modalità, benché non particolarmente efficiente od economica, è decisamente comoda perché consente di trattare qualunque tipo di
oggetto in modo semplice e all'interno di un comune file di testo.
Inoltre, per evitare alla radice tutti gli eventuali problemi legati alla
trasmissione dei campi blob (tipicamente molto lunghi e poco mansueti)
attraverso gli strati software di collegamento tra applicazione e database
(BDE, ODBC, ADO, DAO, PIP, URL, ACC, PORC, eccetera), l'importazione di un
campo blob avviene attraverso la seguente stored procedure, che deve
essere disponibile sul database su cui avviene l'importazione:
decodifica_hex(IN @s long varchar) : long binary
che deve accettare in
input la stringa contenente i codici esadecimali e rendere il
corrispondente valore blob (long binary). Ad esempio: decodifica_hex('41424320313233')
= 'ABC123'.
Jolly mette a disposizione anche la funzione opposta, che è la seguente:
codifica_hex(IN @s long binary) : long varchar
In particolare devono essere verificate le seguenti condizioni:
decodifica_hex(codifica_hex( @X )) =
@X
codifica_hex(decodifica_hex( @X )) = @X
La clausola AUTOINCREMENT consiglia di generare un nuovo valore per il campo durante l'importazione (o quanto meno, segnala che ciò è possibile senza particolari problemi, in quanto il campo è una chiave di collegamento priva di valore intrinseco). Per la gestione delle foreign keys, vedi più sotto.
La clausola COMPUTE funziona in modo analogo ad AUTOINCREMENT, ma
il valore che deve essere assunto dal campo viene determinato dall'espressione
indicata. L'espressione sarà valutata al momento dell'importazione. Per
referenziare dei campi della tabella metterli fra coppie di $$ (esempio: $$i_codice$$).
La clausola COMPUTE deve essere usata solo su campi di tipo integer.
La clausola REM fa in modo che il campo venga esportato normalmente, ma la dichiarazione per il dato sul file di output risulti commentata. Serve per quei campi che non possono essere importati nel database di destinazione.
Il commento finale deve iniziare con un doppio trattino ( -- ). Differisce dal commento standard (//) perché viene riportato sul file esportato, mentre il commento standard viene semplicemente e bellamente ignorato.
Valori speciali di SQL_FIELD_NAME
LOCAL QUERY (immediata)
SQL_FIELD_NAME può essere sostituito da una espressione SQL che viene eseguita al momento dell'esportazione. Tale espressione segue le seguenti regole:
- deve essere delimitata da §
- può referenziare campi della tabella in esportazione purché compresi tra $
- deve restituire un solo valore (gli eventuali valori successivi saranno trascurati) del tipo specificato.
Esempio di sintassi per una espressione SQL:
NOMECAMPO=§select str_codice_export FROM pconti WHERE str_codice = '$str_codice$'§,S:-30
LOCAL QUERY (da eseguirsi durante la successiva importazione)
SQL_FIELD_NAME può essere sostituito da una espressione SQL che viene eseguita al momento della eventuale successiva importazione (durante la scrittura dei dati, ovvero dopo aver verificato e deciso che la riga deve essere importata). Tale espressione segue le seguenti regole:
- deve essere delimitata da due coppie di §§ (esempio : §§select pippo from pluto§§ )
- può referenziare campi del record in importazione purché già letti e compresi tra $; i nomi che possono essere referenziati sono i nomi dei campi citati nella definizione di importazione;
- il campo non genera dati, ma solamente una riga
nella definizione della table in importazione.
OS_EXECUTE_BEFORE / OS_EXECUTE_AFTER (esecuzione comando Sistema Operativo)
Durante l'esecuzione dello script di esportazione è possibile eseguire dei
comandi batch (formato BAT o CMD) usando la sintassi: OS_EXECUTE_xxxx=comando.
BEFORE fa eseguire il comando prima dell'esportazione, AFTER dopo che
l'esportazione è terminata.
Il comando può contenere variabili di ambiente del sistema operativo (esempio:
%ProgramFilesDir%, oppure %TEMP%).
MESSAGEBOX
Per emettere un messaggio è possibile usare la sintassi
MESSAGEBOX=TEXT=testo;CAPTION=titolo[;FLAGS=numero]
Il valore FLAGS=NUMERO può essere assegnato attraverso le comode macro predefinite (@@ICONQUESTION, @@ICONSTOP, ....). E' equivalente al corrispondente parametro della funzione MessageBox() di Windows (mettere in OR i valori per combinarli tra loro):
OK = 0
CANCEL = 1
YESNO = 2
RETRY = 4
ICONSTOP = 16
ICONQUESTION = 32
ICONINFORMATION = 64
DEFBUTTON2 = 256
DEFBUTTON3 = 512
Se l'opzione FLAGS non è indicata, il valore utilizzato è MB_OK. Se l'utente fornisce alla MessageBox() una risposta diversa da IDOK, IDRETRY e IDYES l'operazione di esportazione viene interrotta.
ABORT
Interrompe l'esportazione emettendo un messaggio di errore.
ABORT=TEXT=testo;CAPTION=titolo
SKIP_TABLE=condizione
La tabella NON viene esportata. Questa clausola viene solitamente usata insieme alla clausola IF.
TEXT
La clausola TEXT (utilizzabile se EXPORT_TYPE=TEXT) indica l'inizio della sezione in cui deve essere indicato il testo da scrivere sul file per ciascuno dei records esportati. Il testo può contenere riferimenti campi della query, che devono essere racchiusi tra coppie di $. La sezione viene chiusa dalla clausola TABLE_END. Ad esempio
[...]
TEXT
TEXT 10,50,"3",0,1,1,"$$BA_str_articolo$$",
BOX 24,121,700,571,3
BARCODE 38,825,"EAN128",33,1,0,2,2,"ABCX"
PRINT 1,$$BA_fl_qta$$
TABLE_END
SERVICE
Il comando attivà la modalità di funzionamento in modalità "servizio" (anche se il programma tipicamente non viene lanciato propriamente come servizio, ma piuttosto attraverso le Operazioni Pianificate). Vengono escluse tutte le interazioni con l'utente. Gli errori vengono emessi (anche) sul registro degli eventi.
SKIP_END_OF_WORK_MESSAGEBOX
Al termine dell'esportazione normalmente il programma mostra un messaggio di riepilogo delle operazioni eseguite e chiede all'utente se desidera vedere il file generato. Specificando l'opzione SKIP_END_OF_WORK_MESSAGEBOX tale messaggio non viene mostrato (a meno che non vi siano segnalazioni di errore o anomalia).
USE_STORED_PROCEDURE
Valori ammessi: ON, OFF. Default: ON.
Se l'opzione è attiva il programma carica tutti i comandi di esportazione su
una table transitoria (SQL_batch) e quindi una stored procedure (exec_SQL_batch())
per eseguirli. Questa modalità è utile in certi casi particolari per trattare
dati che altrimenti creerebbero problemi di esecuzione.
DBS
DBS, ovvero DataBase System, indica il database su cui si sta operando.
I possibili valori sono ASA (Adaptive Server Anywhere), SQLSERVER, OTHER.
Il default è ASA.
PLAINTEXT
PLAINTEXT=[filename]
Esporta la versione finale del file contenente le istruzioni di esportazione,
dopo la risoluzione di tutte le macro e di tutti gli include e di tutte le
pre-elaborazioni.
Se filename non è specificato, usa il nome del file del formato di exportazione
e appone l'extensione ".DEBUG".
Filename può contenere variabili di ambiente del sistema operativo
(esempio: %ProgramFilesDir%, oppure %TEMP%).
DEBUG
DEBUG=[filename]
Scrive sul file specificato informazioni di trace-debugging legate
all'esecuzione dell'exportazione e ad eventuali errori.
Se filename non è specificato, usa il nome del file del formato di exportazione
e appone l'extensione ".TXT".
DEBUG_PATH
DEBUG_PATH=filepath
Consente di determinare il default path su cui vengono salvati tutti i files di debug
(opzioni DEBUG, LOG_SQL_EXPORT
e eventuali altre).
L'opzione deve essere specificata PRIMA dell'opzione di attivazione della
modalità di debug.
Se nel nome del file di debug è stato specificato un path esplicito, viene
comunque utilizzato tale path (e ignorato il path specificato sulla presente
opzione).
Se questa opzione non viene specificata, i files di debug vengono salvati per
default sulla
cartella "documenti" locale, per garantire che l'utente abbia i necessari diritti
di scrittura e modifica.
LOG_SQL_EXPORT
LOG_SQL_EXPORT=[filename]
Esporta le istruzioni SQL che hanno generato l'export sul file specificato.
Se filename non è specificato, usa il nome del file del formato di exportazione
e appone l'extensione ".SQL".
Filename può contenere variabili di ambiente del sistema operativo
(esempio: %ProgramFilesDir%, oppure %TEMP%).
FUNZIONI E COSTANTI
In luogo del nome di campo possono essere utilizzate le seguenti espressioni:
| simbolo | significato |
|---|---|
| @NULL | valore NULL |
| @BLANK | stringa vuota (in realtà: riempita di spazî) |
| @TODAY | funzione TODAY() |
| @NOW | funzione NOW() |
| @NUMERO | referenzia NUMERO |
| @'STRINGA' | referenzia STRINGA |
Pagina base del manuale di JOLLY IMPORTAZIONE in formato JASCII