Visual Tool Guide
COPYRIGHT
1989 - 2005 by ZUCCHETTI S.p.A.
Tutti i diritti riservati.
Questa pubblicazione contiene informazioni protette da copyright. Nessuna parte di questa
pubblicazione può essere riprodotta, trascritta o copiata senza il permesso dell'autore.
TRADEMARKS
Tutti i marchi di fabbrica sono di proprietà dei rispettivi detentori e vengono riconosciuti in
questa pubblicazione.
ZUCCHETTI S.p.A.
E-mail: [email protected]
Indirizzi sito WEB:
http:\\www.zucchettitools.com
http:\\www.codepainter.com
V I S U A L
T O O L
G U I D E
Sommario
Introduzione......................................................................................... 1
1.1
I tool visuali ............................................................................................ 1
Visual Query ........................................................................................ 3
2.1
Introduzione ............................................................................................ 3
2.2
Il tool ....................................................................................................... 3
2.2.1 La toolbar di utilità........................................................................................ 4
Nuovo..................................................................................................................... 5
Apri ........................................................................................................................ 5
Salva....................................................................................................................... 5
Salva come ............................................................................................................ 5
Esci......................................................................................................................... 5
Esegue Query ......................................................................................................... 5
Frase SQL .............................................................................................................. 6
Crea/Modifica Report ............................................................................................ 6
Crea/Modifica mailmerge ...................................................................................... 7
Crea/Modifica foglio Excel.................................................................................... 8
Crea/Modifica Grafico ......................................................................................... 12
2.2.2 La zona Dictionary ...................................................................................... 15
Tables................................................................................................................... 15
Fields of... ............................................................................................................ 17
Relations of... ....................................................................................................... 17
Find ...................................................................................................................... 17
2.2.3 La zona Design............................................................................................ 18
2.2.4 La zona Query ............................................................................................. 19
Tables................................................................................................................... 19
Fields, Group By and Order By ........................................................................... 20
Join....................................................................................................................... 23
Filter..................................................................................................................... 25
Filter Parameters .................................................................................................. 28
Note...................................................................................................................... 30
2.2.5 Expression Builder ...................................................................................... 31
2.2.6
Le funzioni SQL.......................................................................................... 33
S O M M A R I O
I
V I S U A L
T O O L
G U I D E
Funzioni di conversione ....................................................................................... 34
Funzioni su stringhe ............................................................................................. 34
Funzioni su date ................................................................................................... 34
Le funzioni di insieme.......................................................................................... 35
Altre funzioni ....................................................................................................... 35
2.2.7 Il disegno di una query ................................................................................ 37
2.2.8
2.3
2.3.1
Composizione del tool................................................................................. 42
L'integrazione di una query nelle applicazioni...................................... 43
Query multifile e Autozoom visuale ........................................................... 44
2.3.2 Query multifile e Reporting......................................................................... 47
La maschera di selezione ..................................................................................... 48
La realizzazione della query................................................................................. 49
La creazione/modifica della stampa ..................................................................... 50
La realizzazione del modello con MS Word ........................................................ 51
L'esecuzione dell'esempio .................................................................................... 56
2.3.3 Query multifile con maschera di selezione interpretata .............................. 57
2.3.4
2.4
Query e programmi batch ............................................................................ 59
Limitazioni dell'accesso al tool delle Visual Query .............................. 60
Visual Mask .......................................................................................61
3.1
Introduzione........................................................................................... 61
3.2
Il tool ..................................................................................................... 61
3.2.1 La toolbar di utilità ...................................................................................... 62
Nuovo................................................................................................................... 63
Apri ...................................................................................................................... 63
Salva..................................................................................................................... 63
Salva come ... ....................................................................................................... 63
Esci....................................................................................................................... 64
Opt........................................................................................................................ 64
Stringa .................................................................................................................. 64
Variabile............................................................................................................... 65
Radio Button ........................................................................................................ 68
Combobox ............................................................................................................ 70
CheckBox............................................................................................................. 71
Bottone ................................................................................................................. 72
Immagine bitmap ................................................................................................. 73
Taglia ................................................................................................................... 74
Copia .................................................................................................................... 74
Incolla................................................................................................................... 74
3.2.2 Il disegno di una maschera .......................................................................... 74
3.2.3
3.3
I I
Composizione del tool................................................................................. 77
L'integrazione di una maschera nelle applicazioni................................ 77
3.3.1
Maschere visuali e Query Multifile ............................................................. 78
3.3.2
Maschere visuali e programmi batch........................................................... 78
3.3.3
Maschere visuali per il lancio di programmi ............................................... 78
S O M M A R I O
V I S U A L
3.3.4
3.4
T O O L
G U I D E
Maschere visuali di Default, di Utente, di Gruppo...................................... 79
Limitazioni dell'accesso al tool delle maschere .................................... 81
Visual Zoom....................................................................................... 83
4.1
Introduzione .......................................................................................... 83
4.2
Il tool ..................................................................................................... 83
4.2.1 La toolbar di utilità...................................................................................... 84
Nuovo................................................................................................................... 84
Apri ...................................................................................................................... 84
Salva..................................................................................................................... 85
Salva come .......................................................................................................... 85
Esci....................................................................................................................... 85
Table .................................................................................................................... 85
Opzioni................................................................................................................. 86
4.2.2 La zona di visualizzazione .......................................................................... 86
Le opzioni della colonna...................................................................................... 87
4.2.3 La zona di configurazione ........................................................................... 88
La zona di selezione............................................................................................. 89
La zona d'ordinamento......................................................................................... 90
La zona dei campi ................................................................................................ 90
La zona SQL ........................................................................................................ 90
La zona File ......................................................................................................... 91
4.2.4 La zona utente ............................................................................................. 92
Richiesta parametri .............................................................................................. 93
Configurazioni ..................................................................................................... 93
Esegue Report ...................................................................................................... 93
Riesegue Interrogazione....................................................................................... 93
4.2.5 Il disegno di uno zoom ................................................................................ 93
4.2.6
4.3
Composizione del tool................................................................................. 94
L'integrazione di uno zoom visuale nelle applicazioni ......................... 95
4.3.1
Visual Zoom e bottoni................................................................................. 95
4.3.2
Visual Zoom con selezione ......................................................................... 95
4.3.3
Visual Zoom lanciati da menu .................................................................... 97
4.3.4
Visual Zoom lanciati da batch..................................................................... 97
4.4
Limitazioni dell'accesso al tool degli zoom .......................................... 97
Visual Menù ....................................................................................... 99
5.1
Introduzione .......................................................................................... 99
5.2
Menù Differenziali .............................................................................. 100
5.3
Menù Personalizzati ............................................................................ 103
5.4
Il tool ................................................................................................... 104
S O M M A R I O
I I I
V I S U A L
T O O L
G U I D E
5.4.1 La toolbar di utilità .................................................................................... 105
Nuovo................................................................................................................. 105
Apri .................................................................................................................... 105
Salva................................................................................................................... 105
Salva come ... ..................................................................................................... 105
Esci..................................................................................................................... 106
5.4.2 La treeview del menù di default ................................................................ 106
I bottoni della treeview di default ...................................................................... 107
5.4.3 La treeview del menù di sinistra................................................................ 110
I bottoni della treeview di sinistra ...................................................................... 111
L'eliminazione di una voce di menù................................................................... 112
5.4.4 Le Proprietà delle voci............................................................................... 112
Titolo.................................................................................................................. 113
Bitmap ................................................................................................................ 113
Percorso.............................................................................................................. 113
Posizione ............................................................................................................ 113
Cancellato........................................................................................................... 114
Procedura ........................................................................................................... 114
Attivazione ......................................................................................................... 114
Abilitato ............................................................................................................. 114
I V
5.5
Visual menù, salvataggi e gestione utenti ........................................... 114
5.6
Esempi ................................................................................................. 115
5.6.1
Come inserisco una nuova voce al menù principale?................................ 115
5.6.2
Come cancello una nuova voce dal menù principale?............................... 117
5.6.3
Come sposto una voce dal menù principale?............................................. 119
S O M M A R I O
V I S U A L
T O O L
G U I D E
Capitolo 1
Introduzione
1.1 I tool visuali
Le applicazioni a carattere gestionale si compongono essenzialmente di programmi che si
occupano dell'inserimento di dati e di altri che hanno come obiettivo l'elaborazione, il
reporting e l'interrogazione delle informazioni.
Queste problematiche costituiscono a livello applicativo la parte più consistente, che è
soggetta ad innumerevoli mutamenti ed integrazioni in base alle diverse esigenze dell'utenza.
Risulta pertanto essenziale disporre di potenti strumenti che consentono di renderle
indipendenti e, quindi, non codificate all'interno delle procedure.
CODEPAINTER REVOLUTION affronta le diverse problematiche di creazione e
configurazione delle parti soggette a cambiamento mettendo a disposizione i tool di Visual
Query, Visual Zoom, Visual Mask, Visual Report (integrato nel tool di Visual Query) e Visual
Menu.
I N T R O D U Z I O N E
1
V I S U A L
T O O L
G U I D E
Capitolo 2
Visual Query
2.1 Introduzione
Il Visual Query, sfruttando a fondo l'SQL, è un potente strumento di query e reporting
multifile, che in ambiente Client/Server consente di sostituire completamente gli strumenti
sinora utilizzati, garantendo indipendenza e versatilità. Con questo tool sono definibili query
multifile che possono essere richiamate e utilizzate all'interno delle applicazioni per ottenere
particolari estrazioni dati (procedure batch), visualizzazioni (Visual Zoom) e/o evolute
funzioni di reporting.
Il sistema non produce codice da compilare o interpretare, ma complesse frasi SQL che
risultano essere una componente dell'applicazione ospite, che può essere modificata o
implementata a piacimento, conferendo alle applicazioni un elevato grado di versatilità e
manutenibilità.
Il tool di Visual Query è strettamente integrato con il Data Dictionary dell'applicazione per
guidare l'utente evoluto in complesse interrogazioni anche senza conoscere a fondo la
struttura dell'applicativo. Questa correlazione è essenziale per rendere semplice l'utilizzo di
questo potente sistema.
2.2 Il tool
L'attivazione del tool si ottiene selezionando dal menu utility dell'applicazione la voce
"Disegnatore Query".
Il tool è composto da una toolbar e da tre zone distinte: Dictionary, Design e Query.
V I S U A L
Q U E R Y
3
V I S U A L
T O O L
G U I D E
Figura 1 - Le zone
del Visual Query
Nella zona Dictionary è presentato l'elenco delle tabelle (file), dei campi e delle relazioni che
compongono il dizionario dati.
Nella zona Design sono rappresentate graficamente le relazioni tra le tabelle (file) selezionate.
La zona è una mera rappresentazione grafica della nostra query e viene utilizzata solo per
visualizzare le tabelle e le relazioni coinvolte.
Nella zona Query è possibile definire le opzioni avanzate della frase SQL che compone la
query. La zona risulta suddivisa in diversi tab-strip che in parte consentono di definire le
opzione della frase SQL ed in parte le opzioni per eventuali parametri di filtro.
2.2.1 La toolbar di utilità
La toolbar, che viene attivata insieme al tool, contiene una serie di bottoni che rendono più
agile l'interazione con lo strumento. Nella tabella che segue sono rappresentati i bottoni, il
loro nome e l'azione corrispondente.
BOTTONE
4
V I S U A L
NOME
AZIONE
Nuovo
Apre una nuova query (.VQR).
Apri
Apre un query esistente (.VQR).
Salva
Salva la query corrente.
Salva come ...
Salva la query corrente con un nome diverso
(massimo 8 caratteri).
Esci
Esce tornando all'applicazione.
Q U E R Y
V I S U A L
BOTTONE
T O O L
G U I D E
NOME
AZIONE
Esegue Query
Esegue la query.
Frase SQL
Visualizza la frase SQL.
Crea/Modifica Report
Crea/Modifica la stampa del risultato della
query.
Crea/Modifica Mailmerge
Crea/Modifica il modello per il mailmerge di
MS Word.
Crea/Modifica foglio Excel
Crea/Modifica il modello Excel con i dati della
query.
Crea/Modifica Grafico
Crea/Modifica il modello del grafico di MS
Graph con i dati della query.
Nuovo
Ripulisce la memoria e apre una nuova query.
Apri
Apre un query esistente.
Selezionando il bottone viene attivata la maschera di 'Apri' in cui è visualizzata la directory di
lavoro con la lista delle query (estensione .VQR).
Salva
Salva la query corrente.
Salva come ...
Salva la query corrente con un nome diverso.
Nota Bene
Il nome della query deve essere al massimo di otto caratteri.
È sempre possibile salvare la query all'interno della sottodirectory "Query" creata dall'utente. Il sistema,
in fase di disegno, ricercherà anche in questa particolare sottodirectory i file con estensione .VQR. Nel
momento del lancio della query da un programma, è però necessario prefissarla con la path corretta. Ad
esempio, dovendo lanciare la query "prova", contenuta nella sottodirectory "Query", si dovrà utilizzare la
sintassi "Query/prova.VQR" per permettere al sistema di trovare il file indicato.
Esci
Esce tornando all'applicazione.
Esegue Query
Esegue la query.
In questo caso il risultato della query viene scaricato in un cursore temporaneo (__TMP__) e
viene visualizzato nella browse "View Query".
V I S U A L
Q U E R Y
5
V I S U A L
T O O L
G U I D E
Nota Bene
Raccomandiamo di preparare la query sempre in modo incrementale; si seleziona un file, si inseriscono i
criteri di selezione e si testa la query (Esegue Query). Si inserisce un altro file, altri criteri e si fa di nuovo
il test (Esegue Query). Questo modo di procedere consente di avere sempre la situazione sotto controllo: è
così possibile verificare passo a passo il risultato per valutare la correttezza dei criteri di selezione e del
risultato ottenuto.
Frase SQL
Visualizza la frase SQL.
Attraverso questa opzione è possibile verificare la correttezza sintattica della frase SQL.
Figura 2 - La
maschera 'SQL
Statement'
Nota Bene
Attenzione: questo controllo è solo sintattico; non è possibile controllare la semantica della frase in quanto
strettamente dipendente dal tipo di estrazione che si vuole ottenere.
Crea/Modifica Report
Crea/Modifica la stampa del risultato della query.
La selezione dell'opzione lancia il tool dei report del linguaggio utilizzato in due diversi modi.
Se non esiste un report associato alla query, la prima volta che si lancia la stampa viene
proposto il prototipo del report, che può essere modificato e salvato con lo stesso nome
della query.
Le volte successive (cioè se esistono i file <NomeQuery>.FRX e <NomeQuery>.FRT), la selezione
dell'opzione "Crea/Modifica Report" richiama il tool dei report aprendo la stampa con lo
stesso nome della query.
La pressione del tasto destro su questo bottone attiva la finestra di 'Open' per la
selezione/creazione di ulteriori report (*.FRX).
6
V I S U A L
Q U E R Y
V I S U A L
T O O L
G U I D E
Figura 3 - La
finestra di apertura
di un Report
Se nella zona 'Nome File' si inserisce un nome diverso da quello della query, verrà creato il
prototipo per il nuovo report con il nome assegnato. In questo modo è possibile associare
più report alla stessa query.
Nota Bene
Se alla query si associano più report, la chiamata alla query deve essere fatta utilizzando la seguente
sintassi:
VX_EXEC with "<NomeQuery>.VQR",<SPACE> ["<NomeReport>.FRX"] [PREVIEW]
Crea/Modifica mailmerge
Crea/modifica il modello del documento per il mailmerge con MS Word.
La selezione lancia MS Word e crea un modello per il mailmerge con lo stesso nome della
query ed estensione .DOC.
La pressione del tasto destro su questo bottone attiva la finestra di 'Open' per la
selezione/creazione del file (*.DOC).
V I S U A L
Q U E R Y
7
V I S U A L
T O O L
G U I D E
Figura 4 - La
finestra di apertura
di un documento
MS Word
Se nella zona 'Nome File' si inserisce un nome diverso da quello della query, verrà creato un
documento Word con il nome assegnato.
In questo modo è possibile associare più modelli alla stessa query.
Nota Bene
Se alla query si associano più modelli, la chiamata alla query deve essere fatta utilizzando la seguente
sintassi:
VX_EXEC with "<NomeQuery>.VQR",<SPACE> ["<NomeModello>.DOC"]
Il modello può essere reimpaginato per adattarsi alle più disparate esigenze (es. stampa di
etichette, di buste, di documenti preformattati in base a un determinato protocollo, ecc.).
Il database di appoggio per il mailmerge (__WORD__.DBF e FPT) viene creato nella
directory temporanea di Windows (generalmente corrispondente all'assegnazione
TEMP=C:\WINDOWS\TEMP).
In fase di esecuzione viene aperto il modello <NomeQuery>.DOC ed eseguito il mailmerge dei
dati creando di default il file CATALOGO1.DOC che può poi essere stampato e salvato.
È possibile utilizzare le diverse tipologie di mailmerge messe a disposizione da Word in fase
di definizione del modello (ad esempio è possibile eseguire il mailmerge direttamente su
documenti di posta elettronica selezionando nella maschera di 'stampa unione' l'opzione
'Posta elettronica').
Crea/Modifica foglio Excel
Crea/modifica il modello del documento di Excel.
La selezione lancia MS Excel e crea un modello di foglio con lo stesso nome della query ed
estensione .XLT.
8
V I S U A L
Q U E R Y
V I S U A L
T O O L
G U I D E
La pressione del tasto destro su questo bottone attiva la finestra di 'Open' per la
selezione/creazione del file (*.XLT).
Figura 5 - La
finestra di apertura
di un documento
MS Excel
Se nella zona 'Nome File' si inserisce un nome diverso da quello della query, verrà creato un
documento Excel con il nome assegnato. In questo modo è possibile associare più modelli
alla stessa query.
Nota Bene
Se alla query si associano più modelli, la chiamata alla query deve essere fatta utilizzando la seguente
sintassi:
VX_EXEC with "<NomeQuery>.VQR",<SPACE> ["<NomeModello>.XLT"]
oppure:
VE_EXEC with "<NomeModello>.XLT",<SPACE>
<puntatore all'oggetto chiamante>,<SPACE> "<NomeQuery>.VQR"
dove per puntatore all'oggetto chiamante si intende la referenza al form su cui si vuole visualizzare il
grafico (es. 'This', 'This.oParentObject', ecc.).
Nota Bene
È necessario assicurarsi di non utilizzare nomi di campi uguali alle celle di Excel (es.: A1, A2, ...,
N10, ..., Z99, ecc.) per evitare l'insorgere di errori da parte del sistema di Excel.
Una volta aperto MS Excel verranno creati due documenti: uno sarà il modello prototipale, il
secondo, completato con i dati della query, costituirà una sorta di preview, che utilizza lo stile
del modello.
Se alla query si associa un report, in fase di esecuzione (lanciando cioè VQ_EXEC with
verrà sempre presentato un preview della stampa. L'utente dovrà
<NomeQuery> PREVIEW)
V I S U A L
Q U E R Y
9
V I S U A L
T O O L
G U I D E
quindi lavorare soltanto sul modello del documento, con estensione XLT. Ogni modifica
apportata allo stesso verrà poi riflessa nel documento di Excel vero e proprio.
Analizziamo ora la composizione del documento modello di Excel.
Figura 6 - Un
modello di
documento Excel
generato
Nella prima riga disponibile del foglio sono stati inseriti i nomi degli alias dei campi
selezionati. È poi presente una zona delimitata dalle due caption "BODY" e "ENDBODY"
in cui il sistema andrà ad inserire direttamente le singole tuple, risultato della query. È
necessario non cancellare queste due righe per consentire al sistema di inserire correttamente
i valori.
A questo punto l'utente è in grado di apportare tutte le modifiche desiderate al fine di
ottenere il risultato ricercato, ricordandosi che soltanto le righe tra gli identificatori "BODY"
e "ENDBODY" verranno prese in considerazione e ripetute per ogni valore estratto dalla
query.
Salvando il modello "XLT" ogni volta che dalla query corrispondente verrà lanciato l'oggetto
Excel, sarà creato un foglio e utilizzando lo stile del modello.
Esempio
Utilizziamo una semplice anagrafica degli articoli contenente tre campi:
"Codice", "Descrizione" e "Prezzo". Creiamo una query, che estrae
direttamente tutti i valori dell'archivio. Selezioniamo quindi tutti i campi
ed inseriamo come alias dei campi i valori "CODICE", "DESCRIZIONE" e
"PREZZO".
1 0
V I S U A L
Q U E R Y
V I S U A L
T O O L
G U I D E
Figura 7 Creazione di una
query
Salviamo la query creata con il nome "LIS_ART.VQR" e clicchiamo sul
bottone "Excel" per lanciare la generazione automatica di un foglio
prototipale. Comparirà un messaggio di attesa in alto a destra e, dopo
pochi secondi, verrà aperto Excel.
Al suo interno verranno creati due fogli: il modello e il documento.
Quest'ultimo verrà riempito automaticamente dal sistema con i valori
provenienti dalla query.
Figura 8 - Il
documento Excel
appena generato
con il relativo
modello
Il prototipo del documento creato è molto semplice: troviamo
l'indicazione dei nomi dei campi, i relativi valori ed un campo di totale.
Apportiamo quindi alcune modifiche al modello (LIS_ART.XLT), modifiche
che verranno utilizzate anche nelle successive interrogazioni.
Aumentiamo innanzitutto la larghezza delle celle in modo da contenere
completamente le caption delle colonne.
Utilizziamo inoltre un colore di sfondo diverso per la prima riga e per il
totale, in modo da distinguerle dal corpo contenente i dati.
Posizioniamoci sulla cella del totale ed inseriamo una doppia riga in alto
utilizzando la barra dei bordi, in modo da identificare la fine del corpo.
Utilizziamo i bordi anche sull'intestazione e sul corpo in modo da
dividere le celle e rendere più comprensibile il tutto.
V I S U A L
Q U E R Y
1 1
V I S U A L
T O O L
G U I D E
Al termine di queste operazioni il risultato dovrebbe essere simile a
quello rappresentato nella figura successiva.
Figura 9 - Il
modello di
documento Excel
rifinito
Salvando il file "XLT" e rilanciando l'oggetto Excel dal tool di Visual
Query, il sistema rigenererà il documento ottenendo un risultato simile
al seguente:
Figura 10 - Il
documento Excel
finale
Crea/Modifica Grafico
Crea/modifica il modello del grafico di MS Graph.
La selezione del bottone lancia MS Graph e crea un modello di grafico con lo stesso nome
della query ed estensione .VGR.
La pressione del tasto destro su questo bottone attiva la finestra di 'Open' per la
selezione/creazione del file (*.VGR).
1 2
V I S U A L
Q U E R Y
V I S U A L
T O O L
G U I D E
Figura 11 - La
finestra di apertura
di un oggetto MS
Graph
Se nella zona 'Nome File' si inserisce un nome diverso da quello della query, verrà creato un
grafico con il nome assegnato. In questo modo è possibile associare più grafici alla stessa
query.
Nota Bene
Se alla query si associano più grafici, la chiamata alla query deve essere fatta utilizzando la seguente
sintassi:
VX_EXEC with "<NomeQuery>.VQR",<SPACE> ["<NomeModello>.VGR"]
Una volta aperto MS Graph, verrà creato un grafico prototipale, con la relativa toolbar che
permette di interagire e modificare la struttura del grafico ed il "Datasheet View" che mostra
i campi selezionati.
L'utente è in grado di apportare tutte le modifiche desiderate al fine di ottenere il risultato
ricercato. Ogni variazione di valore dei dati considerati all'interno del grafico verrà riflessa nel
grafico, che cambierà aspetto e forma.
Esempio
Utilizziamo la stessa query dell'esempio precedente, ma questa volta
clicchiamo sul bottone "Grafico" per lanciare MS Graph.
Dopo pochi secondi apparirà la toolbar di MS Graph, una finestra
contenente il prototipo del grafico ed una finestra contenente i dati da
rappresentare.
V I S U A L
Q U E R Y
1 3
V I S U A L
T O O L
G U I D E
Figura 12 - Il tool
MS Graph
A questo punto è possibile iniziare ad apportare le modifiche al grafico
prototipale. Notiamo che il primo campo selezionato nella query viene
utilizzato per identificare i valori da rappresentare all'interno del
grafico, mentre i restanti campi costituiscono i rispettivi valori sugli
assi.
Utilizzando gli strumenti offerti da MS Graph sarà poi possibile cambiare
tipo di grafico, colori delle colonne, aggiungere stringhe ed immagini.
Figura 13 Esempio di grafico
generato
Modificando i valori contenuti nella finestra "Datasheet" verranno
modificate in corrispondenza anche le rappresentazioni nel grafico,
questi valori non verranno però salvati ed utilizzati nelle query
successive, ma si lavorerà sempre sui dati realmente contenuti negli
archivi su cui si effettuano le query.
Cliccando due volte sull'intestazione della colonna è possibile
disabilitare/abilitare la visualizzazione dei dati della colonna stessa,
tramite un procedimento analogo è possibile visualizzare o meno i dati
relativi alle righe.
Una volta raggiunto il risultato desiderato, è sufficiente salvare il file
del grafico per poter utilizzare il layout personalizzato nelle successive
interrogazioni della query.
1 4
V I S U A L
Q U E R Y
V I S U A L
T O O L
G U I D E
Per effettuare il salvataggio è necessario cliccare sul bottone di
chiusura della finestra del grafico e confermare cliccando su "Si" nella
finestra che apparirà a video.
2.2.2 La zona Dictionary
In questa zona viene presentato l'elenco delle tabelle (file), dei campi e delle relazioni che
compongono il dizionario dati.
Figura 14 - La zona
Dictionary
Tables
Elenco delle tabelle (file) dell'applicazione.
Evidenziando una voce dell'elenco vengono presentati i campi ("Fields of") e le relazioni
("Relation of") della tabella in questione.
La selezione di una tabella (file) può avvenire in tre diversi modi:
Drag & Drop
Mantenendo premuto il tasto sinistro del mouse e trascinando la tabella (file) selezionata
nella zona "Design".
Doppio Click
Clickando due volte sull'elemento selezionato.
Bottone ADD
Mediante questo bottone, posto sopra la zona 'Table', è possibile selezionare una query il
cui risultato può essere utilizzato come nuova tabella.
V I S U A L
Q U E R Y
1 5
V I S U A L
T O O L
G U I D E
Figura 15 Selezione della
query come tabella
Una volta selezionata la query questa compare nelle 'Table' coi rispettivi campi.
Figura 16 - La
tabella relativa a
'Articoli.VQR'
Le tabelle (file) inserite compariranno anche nella zona "Query - Tables") e viceversa.
Nel caso si selezioni una tabella che è in relazione con una o più tabelle precedentemente
selezionate viene attivata la finestra "Relations". Qui sono elencate le relazioni, i campi di
collegamento e le tipologie di Join tra la tabella selezionata e quelle già inserite nella query. In
questo punto è possibile specificare se mantenere o meno il tipo di Join. Infatti, clickando
1 6
V I S U A L
Q U E R Y
V I S U A L
T O O L
G U I D E
una volta su una delle relazioni, nell'ultima colonna a destra appare la dicitura 'Exclude' che
indica al tool di non considerare la Join per quella relazione.
Nota Bene
Il fatto che non venga specificato nessun tipo di Join indica che con la tabella selezionata verrà eseguita una
Natural Join (o Prodotto Cartesiano).
Fields of...
Elenco dei campi della tabella (file) evidenziato nella zona "Table".
La selezione di un campo della tabella (file) evidenziata può avvenire in due diversi modi:
Drag & Drop
Mantenendo premuto il tasto sinistro del mouse e trascinando il campo della tabella
selezionata nella zona "Design".
Doppio Click
Clickando due volte sull'elemento selezionato.
I campi inseriti vengono assegnati alla tabella di appartenenza e compaiono anche nella zona
"Query - Fields, Group By Order By"). Nel caso si cerchi di inserire un campo già presente
viene visualizzato un messaggio di conferma dell'operazione.
Relations of...
Elenco delle relazioni della tabella (file) evidenziata. Affianco al nome del file è presentata tra
parentesi la descrizione del campo di collegamento.
La selezione di una relazione può avvenire in due diversi modi:
Drag & Drop
Mantenendo premuto il tasto sinistro del mouse e trascinando la relazione nella zona
"Design".
Doppio Click
Clickando due volte sulla relazione evidenziata.
La relazione inserita farà comparire la tabella collegata e il legame nella zona "Design".
Analogamente, nella zona "Query" sono riportati la tabella collegata (in "Query - Tables") e il
legame (in "Query - Join").
Find
Consente di ricercare le tabelle collegate alla tabella specificata.
Questa opzione viene utilizzata per ricercare relazioni 'particolari' tra tabelle.
Vediamo di spiegare meglio questo concetto con un esempio.
Esempio
Voglio fare un'interrogazione per estrarre tutti gli agenti che lavorano in
una determinata zona. Ovviamente, i file coinvolti nella query saranno il
file degli Agenti e il file delle Zone. A priori però, non conosciamo se
esiste un collegamento diretto tra i due file oppure se per ritrovare gli
agenti si devono percorrere collegamenti diversi. Proprio per questo
possiamo sfruttare "Find", che ci presenterà i possibili collegamenti tra i
due file.
V I S U A L
Q U E R Y
1 7
V I S U A L
T O O L
G U I D E
La ricerca viene effettuata seguendo i collegamenti (Link) dell'analisi e
si sviluppa per cerchi concentrici a partire dalla tabella di origine. Il
risultato viene presentato nella finestra "Find Relations" per livelli: il
primo livello indica un legame diretto tra le tabelle, il secondo livello
indica che per raggiungere la tabella di destinazione si deve passare per
una tabella intermedia e così via.
From Table
Indica la tabella d'origine della ricerca.
To Table
Indica la tabella di destinazione della ricerca.
Find
Lancia la ricerca. Il risultato è presentato nella stessa finestra sotto forma d'elenco di relazioni
ritrovate.
2.2.3 La zona Design
In questa zona sono rappresentate graficamente le relazioni tra le tabelle (file) ed i relativi
campi selezionati.
La zona è una mera rappresentazione grafica delle componenti della query utilizzata solo per
visualizzare le tabelle e le relazioni coinvolte. Clickando su una delle tabelle è possibile
visualizzarla nella prima zona (Dictionary).
Figura 17 - La zona
Design
1 8
V I S U A L
Q U E R Y
V I S U A L
T O O L
G U I D E
2.2.4 La zona Query
In questa zona è possibile definire le opzioni avanzate della frase SQL che compone la query.
È suddivisa in sei parti, che descriviamo qui di seguito.
Tables
Elenco delle tabelle (file) coinvolti nella query.
Possiamo scorrere la lista delle tabelle attraverso la scroll-bar laterale. È possibile modificare
l'ordine di presentazione delle tabelle semplicemente spostando la tabella.
Ci si posiziona sul bottone all'estrema sinistra della listbox e, mantenendo premuto il tasto
sinistro del mouse, si sposta la tabella nel punto desiderato.
Figura 18 - La zona
Tables
Description
Descrizione della tabella. Corrisponde al nome della gestione specificata in analisi.
Nel caso si inseriscano più occorrenze della stessa tabella, la descrizione verrà arricchita con
il numero di occorrenza.
Alias
Alias della tabella. Corrisponde all'alias del file specificato in analisi.
Nel caso si inseriscano più occorrenze della stessa tabella, l'alias verrà arricchito con il
numero di occorrenza.
Table Name
Nome fisico della tabella. Corrisponde al nome fisico del file specificato in analisi.
Mode
Descrizione della modalità di esecuzione della sub-query che può assumere i seguenti valori:
"Temp. Table"; il risultato della sub-query viene memorizzato in una tabella temporanea.
"Routine"; è possibile specificare il nome di una routine che prepara una tabella temporanea
che dovrà avere il nome della routine stessa.
" "; lasciando il campo vuoto si lascia che visual query si preoccupi dell'esecuzione.
L'istruzione che viene usata in questo caso sarà "select di select".
Nota Bene
Nel caso di utilizzo di una routine il passaggio dei parametri in fase di test dal Visual Query non può
essere supportato. Quindi al fine di evitare errori e per il corretto test delle routine chiamate dal Visual
V I S U A L
Q U E R Y
1 9
V I S U A L
T O O L
G U I D E
Query, è sufficiente inserire nella routine stessa una parte di codice che valorizza i parametri passati con
valore .f.; il test sui parametri sarà una parte di codice del tipo:
if Type("<Parametro>")<><TipoParametro>. <Parametro>=<Valore>. endif. Questa parte
di codice va ripetuta per ogni parametro passato alla routine dalla Visual Query.
Delete
Rimuove la tabella selezionata dalla listbox e quindi dalla query.
Rimuovendo la tabella dalla listbox viene rimossa anche la sua rappresentazione nella zona
"Design".
Union
Combina il risultato finale di una SELECT con il risultato finale di un'altra SELECT
verificando i risultati ed eliminando le righe duplicate.
Tramite la clausula UNION non è possibile combinare Subquery ed è necessario che
entrambi i comandi di SELECT abbiano lo stesso numero di colonne come output della
query; inoltre ogni colonna del risultato di una SELECT deve avere la stessa dimensione di
dato e lo stesso nome della corrispondente colonna nell'altra SELECT; infine l'ORDER BY
può essere presente solo dopo l'ultima SELECT e condizionerà l'intero risultato.
A destra del campo è presente un bottone ("...") che consente di aprire la finestra che
permette di caricare una query già salvata.
A volte è utile utilizzare la clausula UNION per simulare un outer join.
All
Se questa opzione è attivata la query ritorna tutti i risultati di una Union, anche i record
duplicati.
Fields, Group By and Order By
Listbox dei campi da visualizzare come risultato della query.
Possiamo scorrere la lista dei campi attraverso la scroll-bar laterale. È possibile modificare
l'ordine di presentazione dei campi semplicemente spostandoli.
Ci si posiziona sul bottone all'estrema sinistra della listbox e, mantenendo premuto il tasto
sinistro del mouse, si sposta il campo nel punto desiderato.
È possibile gestire al massimo 256 campi.
L'ordinamento di presentazione influenzerà la sequenza dei campi presentati come risultato
della query.
Figura 19 - La zona
Fields, Group By
and Order By
2 0
V I S U A L
Q U E R Y
V I S U A L
T O O L
G U I D E
Description
Descrizione del campo.
Corrisponde alla descrizione del campo specificata in analisi.
Name
Nome del campo.
Corrisponde al nome del campo specificato in analisi prefissato dall'alias del file
d'appartenenza.
Nota Bene
In questa parte è possibile inserire un'espressione congruente alla tipologia del campo.
Alias
Alias del campo da utilizzare nel cursore che conterrà il risultato della query.
Di default corrisponde al nome del campo specificato in analisi. È possibile modificare
questo valore inserendo un nome di campo valido (un identificatore al massimo di 10
caratteri senza spazi).
Type
Tipo del campo.
Possiamo modificare il tipo scegliendo tra 'Char', 'Numeric', 'Date', 'Logic', 'Memo'. Per i tipi
'Char' è possibile definire la lunghezza, mentre per i 'Numeric' il numero di interi e decimali.
Figura 20 Tipizzazione del
campo
Distinct
Esclude qualsiasi duplicazione di righe dal risultato della query.
Corrisponde alla clausola "Distinct" della SELECT - SQL.
Order By
Listbox con l'elenco dei campi che entreranno a far parte della clausola 'Order by'.
La specifica delle colonne (campi) di ordinamento si ottiene trascinando il campo dalla
listbox dei campi selezionati nella zona "Order By".
Possiamo ordinare il risultato della query basandosi sul valore di una o più colonne. Inoltre, è
possibile selezionare un ordinamento ascendente (di default) o discendente con un doppio
click sul campo inserito nella zona "Order By".
È possibile modificare l'ordine di presentazione dei campi nella listbox semplicemente
spostandoli. Ci si posiziona sul bottone all'estrema sinistra della listbox e, mantenendo
premuto il tasto sinistro del mouse, si sposta il campo nel punto desiderato. L'ordine di
presentazione influenzerà l'ordinamento del risultato della query.
V I S U A L
Q U E R Y
2 1
V I S U A L
T O O L
G U I D E
Esempio
Ho una query che estrae il codice dell'articolo e il prezzo dall'archivio
Articoli. Voglio che il risultato venga presentato in ordine crescente di
prezzo e decrescente per codice articolo. Nella listbox "Order By" dovrò
inserire come primo campo il prezzo dell'articolo seguito dal codice
dell'articolo con la clausola "DESC".
Group By
Listbox con l'elenco dei campi che entreranno a far parte della clausola 'Group by'.
Possiamo raggruppare il risultato della query basandosi sul valore di una o più colonne.
È possibile modificare l'ordine di presentazione dei campi nella listbox semplicemente
spostandoli. Ci si posiziona sul bottone all'estrema sinistra della listbox e, mantenendo
premuto il tasto sinistro del mouse, si sposta il campo nel punto desiderato. L'ordine di
presentazione influenzerà l'ordine di raggruppamento nel risultato della query.
Esempio
Ho una query che estrae il codice dell'articolo e il prezzo dall'archivio
Fatture. Voglio che il risultato venga presentato raggruppato per codice
articolo e per prezzo.
Nella listbox "Group By" dovrò inserire come primo campo il codice
dell'articolo seguito dal prezzo per ottenere il risultato desiderato.
Vogliamo ora ottenere il raggruppamento inverso, prima per prezzo e poi
per codice articolo; è sufficiente posizionare il prezzo dell'articolo al
primo posto della listbox e provare la query per ottenere il risultato
desiderato.
Delete Field
Rimuove il campo selezionato dalla zona "Fields, Group By Order By".
Delete Order
Rimuove il campo selezionato dalla zona "Order By".
Delete Group
Rimuove il campo selezionato dalla zona "Group By".
Pivot
Consente di specificare un'operazione di Pivot sul risultato di una Visual Query.
Alla pressione del tasto viene aperta la finestra di definizione parametri mostrata nella figura
successiva.
2 2
V I S U A L
Q U E R Y
V I S U A L
T O O L
G U I D E
Figura 21 - La
definizione di un
Pivot
Nella zona "Pivot Fields" dovranno essere inseriti i campi relativi all'operazione di Pivot. Il
ribaltamento orizzontale verrà eseguito sull'ultimo campo presente nella zona. È quindi
fondamentale speciicare correttamente la sequenza dei campi contenuti nella lista di Pivot.
I flag presenti a fianco permettono di determinare su quale scala effettuare l'operazione di
pivot. Selezionando "Value" verranno considerati i singoli valori dell'ultimo campo della lista
dei 'Pivot Fileds' e per ognuno di essi verrà creata una colonna.
Il valore "Index" crea invece un'elenco di valori indicizzati, partendo da 1 e basandosi
sull'ultimo campo campo di pivoting.
I flag "Month" e "Day" creano invece, rispettivamente, 12 o 31 colonne su cui vengono
inseriti i valori presenti nel campo di pivoting contenente valori di tipo giornaliero o mensile.
Il flag 'List' in abbinamento con la zona 'List/Query', consente di specificare una lista di
valori con cui verranno titolate le colonne del risultato.
Specificando nella zona 'List/Query' una lista di valori ammissibili per il risultato della query
verranno create solo le colonne relative alla lista specificata.
La zona "Data Fields" contiene i campi che verranno visualizzati nelle colonne della tabella
risultato dell'operazione di pivot., ogni colonna verrà chiamata con il nome dell'alias del
campo ed un'estensione "_XXX" indicante il numero del dato della colonna.
I due bottoni "Delete Pivot" e "Delete Data", infine, consentono rispettivamente di eliminare
il campo selezionato dalla lista "Pivot Fields" o dalla lista "Data Fields".
Join
Zona con le relazioni di Join che entreranno a far parte della clausola 'From' della frase SQL
che compone la query.
In questa zona sono elencate le relazioni presenti sulle tabelle coinvolte nella query. È
possibile modificare l'ordine di presentazione delle relazioni di Join semplicemente spostando
V I S U A L
Q U E R Y
2 3
V I S U A L
T O O L
G U I D E
le relazioni. Ci si posiziona sul bottone all'estrema sinistra della listbox e, mantenendo
premuto il tasto sinistro del mouse, si sposta la relazione nel punto desiderato. L'ordine di
presentazione delle relazioni influenzerà la sequenza di esecuzione delle Join all'interno della
clausola 'From'.
Nel caso non esista link tra due tabelle è possibile inserire la Join manualmente,
semplicemente cliccando sul bottone 'Add' e digitando i nomi delle tabelle e dei campi e i
relativi valori nelle colonne corrispondenti.
Figura 22 - La zona
Join
Nota Bene
L'ordine di esecuzione delle join risulta fondamentale dal punto di vista dei tempi di risposta della query.
Description
Indica il nome della relazione e tra parentesi la descrizione del/dei campo/i di collegamento.
Expression
Indica l'espressione di Join tra i campi delle tabelle specificate in Table1 e Table2.
Nota Bene
In questa parte è possibile inserire un'espressione congruente alla tipologia del campo. Per l'utilizzo delle
varie funzioni SQL si veda 'Le funzioni SQL'.
Type
Indica il tipo di Join tra le tabelle specificate in Table1 e Table2.
È possibile specificare una delle seguenti tipologie:
LEFT OUTER JOIN
Specifica che il risultato della query deve contenere tutte le righe della tabella alla sinistra
della relazione di Join (Table 1) e solo le righe della tabella alla destra della relazione
(Table 2) che verificano la condizione di Join riportata in "Expression".
RIGHT OUTER JOIN
Specifica che il risultato della query deve contenere tutte le righe della tabella alla destra
della relazione di Join (Table 2) e solo le righe della tabella alla sinistra della relazione
(Table 1) che verificano la condizione di Join riportata in "Expression".
FULL JOIN
Specifica che il risultato della query deve contenere tutte le righe di entrambe le tabelle
che verificano o meno la condizione di Join riportata in "Expression". In pratica,
rappresenta la somma relazionale tra una Left Outer e una Right Outer Join.
2 4
V I S U A L
Q U E R Y
V I S U A L
T O O L
G U I D E
INNER JOIN
Specifica che il risultato della query deve contenere solamente le righe che verificano la
condizione di Join riportata in "Expression".
WHERE
Consente di inserire la condizione di Join riportata in "Expression" nella clausola
WHERE della frase SQL che viene creata.
Table 1
In questa zona è specificata la tabella (file) dell'analisi da cui vengono letti i dati.
Cliccando sul tasto del combo-box apparirà la lista delle possibili tabelle utilizzabili nella
relazione di Join.
Table 2
Indica la tabella (file) dell'analisi a cui arrivano i dati letti.
Cliccando sul tasto del combo-box apparirà la lista delle possibili tabelle utilizzabili nella
relazione di Join.
Nota Bene
La costruzione della query si basa sempre sul dizionario dati ricavato dall'analisi dell'applicazione. In
qualsiasi ordine vengano specificate due tabelle coinvolte in una relazione il tool saprà sempre distinguere
quella ricevente da quella letta.
Delete
Rimuove la relazione di Join selezionata.
Add
Aggiunge una riga vuota in cui è possibile inserire un'ulteriore condizione di Join.
Filter
Zona delle espressioni di filtro.
Le espressioni costruite in questa listbox entreranno a far parte della clausola 'Where' nella
frase SQL che compone la query.
La zona risulta valorizzata inserendo delle variabili di filtro nella "Query - Filter Parameters".
La selezione dei campi per l'espressione avviene in modo molto semplice: si evidenzia il file
nella zona "Tables - Dictionary" e si trascinano nella zona "Query - Filter".
Figura 23 - La zona
Filter
V I S U A L
Q U E R Y
2 5
V I S U A L
T O O L
G U I D E
È possibile modificare l'ordine di presentazione delle espressioni semplicemente spostandole.
Ci si posiziona sul bottone all'estrema sinistra della listbox e, mantenendo premuto il tasto
sinistro del mouse, si sposta l'espressione nel punto desiderato.
L'ordine di presentazione delle espressioni influenzerà la sequenza di verifica delle
espressioni all'interno della clausola 'Where'.
Nota Bene
L'ordine di esecuzione delle espressioni risulta fondamentale dal punto di vista della logica di verifica.
Dato che è possibile inserire condizioni in AND o in OR la logica di creazione del filtro deve considerare
che l'AND viene valutato prima dell'OR.
Field Name
Nome del campo del filtro.
Nota Bene
In questa parte è possibile inserire un'espressione congruente alla tipologia del campo. Per l'utilizzo delle
varie funzioni SQL si veda 'Le funzioni SQL'.
Not
Inverte la condizione specificata in 'Criteria'.
Criteria
Operatore di confronto tra la parte di 'Field Name' e la parte 'Example'.
Sono ammessi i seguenti operatori di confronto:
2 6
Operatore
Significato
=
Uguale
Like
SQL LIKE
>
Maggiore di
>=
Maggiore o uguale di
<
Minore di
<=
Minore o uguale di
<>
Diverso
in
Compreso
not in
Non compreso
exists
Esiste
not exists
Non esiste
between
Tra (due)
not between
Non Tra (due)
is null
È nullo
<=is not null
Minore o uguale diNon è nullo
V I S U A L
Q U E R Y
V I S U A L
Operatore
Significato
>all
Maggiore di tutti
>any
Maggiore di qualcuno
<all
Minore di tutti
<any
Minore di qualcuno
>=all
Maggiore o uguale a tutti
>=any
Maggiore o uguale a qualcuno
<=all
Minore o uguale a tutti
<=any
Minore o uguale a qualcuno
<>all
Diverso da tutti
<>any
Diverso da qualcuno
T O O L
G U I D E
Example
Valore di confronto.
In questa zona può essere inserito un valore costante, una variabile proveniente ad esempio
da un Batch, o un parametro prefissato da "?" specificato nella zona "Query - Filter
Parameters", oppure è possibile, clickando sul bottone contrassegnato da tre punti, inserire
una Sub-Query, che in base agli operatori logici in, exists, between, is null, all, any e le relative
varianti, fornisce in uscita un valore logico relativo a questi operatori.
La zona risulta valorizzata se è stato inserito almeno un parametro nella "Query - Filter
Parameters".
Esempio
Nella zona "Filter Parameters" è stato definito un parametro "COD_INI"
per specificare il codice iniziale della selezione. Nella zona "Example"
digitiamo "COD_INI". Quando verifichiamo la nostra query, nella
clausola WHERE della frase SQL possiamo notare che l'espressione di
filtro sarà:
SELECT ...
FROM ...
WHERE <NomeCampo> = COD_INI and ...
GROUP BY ...
ORDER BY ...
INTO CURSOR __TMP__
Ora nella zona "Example" prefissiamo "COD_INI" con "?" cioè digitiamo
"?COD_INI".
Verificando la nostra query, nella clausola WHERE della frase SQL
possiamo notare che l'espressione di filtro sarà diventata:
SELECT ...
FROM ...
WHERE <NomeCampo> = <Valore Assunto da COD_INI> and ...
GROUP BY ...
ORDER BY ...
INTO CURSOR __TMP__
Come possiamo notare, nella clausola WHERE il "COD_INI" è stato
sostituito dal valore assunto dal parametro.
V I S U A L
Q U E R Y
2 7
V I S U A L
T O O L
G U I D E
Logical
Valore logico di collegamento per le espresioni di filtro. È possibile la selezione dei seguenti
valori logici:
Valore
Significato
AND
Congiunzione logica tra espressioni
OR
Disgiunzione logica tra espressioni
Nota Bene
L'AND consente di concatenare logicamente le espressioni, mentre l'OR consente di ottenere espressioni
logiche disgiunte.
Having
La clausola di 'Having' viene utilizzata nelle funzioni di aggregazione, specifica una
condizione di filtro in cui gruppi di dati devono incontrarsi per essere inclusi nei risultati
della query. La clausula HAVING dovrebbe essere usata con una GROUP BY.
Delete Filter
Rimuove l'espressione di filtro selezionata.
La rimozione dell'espressione di filtro non rimuove i parametri utilizzati nell'espressione.
Add Filter
Aggiunge una riga di filtro.
Filter Parameters
Zona dei parametri di filtro.
Un parametro di filtro verrà sempre costruito a partire da un campo appartenente ad una
delle tabelle coinvolte nell'interrogazione.
Figura 24 - La zona
Filter Parameters
L'inserimento di parametri in questa zona comporta la creazione automatica di una maschera
di richiesta parametri.
La selezione dei campi per il filtro avviene in modo molto semplice: si evidenzia il file nella
zona "Tables - Dictionary" e si trascinano del file nella zona "Query - Filter Parameters".
Nel caso esista già un parametro con lo stesso nome, il nome nuovo parametro è seguito dal
numero di ricorrenza. Se ad esempio il parametro relativo al codice articolo ("pCODART") è
già presente nella lista parametri, trascinando ancora il codice articolo nella lista dei parametri
otterremo "pCODART1".
2 8
V I S U A L
Q U E R Y
V I S U A L
T O O L
G U I D E
È possibile modificare l'ordine di presentazione dei singoli parametri di filtro semplicemente
spostandoli. Ci si posiziona sul bottone all'estrema sinistra della listbox e, mantenendo
premuto il tasto sinistro del mouse, si sposta il parametro nel punto desiderato.
L'ordine di presentazione dei parametri di filtro influenzerà la sequenza di richiesta parametri
nella maschera: infatti verrà richiesto il primo parametro, il secondo e così via seguendo
l'ordine nella listbox (dall'alto verso il basso).
I parametri della listbox verranno utilizzati in "Query - Filter - Example", per la
valorizzazione della clausola WHERE della frase SQL.
È inoltre possibile l'inserimento dei parametri manuale semplicemente clickando nei riquadri
che si desiderano valorizzare/modificare ed inserendo i parametri desiderati. È però
necessaria una buona conoscenza della base dati e dell'SQL per evitare errori.
Field Name
Nome del parametro di filtro.
Il nome del campo trascinato in questa zona verrà trasformato in parametro prefissandone il
nome con la lettera "p".
Il parametro così definito potrà essere utilizzato nella zona "Query - Filter - Example" per
valorizzare parte della clausola WHERE della frase SQL.
Nota Bene
In questa parte NON è possibile inserire un'espressione.
Description
Descrizione del parametro.
Questa descrizione verrà utilizzata nella maschera di selezione. Di default viene assunta la
descrizione specificata in analisi per il campo, che è possibile modificare a piacimento.
Type
Tipologia del parametro.
La tipologia del parametro deve rispettare la tipologia del campo di confronto specificato
nella zona "Query - Filter - Field Name".
Len
Lunghezza del parametro.
Dec
Numero di decimali.
La zona viene utilizzata solo per i campi numerici con decimali.
Remove on empty
Permette di non considerare il parametro di selezione se non valorizzato.
In fase d'esecuzione, se il flag è settato la condizione relativa al parametre non valorizzato,
non entrerà a far parte della clausola WHERE.
Delete Param.
Rimuove il parametro di filtro selezionato.
V I S U A L
Q U E R Y
2 9
V I S U A L
T O O L
G U I D E
La rimozione del parametro di filtro non altera l'eventuale zona "Query - Filter - Example" di
utilizzo.
Dialog
Nome della maschera visuale da associare alla query.
Selezionando il bottone "..." si apre la finestra di "Apri" in cui viene presentato l'elenco delle
maschere visuali (i file con estensione .VFM).
Remove filter on empty parameter
Permette di non considerare il parametro di selezione se non valorizzato.
In fase d'esecuzione, se il flag è settato, nessuna delle condizioni relative a parametri non
valorizzati entrerà a far parte della clausola di WHERE.
Esempio
Si consideri una query con una maschera di selezione per l'imputazione
di due parametri, "Da Codice" e "A Codice", ad esempio.
Se si conferma la maschera di selezione senza imputare entrambi i
parametri, nella frase SQL risultante non sarà presente la clausola di
WHERE.
Se invece inseriamo solo uno dei due parametri, la clausola risulterà
valorizzata solo con la condizione che riguarda il parametro non nullo.
Generate Code
Consente di generare il file per la Static Query.
Le Static Query sono interrogazioni utilizzabili nei programmi batch e non devono essere
modificabili dall'utente. La selezione dell'opzione consente di generare una copia statica della
query (da *.VQR a *.INC) che, in fase di generazione, è inclusa nel programma batch.
La copia statica non è modificabile dall'utente se non riselezionando l'opzione "Generate
Code" e codificando di nuovo il programma batch a cui è collegata.
Note
Zona dedicata ad eventuali commenti sulla query.
È possibile inserire stringhe descrittive sulle operazioni svolte dalla query, sulle eventuali
stampe collegate, sui documenti Word, ecc.
Figura 25 - La zona
Note
In questo è possibile comprendere facilmente il contenuto della query.
3 0
V I S U A L
Q U E R Y
V I S U A L
T O O L
G U I D E
2.2.5 Expression Builder
Per migliorare l'editabilità e la leggibilità delle espressioni inserite nelle query è stato integrato
un tool che permette una più veloce e semplice costruzione delle espressioni.
Eseguendo un doppio click su tutti i campi in cui è possibile specificare un espressione viene
mostrata la seguente maschera:
Figura 26 L'expression
builder
Expression Builder permette, premendo il corrispondente bottone o utilizzando il tasto
destro, di costruire velocemente l'espressione.
Se una porzione di testo è selezionata, quest'ultima diventerà l'argomento della funzione; ad
esempio selezionando "ARTICOLI.ARDESART" e premento il bottone " NotEmptyStr"
otterremo il risultato di figura.
V I S U A L
Q U E R Y
3 1
V I S U A L
T O O L
G U I D E
Figura 27 - Un
esempio di
espressione
Utilizzando il tasto destro sulla finestra verrà mostrato un menù che conterrà tutte le
funzioni ed inoltre consentirà di inserire le espressioni presenti in "Fields, Group By and
Order By".
3 2
V I S U A L
Q U E R Y
V I S U A L
T O O L
G U I D E
Figura 28 - Il tasto
deestro
nell'expression
builder
2.2.6 Le funzioni SQL
CODEPAINTER REVOLUTION mette a disposizione del programmatore una serie di
funzioni SQL che possono essere sfruttate all'interno delle zone in cui vengono effettuati
confronti tra campi e campi o tra campi e valori.
Tipicamente queste funzioni possono essere utilizzate all'interno della zona 'Join/Expression'
dove vengono specificate le condizioni di join tra tabelle oppure all'interno della zona
'Filter/Field Name' dove viene specificato il campo di confronto per l'estrazione dei dati.
Figura 29 - Un
esemipo di utilizzo
della funzione
DAY
V I S U A L
Q U E R Y
3 3
V I S U A L
T O O L
G U I D E
Le funzioni SQL devono essere inserite secondo la seguente sintassi:
'[' <NomeFunz> '(' <Param> {',' <Param>} ')' ']'
I nomi delle funzioni NON sono "case-sensitive".
Le funzioni abilitate sono descritte qui di seguito, divise per categorie.
Funzioni di conversione
FUNZIONE
SIGNIFICATO
VAL(cExp)
Ritorna il valore numerico di cExp come float.
STR(nExp)
Converte nExp in stringa.
DATE(cExp)
Converte cExp in una costante data; cExp deve essere una stringa racchiusa
tra apici singoli della seguente forma: '(D)D-(M)M-(YY)YY'. Le parti fra parentesi
sono facoltative, mentre segni meno (-) sono obbligatori entrambi e NON
possono essere sostituiti da altri simboli (come / o .).
Funzioni su stringhe
FUNZIONE
SIGNIFICATO
LTRIM(cExp)
Elimina gli spazi iniziali da cExp.
RTRIM(cExp)
Elimina gli spazi finali da cExp.
TRIM(cExp)
Elimina gli spazi iniziali e finali da cExp.
SUBSTR(cExp, nS [, nL])
Estrae da cExp nL caratteri a partire dall'nS-esimo; se nL viene
omesso, vengono estratti tutti i caratteri dall'nS-esimo alla fine
(destra) di cExp.
CONCAT
Concatena due stringhe. Esempio: stringa1 [CONCAT] stringa2.
LEN(cExp)
Restituisce la lunghezza della stringa cExp, se cExp è un campo di
una tabella ne restituisce la dimensione.
NOTEMPTYSTR(cExp)
Restituisce un valore numerico pari a 1 se il valore di cExp non è
nullo, altrimenti restituisce il valore numerico 0.
Funzioni su date
3 4
FUNZIONE
SIGNIFICATO
YEAR(dExp)
Ritorna il valore numerico dell'anno espresso in dExp.
MONTH(dExp)
Ritorna il valore numerico del mese espresso in dExp.
DAY(dExp)
Ritorna il valore numerico del giorno espresso in dExp.
DIFFDAY(dPar1, dPar2)
Ritorna la differenza in giorni delle due date passate come
parametro.
NOTEMPTYDATE(dPar1)
Restituisce un valore numerico > 0 se il valore di "dPar1" non è
nullo, altrimenti restituisce il valore numerico 0.
CURRENTDATE()
Restituisce la data corrente.
V I S U A L
Q U E R Y
V I S U A L
FUNZIONE
SIGNIFICATO
CURRENTTIME()
Restituisce l'ora corrente.
CURRENTDATETIME()
Restituisce la data e ora corrente.
T O O L
G U I D E
Le funzioni di insieme
FUNZIONE
SIGNIFICATO
COUNT(nExp)
Ritorna il numero di righe espresso in nExp.
AVG(nExp)
Ritorna la media dei valori non nulli espressi in nExp.
MIN(nExp)
Ritorna il valore minimo dei valori espressi in nExp.
MAX(nExp)
Ritorna il valore massimo dei valori espressi in nExp.
SUM(nExp)
Ritorna la somma dei valori non nulli espressi in nExp.
Altre funzioni
FUNZIONE
SIGNIFICATO
NVL(Exp1, Exp2)
Restituisce il primo argomento non NULL
(da sinistra a destra); ammette solo due
argomenti.
ROUND(nValue,nDecimal)
Arrotonda il valore "nValue" al numero di
decimali "nDecimal".
MACRO(?Par)
Effettua la macro sostituzione del parametro
Par nel punto dove viene inserita. Ad esempio
possiamo creare una query parametrica in cui
il nome della tabella su cui lavorare non è
preso dalla lista; per fare una cosa del genere
possiamo
creare
un
parametro
"NomeTabella" e nella lista delle tabelle, in
"Table
name",
inseriamo
[MACRO(?NomeTabella)]. Quando eseguiamo la
query alla richiesta del parametro è necessario
specificare il nome di una tabella esistente al
fine di ottenere il risultato desiderato. La
macro sostituzione può essere effettuata
ovunque si utilizzino i nomi dei campi e/o il
nome di una tabella.
NOTEMPTYNUM(nExp)
Restituisce un valore numerico pari a nExp se
il valore di nExp non è nullo, dove nExp è un
valore numerico, altrimenti restituisce il valore
numerico 0. Si noti che il valore 0 viene
considerato un valore e viene inserito come
valore di inizializzazione.
CASE(ExpC, Exp1, Exp2, Exp3, Exp4, ..., La funzione CASE prende in input un
ExpE)
numero pari di parametri. Il primo parametro
(ExpC) è il campo o la variabile oggetto del
case, seguono poi coppie di parametri in cui il
primo Exp1 indica il valore assunto da ExpC
V I S U A L
Q U E R Y
3 5
V I S U A L
3 6
T O O L
G U I D E
FUNZIONE
SIGNIFICATO
e Exp3 indica il risultato restituito dal case.
L'ultimo parametro passato al case, ExpE è il
valore restituito dal ramo ELSE del CASE. Il
numero minimo di parametri passabili alla
funzione CASE è 4. Il valore per il ramo
CASE è obbligatorio. Es.: [CASE (Articoli.codice,
'Art1', 'Primo', 'Art2', 'Secondo', 'Tutti gli altri')].
CASE2(ExpC, Exp1,..., ExpE)
La funzione CASE2 prende in input un
numero dispari di parametri. Il primo
parametro (ExpC) prevede la possibilità di
poter confrontare il campo o variabile oggetto
del case, utilizzando una condizione diversa
dall'uguale ('equal to'), segue poi il parametro,
Exp1, in cui sarà indicato il valore restituito
dalla funzione nel caso in cui la condizione
ExpC risulti vera. L'ultimo parametro passato
al case, ExpE è il valore restituito dal ramo
ELSE del CASE2. Il numero minimo di
parametri passabili alla funzione CASE2 è 3 .
Il valore per il ramo CASE2 è obbligatorio.
Es.:
[CASE(Articoli.codice
<(00005)),
'Clienti',
'Fornitori')]
.
Es.:
[CASE(Articoli.codice <(00005)), 'Clienti',
Articoli.codice >(09000) , 'Distributori' ,
'Fornitori')] .
GLOBALVAR(Exp)
Restituisce il valore della variabile globale Exp.
SPACE(Exp)
Restituisce una stringa composta da Exp spazi
dove Exp è di tipo numerico.
ZEROFILL(Exp1, Exp2)
Restituisce il valore di Exp1 anteponendovi il
numero di zeri necessario a raggiungere la
lunghezza del campo Exp1, fornita attraverso
il parametro Exp2. Il campo o variabile Exp1
può contenere esclusivamente i caratteri
nell'intervallo 0-9.
USERCODE
La funzione USERCODE restituisce il codice
dell'utente che si è autenticato.
USERGROUPS
La funzione "cp_getgroupsarray()" restituisce
un array con elementi separati da virgola di
tutti i gruppi a cui quel utente appartiene.
USERROLES
La funzione "cp_getRolesArray()" restituisce
l'array dei ruoli dell'utente autenticato.
COMPANYCODE
La funzione COMPANYCODE restituisce il
codice azienda (i_codazi) relativo all'azienda in
uso.
TRANSLATE
La funzione "cp_Translate(cParam)" traduce
la stringa nella lingua definita nella cp_lang.
V I S U A L
Q U E R Y
V I S U A L
T O O L
G U I D E
2.2.7 Il disegno di una query
La costruzione della query avviene in modo semplice e immediato, poiché il tool è
totalmente integrato con il data dictionary dell'applicazione, che mette a disposizione ed in
chiaro la lista delle tabelle e le relazioni fra le stesse.
Figura 30 - Il tool
Visual Query
La selezione di una tabella (file) avviene con un doppio click nella zona "Dictionary Tables". Mediante drag & drop (tasto sinistro del mouse) è possibile inserirla sia nella zona
"Design" sia nella "Query - Tables".
Se prendiamo ad esempio la tabella Gestione Articoli possiamo notare che, trascinandola
nella zona "Design", viene proposto un oggetto con titolo "Gestione Articoli" e valorizzata
la zona "Query - Tables" con il nome della gestione, l'alias e il nome fisico della tabella. Allo
stesso modo potremo trascinare ulteriori file che saranno coinvolti nell'interrogazione.
Nel caso si selezioni una tabella che è in relazione con una o più tabelle già selezionate, è
presentata la finestra "Relations", dove sono elencate le relazioni, i campi di collegamento e
le tipologie di Join.
Nella finestra "Relations" è possibile disabilitare, abilitare o cambiare il tipo di Join.
Clickando su una delle relazioni, nell'ultima colonna a destra appare la dicitura 'Exclude', che
indica al tool di non considerare quella determinata Join.
In questo modo la tabella selezionata verrà inserita nella query in Natural Join con le restanti
tabelle.
Proseguendo nel nostro esempio andiamo ad aggiungere la tabella Codici Iva; come
possiamo notare dalla figura la tabella in questione è stata inserita nella zona "Design",
valorizzando la zona "Query - Tables" e la zona "Query - Join".
V I S U A L
Q U E R Y
3 7
V I S U A L
T O O L
G U I D E
Figura 31 Costruzione di una
query
Per rimuovere un oggetto è sufficiente selezionarlo dalla zona "Query - Tables" e premere il
bottone "Delete" che ripulisce anche la zona "Design".
Nota Bene
La rimozione di una Join elimina se stessa e non le tabelle coinvolte.
Vediamo ora come specificare i campi da utilizzare nella query.
La selezione di un campo di una tabella avviene con un doppio click nella zona "Dictionary Fields of..."; analogamente è disponibile la funzione di drag & drop.
Ogni campo selezionato comparirà all'interno dell'oggetto di appartenenza nella zona
"Design" e nella relativa zona "Query - Fields, Group By Order By".
Con lo stesso metodo riportiamo sempre dalla tabella Articoli la descrizione (Descrizione) e
il codice iva (Codice Iva), mentre dalla tabella Codici Iva il codice iva e la relativa descrizione
(Codice Iva e Descrizione).
Le operazioni sopra esposte non sono altro che un modo facile ma estremamente potente e
guidato per scrivere complesse frasi SQL, che possiamo verificare clickando sul bottone
"SQL" della toolbar.
Figura 32 - La
verifica della frase
SQL in costruzione
3 8
V I S U A L
Q U E R Y
V I S U A L
T O O L
G U I D E
Se premiamo "Esegue Query" otteniamo l'esecuzione di test della query come riportato nella
seguente figura.
Figura 33 - Il
risultato della query
in costruzione
Chiudiamo ora la nostra finestra di "View Query" ed andiamo ad impostare un filtro per la
selezione dei record.
La zona "Query - Filter" permette di definire le espressioni che entrano a far parte della
clausola 'Where' della frase SQL in composizione.
La selezione dei campi per l'espressione avviene evidenziando il file nella zona "Dictionary Tables" e trascinando (Drag & Drop) i relativi campi in "Query - Filter".
Se in "Query - Filter - Example" inseriamo delle costanti (es. maggiore o uguale a
"0000000001" e minore o uguale a "0000000002") otteniamo una selezione di record che
rispettano questi limiti, in base agli operatori impostati in"Query - Filter - Criteria", com'è
possibile verificare utilizzando "Esegue Query".
V I S U A L
Q U E R Y
3 9
V I S U A L
T O O L
G U I D E
Figura 34 Definizione di un
filtro con valori
costanti
Ovviamente è anche possibile inserire dei parametri variabili per la selezione dei record
utilizzando le opzioni combinate di "Filter" e "Filter Parameters".
Cancelliamo i valori costanti nella filter con l'opzione "Delete Filter".
La "Filter Parameters" contiene la lista dei parametri utilizzati per il filtro.
Un parametro di filtro è sempre costruito a partire da un campo appartenente ad una delle
tabelle coinvolte nell'interrogazione. L'inserimento di parametri in questa zona comporta la
creazione automatica di una maschera di richiesta parametri e delle relative espressioni nella
"Filter".
La selezione delle variabili per il filtro avviene in modo molto semplice: si evidenzia il file
nella zona "Dictionary - Tables" e si trascinano (drag & drop) i campi dalla zona "Query Filter Parameters".
Nel caso volessimo realizzare una selezione "da - a", è necessario differenziare la variabile
che conterrà il valore iniziale da quella che conterrà il valore finale della selezione.
Continuando nell'esempio trasciniamo nella "Query - Filter Parameters" il codice articolo.
Come possiamo notare nella "Filed Name" compare pCODART che sostituiamo con
pDA_CODART. Allo stesso modo sostituiamo la descrizione "Codice Articolo" con "Da
Codice Articolo".
Verifichiamo nella "Query - Filter" di avere ottenuto il parametro corretto (?pDA_CODART,
notare il ?) e modifichiamo la voce "Criteria" inserendo maggiore o uguale (>=).
Ritorniamo nella "Query - Filter Parameters" per inserire il secondo parametro.
Trasciniamo sempre il codice articolo e modifichiamo pCODART in pA_CODART e la
descrizione "Codice Articolo" in "A Codice Articolo".
Torniamo a "Query - Filter" per verificare il parametro (?pA_CODART, notare il ?) e
modifichiamo la voce "Criteria" inserendo minore o uguale (<=).
4 0
V I S U A L
Q U E R Y
V I S U A L
T O O L
G U I D E
Figura 35 Definizione di un
filtro con parametri
In questo modo abbiamo definito con quali variabili e su che campi vogliamo effettuare la
selezione.
Nella "Query - Filter - Example" possiamo notare che automaticamente vengono riportati i
parametri specificati nella "Query - Filter Parameters" preceduti dal punto interrogativo.
Le variabili e le stringhe inserite nella "Query - Filter Parameters" vengono utilizzate nella
maschera di selezione che verrà creata in automatico.
Se a questo punto eseguiamo "Esegue Query" possiamo verificare l'esecuzione delle nostre
impostazioni e, con "Frase SQL", leggere la frase SQL composta, che è possibile salvare con
un determinato nome con estensione .VQR.
La realizzazione di report che coinvolgono diversi file è uno dei possibili utilizzi di una frase
SQL così composta, che avviene tramite il bottone "Crea/Modifica Report".
Selezioniamo quindi il bottone: otterremo il prototipo del report riportato in figura.
Figura 36 - Il
prototipo del
Report associato
alla query
Il bottone "Crea/Modifica Report" lancia l'esecuzione del tool dei report del linguaggio
utilizzato e, a seconda dei casi, permette di creare un nuovo report oppure editarne uno
esistente nel caso sia stato precedentemente creato.
Il report così creato sarà salvato nel file di nome <NomeQuery>.FRT.
V I S U A L
Q U E R Y
4 1
V I S U A L
T O O L
G U I D E
Nel prossimo paragrafo vedremo una breve descrizione delle procedure che compongono il
tool e di come potremo integrare le query nelle nostre applicazioni.
2.2.8 Composizione del tool
Prima di esaminare i diversi utilizzi delle query realizzate con questo tool, vediamo da quali e
quante routine è composto.
PROGRAMMA
FUNZIONE
VQ_BUILD.PRG
Utilizzato per il disegno della query.
VQ_EXEC.PRG
Utilizzato per l'esecuzione della query.
VQ_LIB.PRG
Libreria di classi per il tool.
VE_BUILD.PRG
Utilizzato per l'interfaccia con MS Excel.
VG_BUILD.PRG
Utilizzato per l'interfaccia con MS Graph.
VG_EXEC.PRG
Utilizzato per lanciare e gestire i grafici.
Il programma VQ_BUILD.PRG consente di disegnare e costruire la query e, come risultato,
fornisce un file con estensione .VQR in cui è memorizzata la struttura dell'interrogazione.
Il programma viene automaticamente inserito nel menu di utility alla voce "Disegnatore
Query" delle applicazioni realizzate tramite CODEPAINTER REVOLUTION.
L'esecuzione della query si ottiene o direttamente dal tool (voce ESEGUE QUERY) o in
modo interattivo lanciando la procedura VQ_EXEC. Quest'ultima ha come parametro il
nome della query racchiuso tra apici.
L'esecuzione della query si ottiene anche lanciando la procedura VX_EXEC.PRG contenuta
nella CP_LIB che in base all'estensione lancia l'interprete corretto.
Nota Bene
Se al posto del nome non si inserisce alcun parametro verrà aperta la finestra di "Open" che consente di
selezionare la query da eseguire.
La routine VE_BUILD.PRG consente di interagire con MS Excel, passando il valore dei dati
estrapolati dalla query.
Le routine VG_BUILD.PRG e VG_EXEC.PRG si occupano invece della gestione e della
manipolazione dei grafici creati con MS GRAPH.
Il lancio di un grafico tramite la routine VG_EXEC, viene effettuato utilizzando la seguente
sintassi:
VG_EXEC with "<NomeModelloGrafico>.VGR",<SPACE>
<puntatore all'oggetto chiamante>,<SPACE> "<NomeQuery>.VQR"
Nota Bene
Se al posto di <NomeModelloGrafico> non si inserisce alcun parametro verrà aperta la finestra di "Open"
che consente di selezionare il grafico da eseguire.
4 2
V I S U A L
Q U E R Y
V I S U A L
T O O L
G U I D E
Esempi
do vq_exec with "prova"
Lancia l'esecuzione della query 'prova'.
do vq_exec
Apre la finestra di "Open" che consente di selezionare la query da
eseguire (file con estensione *.VQR).
VX_EXEC with "<NomeQuery>.VQR"
Lancia l'interprete che esegue
basandosi sull'estensione VQR.
la
query
<NomeQuery>
da
menu
VX_EXEC with "<NomeQuery>.VQR" PREVIEW
Esegue la
associata.
query
<NomeQuery>
lanciando
la
preview
della
stampa
VX_EXEC with "<NomeQuery>.VQR",<SPACE> "<NomeReport>.FRX"
Esegue la query <NomeQuery> lanciando il report <NomeReport>;
includendo PREVIEW verrà presentata la preview della stampa associata.
2.3 L'integrazione di una query nelle
applicazioni
Il tool di Visual Query, è strettamente integrato con il Data Dictionary dell'applicazione per
guidare l'utente evoluto in complesse interrogazioni anche senza conoscere a fondo la
struttura dell'applicativo.
Questa correlazione è essenziale per rendere semplice l'utilizzo di questo potente sistema.
In generale le query realizzate potranno essere richiamate da un qualsiasi oggetto di
CODEPAINTER REVOLUTION, sia esso interpretato o compilato; a tal scopo citiamo le
Anagrafiche, le Movimentazioni, i Master Detail, le Maschere interpretate (Visual Mask) e/o
compilate, ecc.
Ad esempio nell'istruzione "Select" di un programma Batch potremo utilizzare la query così
realizzata per ottenere un cursore da utilizzare per particolari elaborazioni.
Oppure attraverso il lancio diretto da menu (VQ_EXEC) possiamo utilizzarne il risultato
della query per ottenere un report o il mailmerge con un documento di MS Word e/o MS
Excel.
Oppure associando la nostra query ad uno zoom Visuale possiamo renderlo multifile e
potenziarne notevolmente le prestazioni.
Nel prosieguo del manuale, vista la vasta gamma di possibili combinazioni d'utilizzo,
vedremo brevemente i casi più comuni.
V I S U A L
Q U E R Y
4 3
V I S U A L
T O O L
G U I D E
2.3.1 Query multifile e Autozoom visuale
Facendo riferimento all'esempio applicativo già intravisto in precedenza, vogliamo utilizzare
il tool di query per definire una frase SQL che consenta di estrarre tutti gli articoli con o
senza iva e relativa descrizione.
Nella nostra query utilizzeremo l'archivio articoli per estrarre codice (CODART), descrizione
(DESART) e codice iva (IVAART). Dall'archivio Codici Iva vogliamo recuperare il codice e
la descrizione dell'iva associata all'articolo (rispettivamente CODIVA e DESIVA).
Costruiamo la query seguendo le linee guida spiegate nel paragrafo precedente per ottenere il
risultato in figura.
Figura 37 - Il
risultato della query
sulle tabelle Articoli
e Codici Iva
Dopo aver testato la query usciamo dalla finestra di visualizzazione e salviamola con il nome
QBE_ART.
Usciamo dal tool di query e richiamiamo la gestione degli articoli per associare la nuova
query allo zoom. Selezioniamo la pagina 'Elenco'.
4 4
V I S U A L
Q U E R Y
V I S U A L
T O O L
G U I D E
Figura 38 - Lo
zoom della
gestione articoli
Come possiamo vedere nello zoom è presentato l'elenco brutale degli articoli.
Selezioniamo "Opzioni" per attivare la zona di configurazione dello zoom da cui scegliere
l'opzione SQL.
In questa zona è presente il bottone "Query" che ci permette di associare la nostra query allo
zoom.
Dalla maschera di Open che si presenta selezionando il bottone scegliamo il nome della
nostra query (QBE_ART.VQR).
V I S U A L
Q U E R Y
4 5
V I S U A L
T O O L
G U I D E
Figura 39 - La
selezione della
query appena creata
Confermando la selezione la query viene eseguita e nello zoom compaiono i campi
specificati in fase di definizione, che possiamo modificare ed integrare con le altre opzioni
del Visual Zoom.
Per mantenere l'associazione dobbiamo ora salvare la configurazione corrente.
Selezioniamo "File" e settiamo il flag default per fare in modo che la nostra query venga
utilizzata come default per la valorizzazione dello zoom e infine "Salva".
Il salvataggio crea un file di configurazione con la seguente logica:
<NomeConfigurazione>.<NomeArchivio>_VZM
in cui <NomeConfigurazione> assume il valore inserito nella zona "Name" (con il flag "Default"
settato, il nome è proprio 'default') e <NomeArchivio> è il nome della tabella principale
utilizzata.
4 6
V I S U A L
Q U E R Y
V I S U A L
T O O L
G U I D E
Figura 40 - La
configurazione
dello zoom
Default.Articoli_vz
m appena creata
Nel nostro caso troveremo un file di persistenza di nome Default.Articoli_vzm.
Riutilizzando la funzione elenco (zoom) notiamo che la visualizzazione dei record si basa
sulla query associata.
Nota Bene
È sempre possibile salvare ogni query di default all'interno della sottodirectory "Default" creata
dall'utente. Il sistema, in fase di disegno, ricercherà anche in questa particolare sottodirectory i file con
estensione .VQR. Nel momento del lancio della query da un programma, è però necessario prefissarla con
la path corretta. Ad esempio, dovendo lanciare la query "prova", contenuta nella sottodirectory "Default",
si dovrà utilizzare la sintassi "Default/prova.VQR" per permettere al sistema di trovare il file indicato.
2.3.2 Query multifile e Reporting
In questa parte vedremo come possiamo sfruttare Visual Query per preparare, ad esempio,
una stampa con l'elenco dei clienti che hanno un indirizzo di posta elettronica. Sfruttando la
stessa query, vedremo come preparare una lettera di invito che verrà recapitata direttamente
via posta elettronica.
Vediamo le linee guida di questo esempio: per prima cosa dovremo disegnare la maschera
con le variabili di selezione e con i bottoni, rispettivamente, per il lancio della stampa e per
l'uscita.
Il bottone di stampa lancia la query di estrazione a cui associamo, in prima battuta, la stampa
dell'elenco dei clienti.
In seguito vedremo come associare un modello di MS Word che esegue il mailmerge per
l'invio dell'invito via posta elettronica.
V I S U A L
Q U E R Y
4 7
V I S U A L
T O O L
G U I D E
La maschera di selezione
Non ci dilungheremo troppo sul disegno della maschera, ma ne illustriamo solamente gli
aspetti essenziali.
Figura 41 Maschera di
selezione 'Stampa
Clienti'
La maschera contiene due variabili per la selezione dei clienti (rispettivamente sCODCLI e
eCODCLI) e le due variabili per la decodifica della ragione sociale (rispettivamente
sRAGCLI e eRAGCLI).
Le variabili di selezione, collegate all'archivio clienti per le relative decodifiche, verranno
passate alla query per l'estrazione dei dati.
Nella maschera sono presenti anche i due bottoni per il lancio della query e per l'uscita
(rispettivamente 'STAMPA' ed 'ESCI').
Il bottone 'ESCI" utilizza la System Function 'Quit'.
Il bottone 'STAMPA' utilizza un User Tool Kit; nella zona 'Execute' viene inserito il nome
della query (QBE_CLI.VQR) che andremo a realizzare.
4 8
V I S U A L
Q U E R Y
V I S U A L
T O O L
G U I D E
Figura 42 Definizione del
bottone di stampa
Completiamo la maschera con le opzioni necessarie alla compilazione (titolo e template da
utilizzare) salviamo e usciamo.
La realizzazione della query
Lanciamo l'esecuzione dell'applicazione e selezioniamo 'Disegnatore Query' dal menu di
Utility.
Dopo aver selezionato l'archivio Clienti, trasciniamo nella zona 'Field, Group By and Order
By' i campi che dovranno essere estratti e stampati.
Nel nostro caso sarà necessario prelevare il codice del cliente, i relativi dati anagrafici (ragione
sociale, indirizzo, ecc.) e il campo contenente l'indirizzo di posta elettronica.
Figura 43 Selezione dei campi
dalla tabella Clienti
Portiamoci ora sul folder 'Filter Parameters'; trasciniamo il codice del cliente dalla zona
'Dictionary' e, in 'Field Name', scriviamo la prima variabile proveniente dalla maschera di
V I S U A L
Q U E R Y
4 9
V I S U A L
T O O L
G U I D E
selezione (w_sCODCLI). Ripetiamo lo stesso procedimento per la seconda variabile
(w_eCODCLI) per ottenere la situazione in figura.
Figura 44 Definizione del
filtro sul codice
cliente
I parametri così modificati sono stati inseriti anche nella zona 'Filter/Example'.
Tra i clienti estratti, vogliamo solo quelli che hanno un indirizzo di sposta elettronica.
Supponendo che il campo sia CTE_MAIL, la condizione da inserire sarà:
NOT Empty(cli_enti.CTE_MAIL)
Selezioniamo la zona 'Filter' per specificare questa ulteriore condizione.
Clickiamo sul bottone 'Add Filter'; nella zona
'Empty(cli_enti.CTE_MAIL)' e nella zona 'Example' inseriamo '.t.'.
'Field
Name'
inseriamo
Settiamo il flag NOT e selezioniamo l'operatore di uguaglianza per ottenere la situazione in
figura.
Figura 45 Definizione del
filtro di esistenza
sul campo
CTE_MAIL
Salviamo la query come QBE_CLI.VQR e testiamola.
La creazione/modifica della stampa
Dopo aver verificato il corretto funzionamento della query possiamo passare alla
creazione/modifica dell'elenco dei clienti.
Dalla toolbar di Query Design selezioniamo il bottone per la creazione/modifica della
stampa, per ottenere il prototipo del nostro report.
Utilizzando le funzionalità del tool dei report di MS Visual Foxpro modifichiamo il prototipo
fino ad ottenere il risultato in figura.
5 0
V I S U A L
Q U E R Y
V I S U A L
T O O L
G U I D E
Figura 46 - Il report
per la stampa
dell'elenco dei
clienti con e-mail
Chiudiamo e salviamo il report dopo averlo verificato con la funzione di 'Preview' (tasto
destro del mouse).
La realizzazione del modello con MS Word
Tra gli obiettivi dell'esempio c'era quello di sfruttare la query appena definita sia per la
stampa che per la creazione del modello di MS Word con il quale effettuare il mailmerge.
Vediamo come operare in questo caso.
Dalla toolbar di Query Design selezioniamo il bottone con l'icona del documento Word per
la 'Creazione/modifica mailmerge'.
Figura 47 - La
toolbar 'Query
design'
Dopo alcuni secondi ci viene presentato il modello con lo stesso nome della query ed
estensione .DOC (in questo esempio il nome è QBE_CLI.DOC) dal quale è possibile
selezionare i campi di merge.
V I S U A L
Q U E R Y
5 1
V I S U A L
T O O L
G U I D E
Figura 48 L'elenco dei campi
di merge nel
documento Word
Inseriamo i campi che ci interessano selezionandoli dalla lista 'Inserisci campo unione' e
formattiamo il documento in modo da ottenere il layout del nostro invito.
Figura 49 - Il
documento Word
con i campi inseriti
nel testo
Per verificare l'efficacia del modello selezioniamo dal menu 'Strumenti' l'opzione 'Stampa
Unione'.
5 2
V I S U A L
Q U E R Y
V I S U A L
T O O L
G U I D E
Figura 50 - La
maschera per la
stampa unione
Nella maschera sono presenti diverse opzioni per la preparazione della stampa in unione
(mailmerge).
La prima opzione riguarda il documento principale, che nel nostro caso viene identificato dal
modello appena preparato, e il tipo di unione da effettuare (per le specifiche dei modelli di
mailmerge si faccia riferimento alla manualistica di MS Word).
La seconda opzione consente di scegliere l'origine dei dati. Nel nostro caso i dati saranno
sempre contenuti nel file __WORD__.DBF presente nella directory temporanea di Windows
(quella specificata dal settaggio SET TEMP=C:\WINDOWS\TEMP).
La terza opzione consente di lanciare l'unione dei dati con il modello (per le specifiche dei
modelli di mailmerge si faccia riferimento alla manualistica di MS Word).
Nel nostro caso per il documento principale scegliamo 'Lettera tipo' dal bottone 'Crea' per
consentire la stampa in unione con il sistema di mail.
V I S U A L
Q U E R Y
5 3
V I S U A L
T O O L
G U I D E
Figura 51 - La
selezione del tipo di
documento da
creare
Nella terza opzione clickiamo sul bottone 'Unisci'; dal combobox 'Unisci a' selezioniamo
'Posta elettronica'.
Figura 52 - La
selezione della
modalità 'Posta
elettronica'
Questa scelta permette di inviare la stampa in unione al sistema di posta elettronica.
5 4
V I S U A L
Q U E R Y
V I S U A L
T O O L
G U I D E
Dobbiamo ora specificare qual è il campo contenente l'indirizzo di posta a cui inviare l'invito.
Clickiamo su 'Imposta' e nella maschera che ci viene presentata selezioniamo il campo
'CTE_MAIL' che nel nostro esempio contiene l'indirizzo e-mail del cliente.
Scriviamo 'Invito Meeting' nell'oggetto del messaggio postale per ottenere la situazione in
figura.
Figura 53 - La
selezione del
campo con
l'indirizzo e-mail
Confermiamo la maschera con 'Ok' e selezioniamo 'Unisci' per verificare l'invio dei messaggi.
Dopo alcuni secondi potremo verificare che nel folder 'Posta in uscita' sono presenti tanti
messaggi quanti sono i record selezionati dalla query.
Figura 54 - Posta in
uscita
Dopo aver salvato il modello ed essere usciti dal tool di Visual Query andiamo a verificare
queste funzionalità dal punto dell'interfaccia utente.
V I S U A L
Q U E R Y
5 5
V I S U A L
T O O L
G U I D E
L'esecuzione dell'esempio
Lanciamo la maschera di selezione preparata all'inizio di questo capitolo per verificare il
corretto funzionamento della stampa e del mailmerge con la posta elettronica.
Inseriamo due valori per i limiti dei selezione e clickiamo sul bottone 'Stampa'.
Figura 55 Selezione di un
intervallo di clienti
Nel nostro caso, alla query abbiamo associato sia un programma di stampa che una stampa
unione (mailmerge) con un documento di MS Word.
In fase di esecuzione ci viene presentata la maschera di 'Print System' con tutti i bottoni
abilitati.
Figura 56 - La
maschera 'Print
System'
Selezionando 'Anteprima' ci viene presentata a video la stampa dell'elenco clienti mentre
clickando sul bottone che riporta l'icona di MS Word viene eseguita la stampa unione
aprendo il documento QBE_CLI.DOC.
In questo caso è sufficiente confermare la 'Stampa Unione' nella toolbar di utilità di MS
Word per ottenere l'invio dei messaggi al sistema di Mail.
Figura 57 - La
toolbar 'Stampa
unione'
Il bottone con l'icona di MS Excel consente di esportare i dati estratti dalla Visual query in
un documento Excel in cui la prima riga contiene il nome dei campi mentre le rimanenti
contengono i valori estratti.
5 6
V I S U A L
Q U E R Y
V I S U A L
T O O L
G U I D E
Figura 58 - I
risultati della query
esportati in un
foglio di Excel
2.3.3 Query multifile con maschera di selezione
interpretata
Basandosi sulla gestione d'esempio, vogliamo utilizzare il tool di query per estrarre gli articoli
appartenenti ad un range di valori.
Per farlo, partiamo dalla query QBE_ART salvata in precedenza e le associamo un filtro e la relativa
maschera interpretata per la selezione dei limiti.
Inseriamo nella "Query - Filter Parameters" i due campi del Codice Articolo per i parametri.
Modifichiamoli in "pCODART_i" e "pCODART_f", rispettivamente per il limite inferiore e
superiore della selezione, poi passiamo nella "Query - Filter" e modifichiamo i criteri di filtro
come indicato in figura.
V I S U A L
Q U E R Y
5 7
V I S U A L
T O O L
G U I D E
Figura 59 - La
definizione dei
criteri di filtro
Se a questo punto eseguiamo la query per verificarne la corretta (tramite il bottone 'Esegue
Query'), possiamo notare come la maschera di selezione parametri è stata creata
automaticamente dal tool. La maschera è però abbastanza spartana: mancano ad esempio le
decodifiche delle descrizioni degli articoli, non è possibile modificarne il titolo, non abbiamo
la possibilità di utilizzare funzioni tipo la "Zero Fill", ecc.
Per questo motivo, possiamo associare alla nostra query una maschera interpretata, che
personalizzeremo con gli interventi elencati. L'associazione è semplicissima: nella "Query Filter Parameters" il bottone "Dialog" consente di agganciare una maschera alla query.
Salviamo quindi la nostra query come QBE_AR1, usciamo dal tool e dal menu 'Utility'
selezioniamo 'Disegnatore Maschere'. A questo punto, seguendo quanto esposto nel
paragrafo 'Il disegno di una maschera', disegniamo la nuova maschera da collegare alla query,
salviamola come "MSK_AR1" e riapriamo il tool di query.
Ricarichiamo la nostra query ("QBE_AR1") e nella "Filter Parameters" selezioniamo il
bottone di fianco a "Dialog" per far comparire la lista delle maschere interpretate (*.VFM).
Dalla lista selezioniamo la maschera appena creata in modo da associarla alla query, poi
salviamo la query e proviamo ad eseguirla: il risultato sarà quello mostrato nella figura
seguente.
5 8
V I S U A L
Q U E R Y
V I S U A L
T O O L
G U I D E
Figura 60 L'esecuzione della
query con la nuova
maschera di
selezione
2.3.4 Query e programmi batch
All'interno dei programmi batch è possibile utilizzare le query disegnate con il tool visuale
integrandole nell'istruzione di "Select From".
Figura 61 - La
definizione di
un'istruzione
'Select' nei batch
È sufficiente selezionare il nome della query da associare alla "Select From" per ottenere
complesse estrazioni di dati che altrimenti richiederebbero molte più istruzioni e fasi
successive d'elaborazione.
V I S U A L
Q U E R Y
5 9
V I S U A L
T O O L
G U I D E
In fase d'esecuzione il risultato della query multifile è un cursore (file d'appoggio
temporaneo) utilizzabile dall'istruzione per effettuare le azioni specificate al suo interno.
Con questo sistema è possibile semplificare e rendere estremamente manutenibili e
modificabili anche complesse procedure Batch.
Le Static Query, che si ottengono a partire dalla query selezionando il bottone "Generate
Code", sono utilizzabili allo stesso modo ma si differenziano dalle query standard perché
vengono codificate all'interno del programma batch durante la generazione del codice.
Come dice la parola, sono interrogazioni statiche che possono essere modificate solo
attraverso la modifica della query e la successiva rigenerazione del codice del programma
batch.
2.4 Limitazioni dell'accesso al tool delle
Visual Query
Per limitare o inibire l'accesso al tool da parte di particolari utenti è necessario attivare la
Gesione Sicurezza premendo contemporaneamente i tast ALT+F12 quando la gestione delle
Visual Query è attiva. (Vedi Gestione Sicurezza Programming and Utilities Guide 10.4).
Figura 62 - La
gestione della
sicurezza di una
Visual Query
6 0
V I S U A L
Q U E R Y
V I S U A L
T O O L
G U I D E
Capitolo 3
Visual Mask
3.1 Introduzione
Il Visual Mask, sfruttando a fondo la tecnologia ad oggetti, integra il tool di Visual Query
consentendo di creare maschere interpretate.
Gli oggetti creati con questo tool possono essere integrati in una query o in un batch per
richiedere parametri di selezione, o costituire un supporto alternativo al menu per il lancio
delle procedure.
3.2 Il tool
L'attivazione del tool si ottiene selezionando dal menu utility dell'applicazione la voce
"Disegnatore Maschere".
Viene proposto il frame della maschera in costruzione in cui è possibile inserire gli elementi
presenti nella toolbar di utilità.
V I S U A L
M A S K
6 1
V I S U A L
T O O L
G U I D E
Figura 63 - La
struttura del Visual
Mask
3.2.1 La toolbar di utilità
La toolbar, che viene attivata contemporaneamente al tool, contiene una serie di bottoni che
consentono di interagire con lo strumento.
Nella tabella che segue troviamo il loro nome e l'azione corrispondente.
BOTTONE
6 2
V I S U A L
NOME
AZIONE
Nuovo
Apre una nuova maschera (.VFM).
Apri
Apre una maschera esistente (.VFM).
Salva
Salva la maschera corrente.
Salva come ...
Salva la maschera corrente con un nome diverso
(massimo 8 caratteri).
Esci
Esce tornando all'applicazione.
Opzioni Maschera
Apre la maschera delle opzioni.
Stringa
Inserisce una stringa.
Variabile
Inserisce una variabile.
Radio
Inserisce una lista di radio button.
ComboBox
Inserisce un combobox.
M A S K
V I S U A L
BOTTONE
T O O L
G U I D E
NOME
AZIONE
CheckBox
Inserisce un checkbox.
Bottone
Inserisce un bottone.
Immagine Bitmap
Inserisce un bitmap da cui è possibile lanciare un
programma.
Taglia
Cancella gli elementi selezionati.
Copia
Carica in un buffer di memoria gli elementi
selezionati.
Incolla
Inserisce in maschera gli elementi selezionati con
Copy.
Allinea a sinistra
Allinea a sinistra gli elementi selezionati.
Allinea a destra
Allinea a destra gli elementi selezionati.
Allinea in alto
Allinea in alto gli elementi selezionati.
Allinea in basso
Allinea in basso gli elementi selezionati.
Stessa distanza orizzontale
Dispone gli oggetti selezionati alla stessa
distanza orizzontale.
Stessa distanza verticale
Dispone gli oggetti selezionati alla stessa
distanza verticale.
Nuovo
Ripulisce la memoria e apre una nuova maschera.
Apri
Apre una maschera esistente.
Selezionando il bottone viene attivata la finestra di 'Open' in cui è visualizzata la directory di
lavoro con la lista delle maschere (estensione .VFM).
Salva
Salva la maschera corrente.
Salva come ...
Salva la maschera corrente con un nome diverso.
Nota Bene
Il nome della maschera deve essere al massimo di otto caratteri.
V I S U A L
M A S K
6 3
V I S U A L
T O O L
G U I D E
È sempre possibile salvare la maschera all'interno della sottodirectory "Mask" creata dall'utente. Il
sistema, in fase di disegno, ricercherà anche in questa particolare sottodirectory i file con estensione .VFM.
Nel momento del lancio della maschera da un programma, è però necessario prefissarla con la path
corretta. Ad esempio, dovendo lanciare la maschera "prova", contenuta nella sottodirectory "Mask", si
dovrà utilizzare la sintassi "Mask/prova.VZM" per permettere al sistema di trovare il file indicato.
Esci
Esce tornando all'applicazione.
Opt.
Attiva la finestra in cui inserire le opzioni della maschera: è possibile specificarne il titolo,
settare il flag per renderla modale e impostare la maschera come sfondo.
Figura 64 - La
finestra 'Opzioni
maschera'
Titolo
Titolo della maschera.
Modale
Flag per rendere modale la maschera.
Sfondo
Flag per impostare la maschera come sfondo.
Stringa
Inserisce una stringa di commento.
Clickando in rapida successione sulla stringa inserita in maschera si attiva la finestra "Opzioni
Stringa".
6 4
V I S U A L
M A S K
V I S U A L
T O O L
G U I D E
Figura 65 - La
finestra 'Opzioni
stringa'
Testo
Testo della stringa.
Allineamento
Tipo d'allineamento.
È possibile allineare a sinistra, al centro o a destra la stringa all'interno della dimensione
dell'oggetto.
Variabile
Inserisce una variabile.
Clickando in rapida successione sull'oggetto inserito in maschera si attiva la finestra "Opzioni
Variabile", in cui è possibile definire nome e tipologia della variabile, i possibili collegamenti
per le decodifiche e alcune proprietà (riempi con zeri e flag per l'editing).
V I S U A L
M A S K
6 5
V I S U A L
T O O L
G U I D E
Figura 66 - La
finestra 'Opzioni
variabile'
Variabile
Nome della variabile.
Tipo
Tipologia della variabile.
Sono ammessi i tipi elencati nel combobox (Carattere, Numerico, Data).
Len
Lunghezza della variabile.
Dec
Numero di decimali.
Editabile
Indica se la variabile deve essere editabile.
È possibile definire variabili non editabili che contengono ad esempio la decodifica di un
campo.
Riempi con zeri
Riempie con zeri variabili di tipo Char.
6 6
V I S U A L
M A S K
V I S U A L
T O O L
G U I D E
Se la stringa inizia con un numero, esegue una formattazione del dato inserito riempiendo a
sinistra con degli zeri.
Esistono alcune eccezioni:
•
se la variabile inserita inizia con una lettera non avviene nessuna modifica;
•
se la variabile inizia con uno zero non avviene nessuna modifica.
Esempi
Vediamo che tipo di formattazione viene applicata a una variabile
carattere di lunghezza 10.
Se si digita A12B non si hanno modifiche (il valore inizia con una
lettera).
Se si digita 0112 non si hanno modifiche (il valore inizia con uno zero).
Se si digita 1462 la stringa verrà trasformata in 0000001462.
Se si digita 1TE22 la stringa verrà trasformata in 000001TE22.
Formato
Picture per la variabile.
Sono consentite le picture ammesse dal linguaggio per la tipologia della variabile.
Archivio
Nome dell'archivio a cui collegarsi.
Premendo il bottone che delimita il campo si attiva la finestra "Selezione tabella" che
contiene la lista delle tabelle (file) dell'applicazione.
Figura 67 - La
finestra 'Selezione
tabella'
È possibile selezionare una tabella (file) con un doppio click del mouse.
V I S U A L
M A S K
6 7
V I S U A L
T O O L
G U I D E
Chiave fissa
I tre campi di questa zona rappresentano la parte fissa della chiave nel caso di collegamento
ad archivi con chiavi composte.
La quarta casella deve contenere il nome dell'ultimo campo che compone la chiave.
La selezione di una tabella valorizza automaticamente questa colonna con i campi chiave.
Valori
Le tre caselle di questa zona rappresentano i valori per la parte fissa della chiave nel caso di
collegamento ad archivi con chiave primaria composta.
In questa colonna vanno inseriti le variabili o i valori che consentono di collegarsi alla tabella.
La zona rimane senza valori se la chiave primaria non è composta.
Campo da riportare
In questa zona deve essere inserito il nome del campo da riportare dal collegamento.
Affianco deve essere inserito il nome della variabile che contiene il valore riportato.
Radio Button
Inserisce una lista di radio button.
Clickando in rapida successione sull'oggetto inserito in maschera si attiva la finestra "Opzioni
Radio", in cui è possibile definire il nome e la tipologia della variabile per la lista di radio
button, i possibili valori dei radio button con le corrispondenti descrizioni e la proprietà di
editing (Flag "Editabile").
6 8
V I S U A L
M A S K
V I S U A L
T O O L
G U I D E
Figura 68 - La
finestra 'Opzioni
Radio'
Variabile
Nome della variabile.
Tipo
Tipologia della variabile.
Sono ammessi i tipi elencati nel combobox(Carattere, Numerico, Data).
Len
Lunghezza della variabile.
Dec
Numero di decimali (solo per campi numerici).
Editabile
Indica se la variabile deve essere editabile.
V I S U A L
M A S K
6 9
V I S U A L
T O O L
G U I D E
Valori
Nella colonna sono elencati i dieci valori che possono assumere i radio button.
I valori devono rispettare la tipologia della variabile che li contiene.
Descrizioni
Nella colonna sono elencate le dieci descrizioni dei valori assunti dai Radio button.
Combobox
Inserisce un combobox.
Clickando in rapida successione sull'oggetto inserito in maschera si attiva la finestra "Opzioni
combobox", in cui è possibile definire il nome e la tipologia della variabile per il combobox, i
possibili valori ammessi con le corrispondenti descrizioni e la proprietà di editing (Flag
"Editabile").
Figura 69 - La
finestra 'Opzioni
combobox'
Variabile
Nome della variabile.
7 0
V I S U A L
M A S K
V I S U A L
T O O L
G U I D E
Tipo
Tipologia della variabile.
Sono ammessi i tipi elencati nel combobox (Carattere, Numerico, Data).
Len
Lunghezza della variabile.
Dec
Numero di decimali (solo per campi numerici).
Editabile
Indica se la variabile deve essere editabile.
Valori
Nella colonna sono elencati i dieci valori che può assumere il combobox.
I valori devono rispettare la tipologia della variabile che li contiene.
Descrizioni
Nella colonna sono elencate le dieci descrizioni dei valori assunti dal combobox.
CheckBox
Inserisce un CheckBox.
Clickando in rapida successione sull'oggetto inserito in maschera si attiva la finestra "Opzioni
CheckBox", in cui è possibile definire il nome e la tipologia della variabile per il CheckBox, i
due possibili valori, la descrizione e la proprietà di editing (Flag "Editabile").
Figura 70 - La
finestra 'Opzioni
checkbox'
Variabile
Nome della variabile del CheckBox.
V I S U A L
M A S K
7 1
V I S U A L
T O O L
G U I D E
Tipo
Tipologia della variabile.
Sono ammessi i tipi elencati nel combobox (Carattere, Numerico, Data).
Len
Lunghezza della variabile.
Dec
Numero di decimali (solo per campi numerici).
Editabile
Indica se la variabile deve essere editabile.
Titolo
È la descrizione associata al Checkbox.
Valore se selezionato
È il valore da assegnare alla variabile alla selezione del Checkbox.
Valore se non selezionato
È il valore da assegnare alla variabile se si deseleziona il Checkbox.
Bottone
Consente di inserire un bottone per il lancio di programmi, maschere o query.
Clickando in rapida successione sull'oggetto inserito in maschera si attiva la finestra "Opzioni
Bottone", in cui è possibile definire il nome dell'oggetto da eseguire, la tipologia d'oggetto
(programma, maschera o query/stampa), un'eventuale descrizione e il nome del bitmap da
utilizzare in fase di visualizzazione.
Figura 71 - La
finestra 'Opzioni
bottone'
Esegue
In questa zona deve essere inserito il nome del programma, della query/stampa o della
maschera visuale da eseguire. Se si lancia un programma, il nome deve essere seguito dalle
parentesi tonde aperta e chiusa "()".
7 2
V I S U A L
M A S K
V I S U A L
T O O L
G U I D E
Tipo
Tipo d'oggetto da eseguire.
Sono ammessi i tipi elencati nel combobox (Programma, Maschera, Query/Stampa).
Titolo
Descrizione del bottone.
La stringa viene utilizzata come descrizione del bottone.
Bitmap
Nome del bitmap da associare al bottone.
Il bottone che delimita il campo consente di attivare una maschera di "Open" per la ricerca
del bitmap da utilizzare.
Invisibile
Consente di rendere il bottone invisibile.
In questo modo è possibile creare immagini che, attraverso bottoni invisibili, lanciano
differenti oggetti.
Immagine bitmap
Consente di inserire un'immagine bitmap da cui è eventualmente possibile lanciare
programmi, maschere o query.
Clickando in rapida successione sull'oggetto inserito in maschera si attiva la finestra "Opzioni
Immagine Bitmap".
Figura 72 - La
finestra 'Opzioni
Immagine Bitmap'
Esegue
In questa zona deve essere inserito il nome del programma, della query/stampa o della
maschera visuale da eseguire. Se si lancia un programma, il nome deve essere seguito dalle
parentesi tonde aperta e chiusa "()".
Tipo
Tipo d'oggetto da eseguire.
Sono ammessi i tipi elencati nel combobox (Programma, Maschera, Query/Stampa).
V I S U A L
M A S K
7 3
V I S U A L
T O O L
G U I D E
Titolo
Non utilizzato.
Bitmap
Nome del bitmap.
Il bottone che delimita il campo consente di attivare una maschera di "Open" per la ricerca
del bitmap da utilizzare.
Taglia
Cancella una zona selezionata dalla finestra di lavoro.
Con quest'opzione possono essere rimossi uno o più elementi contenuti nella zona
selezionata.
La zona cancellata può essere ripristinata selezionando la voce 'Incolla'.
Copia
Carica la zona da copiare in un buffer di memoria.
Con quest'opzione possono essere copiati uno o più elementi contenuti nella zona
selezionata.
L'inserimento a video della zona da copiare avviene alla selezione della voce 'Incolla'.
Incolla
Inserisce a video il contenuto del buffer di memoria.
L'opzione permette di inserire in maschera uno o più elementi salvati nel buffer-file tramite
'Taglia' o 'Copia'.
3.2.2 Il disegno di una maschera
Vediamo com'è possibile costruire una maschera con il Visual Mask.
Vogliamo preparare una maschera con titolo "Selezione Articoli" che consenta di valorizzare
i due parametri di filtro dell'applicazione d'esempio (vedi 'Query multifile con maschera di
selezione interpretata').
Clickiamo su "Opt." per inserire il titolo. Nella maschera che appare inseriamo "Selezione
Articoli" e confermiamo su 'Ok'.
Selezioniamo poi dalla toolbar una variabile per inserire il limite iniziale della nostra ricerca.
Clickiamo due volte sulla variabile, inseriamo il nome (pCODART_i), lasciamo inalterate
tipologia e lunghezza e settiamo il flag "Riempi con zeri".
Nota Bene
Il nome della variabile deve coincidere esattamente con quello specificato in precedenza nella "Query Filter Parameters" della Visual Query.
Clickiamo sul bottone "Archivio" per specificare di leggere gli Articoli. Notiamo che il
campo della chiave primaria viene inserito direttamente nella zona delle chiavi.
7 4
V I S U A L
M A S K
V I S U A L
T O O L
G U I D E
Vogliamo riportare nella maschera la descrizione dell'articolo selezionato, perciò sotto
"Campo da riportare" inseriamo DESART e, a fianco, xDESART.
Figura 73 - La
definizione della
variabile
pCODART_i
Inseriamo poi una variabile per la descrizione: nel nome inseriamo xDESART e resettiamo il
flag "Editabile" in quanto la descrizione deve essere di sola visualizzazione.
V I S U A L
M A S K
7 5
V I S U A L
T O O L
G U I D E
Figura 74 - La
definizione della
variabile
xDESART
Procediamo analogamente per inserire il limite finale della nostra ricerca, inserendo la
variabile pCODART_f che valorizza l'ulteriore variabile xDESART1, da porre in sola
visualizzazione come variabile di decodifica.
Proseguiamo aggiungendo le stringhe descrittive "Da codice.:" e "A codice.:", da inserire
accanto alle variabili, quindi allineiamo le variabili e le descrizioni e dimensioniamo la
maschera per ottenere il risultato seguente.
Figura 75 - La
maschera per la
selezione di un
intervallo di articoli
completata
Per finire, salviamo la maschera come "MSK_AR1" per poterla utilizzare nella query di
esempio citata all'inizio.
7 6
V I S U A L
M A S K
V I S U A L
T O O L
G U I D E
3.2.3 Composizione del tool
Prima di esaminare i diversi utilizzi delle maschere realizzate con questo tool, vediamo da
quali e quante routine è composto.
PROGRAMMA
FUNZIONE
VM_BUILD.PRG
Utilizzato per il disegno della maschera.
VM_EXEC.PRG
Utilizzato per l'esecuzione della maschera.
VM_LIB.PRG
Libreria di classi per il tool.
Il programma VM_BUILD.PRG consente di disegnare e costruire la maschera e, come
risultato, fornisce un file con estensione .VFM in cui è memorizzata la struttura delle
maschera visuale.
Il programma viene automaticamente inserito nel menu di utility alla voce "Disegnatore
Maschere" delle applicazioni realizzate tramite CODEPAINTER REVOLUTION.
La procedura VM_EXEC ha come parametro il nome della maschera racchiuso tra apici. È
possibile lanciare una maschera direttamente da menu attraverso la VM_EXEC o attraverso
la VX_EXEC che in base all'estensione lancia l'interprete corretto.
Nota Bene
Se al posto del nome non si inserisce alcun parametro verrà aperta la finestra di "Open" che consente di
selezionare la maschera da eseguire.
Esempi
vm_exec with "prova"
Lancia l'esecuzione della maschera 'prova'.
vm_exec
Apre la finestra di "Open" che consente di selezionare la maschera da
eseguire (i file con estensione *.VFM).
VX_EXEC with "<NomeMaschera>.VFM"
Inserendo la chiamata a menu viene lanciato l'interprete che esegue la
maschera <NomeMaschera>, basandosi sull'estensione VFM.
3.3 L'integrazione di una maschera
nelle applicazioni
Gli oggetti creati con questo tool possono essere integrati in una query in un programma
batch o costituire un supporto alternativo al menu per il lancio delle procedure.
V I S U A L
M A S K
7 7
V I S U A L
T O O L
G U I D E
In generale le query realizzate potranno essere richiamate da un qualsiasi oggetto di
CODEPAINTER REVOLUTION, sia esso interpretato o compilato; a tal scopo citiamo le
Anagrafiche, le Movimentazioni, i Master Detail, le Maschere interpretate (Visual Mask) e/o
compilate, ecc.
Nel seguito del manuale, vista la vasta gamma di possibili combinazioni d'utilizzo, vedremo
brevemente i casi più comuni.
3.3.1 Maschere visuali e Query Multifile
L'integrazione di una maschera visuale con una query multifile si ottiene semplicemente
specificando il nome della maschera nel campo 'Dialog' della zona "Query - Filters
Parameters" del tool di Visual Query.
In fase d'esecuzione la maschera visuale permette di inserire i parametri di selezione che la
query utilizzerà per l'estrazione dei record.
3.3.2 Maschere visuali e programmi batch
L'integrazione di una maschera in un programma batch si ottiene attraverso l'istruzione di
"Exec." del batch.
Basta settare il flag "UTK Object" nella maschera "Execute Definition" e selezionare la
maschera da eseguire.
Figura 76 Istruzione 'Execute'
che richiama una
maschera da un
batch
Attenzione all'uso delle variabili: valgono le usuali regole di visibilità tra programmi. Perciò,
se lancio la maschera dal programma batch dovrò aver preventivamente dichiarato le variabili
della maschera nel batch. Viceversa, se lancio la maschera e da questa, attraverso un bottone,
lancio il programma batch, le variabili che utilizzo nella maschera dovranno essere dichiarate
come "Non Local" nel batch.
3.3.3 Maschere visuali per il lancio di programmi
Le maschere visuali possono essere utilizzate anche per creare un'interfaccia alternativa al
menu per il lancio delle procedure. È infatti possibile creare maschere che rimarranno sullo
sfondo dell'applicazione, contenenti un disegno (.bmp) con delle zone attive (hyperlink) che
permettono l'esecuzione di procedure o altre maschere di sfondo.
7 8
V I S U A L
M A S K
V I S U A L
T O O L
G U I D E
Per farlo basta selezionare l'opzione 'Sfondo' nella finestra di definizione della maschera in
questione, dopodiché sarà sufficiente, per creare gli hyperlink, utilizzare degli oggetti di tipo
"Bottone" con il flag 'Invisibile' selezionato e porli in corrispondenza delle zone dello sfondo
che si desidera rendere attive.
Così facendo, in fase di esecuzione sarà possibile accedere a funzioni particolari o alle stesse
funzioni presenti nei menu con un'immediatezza e una chiarezza non indifferenti. Ad
esempio, nella seguente figura è rappresentata un'applicazione che propone come sfondo un
completo menu a cartelle, tramite il quale è possibile accedere a tutte le funzioni
dell'applicazione stessa, mentre rimane attivo contemporaneamente anche il menu
tradizionale.
Figura 77 Esempio di menu
grafico realizzato
tramite maschera
3.3.4 Maschere visuali di Default, di Utente, di
Gruppo
Le maschere visuali possono essere salvate e definite in diversi modi a seconda del tipo di
obiettivo che ci siamo preposti.
In genere la ragione della creazione di una maschera è legata alla necessità di possedere una
piattaforma intermedia tra menu e lancio di oggetti visuali o procedure che tutti utilizzano,
ma a volte risulta utile crearsi maschere personalizzate che lavorano su variabili e dati riservati
a particolari utenti. In questo caso non basta un salvataggio generico, ma è necessaria una
differenziazione ulteriore.
È possibile salvare una maschera che tutti utilizzeranno o richiameranno tramite le procedure
dell'applicazione, semplicemente clickando sull'icona 'Salva' o 'Salva con nome' e nella
maschera che ci si presenta, assegnare alla Visual Mask un nome qualsiasi.
V I S U A L
M A S K
7 9
V I S U A L
T O O L
G U I D E
Nel caso invece che la maschera da noi creata debba apparire automaticamente all'apertura
dell'applicazione dovremmo salvarla con nome file 'Default'.
Diversamente, se vogliamo che la maschera appaia automaticamente all'apertura
dell'applicazione solo ad un certo gruppo di utenti è necessario specificare quali saranno i
destinatari. Lo stesso discorso vale se vogliamo riservare maschere a singoli utenti.
Nota Bene
È sempre possibile salvare le maschere di default all'interno della sottodirectory "Default" creata
dall'utente. Il sistema, in fase di disegno, ricercherà anche in questa particolare sottodirectory i file con
estensione .VFM. Nel momento del lancio della maschera da un programma, è però necessario prefissarla
con la path corretta. Ad esempio, dovendo lanciare la maschera "prova", contenuta nella sottodirectory
"Default", si dovrà utilizzare la sintassi "Default/prova.VFM" per permettere al sistema di trovare il
file indicato.
Per ottenere questo risultato è utile attivare la gestione utenti, o dal menu 'Utility' o dall'icona
relativa nella 'Application bar'.
Si aprirà così la finestra della gestione utenti contenente la lista completa degli utenti e dei
gruppi di utenti.
Figura 78 Gestione
utenti/gruppi
Per assegnare una maschera ad un gruppo basta utilizzare la tecnica del 'Drag & Drop'
clickando sul nome del gruppo e trascinando l'oggetto all'interno della finestra della
maschera in costruzione. Comparirà così una maschera di richiesta salvataggio che
permetterà di salvare la maschera come default per il gruppo (Default_G<numero gruppo>.VFM).
8 0
V I S U A L
M A S K
V I S U A L
T O O L
G U I D E
Analogamente per assegnare una maschera ad un utente basta clickare sul nome dell'utente e
trascinarlo all'interno della finestra della maschera in costruzione. anche in questo caso
comparirà la maschera di conferma di salvataggioper assegnarla come default all'utente
selezionato (Default_<numero utente>.VFM).
Nota Bene
Nel caso la maschera sia già stata salvata per un determinato utente, verrà chiesto se sovrasciverla o meno.
Alla successiva esecuzione dell'applicazione dopo aver digitato nome utente e password il
sistema determinerà quale maschera dovrà essere utilizzata.
3.4 Limitazioni dell'accesso al tool delle
maschere
Per limitare o inibire l'accesso al tool da parte di particolari utenti è necessario attivare la
Gesione Sicurezza premendo contemporaneamente i tast ALT+F12 quando la gestione delle
Visual Mask è attiva. (Vedi Gestione Sicurezza Programming and Utilities Guide 10.4).
Figura 79 - La
gestione della
sicurezza di una
Visual Mask
V I S U A L
M A S K
8 1
V I S U A L
T O O L
G U I D E
Capitolo 4
Visual Zoom
4.1 Introduzione
Il Visual Zoom, sfruttando a fondo la tecnologia ad oggetti, integra il tool di Visual Query
consentendo di creare zoom interpretati su query multifile.
4.2 Il tool
L'attivazione del tool si ottiene selezionando dal menu utility dell'applicazione la voce
"Disegnatore Zoom".
Nel tool è presente la finestra dello zoom che può essere dimensionata a piacimento.
La finestra risulta suddivisa in due zone: una zona in cui definire le caratteristiche di
visualizzazione dei record estratti e una zona di configurazione.
La zona di configurazione si ottiene selezionando il bottone "Opzioni".
Una toolbar d'utilità consente di gestire le operazioni sull'oggetto (Nuovo, Apri, Salva e Salva
come), di collegare lo zoom ad una tabella dell'applicazione o di specificare un programma
da lanciare alla selezione del record.
V I S U A L
Z O O M
8 3
V I S U A L
T O O L
G U I D E
Figura 80 - Le zone
del Visual Zoom
4.2.1 La toolbar di utilità
La toolbar, attivata insieme al tool, contiene una serie di bottoni che rendono più agile
l'interazione con lo strumento. Nella tabella che segue sono rappresentati i bottoni, il loro
nome e l'azione corrispondente.
BOTTONE
NOME
AZIONE
Nuovo
Apre un nuovo zoom (.VZM).
Apri
Apre uno zoom esistente (.VZM).
Salva
Salva lo zoom corrente.
Salva come ...
Salva lo zoom corrente con un nome diverso (massimo 8
caratteri).
Esci
Esce tornando all'applicazione.
Table
Consente di selezionare la tabella principale.
Opzioni
Permette di inserire le opzioni dello zoom.
Nuovo
Ripulisce la memoria e apre un nuovo zoom.
Apri
Apre uno zoom.
8 4
V I S U A L
Z O O M
V I S U A L
T O O L
G U I D E
Selezionando il bottone si attiva la finestra di 'Open' in cui è visualizzata la directory di lavoro
con la lista degli zoom (estensione .VZM).
Salva
Salva lo zoom corrente.
Salva come ...
Salva lo zoom corrente con un nome diverso.
Nota Bene
Il nome dello zoom deve essere al massimo di otto caratteri.
È sempre possibile salvare lo zoom all'interno della sottodirectory "Zoom" creata dall'utente. Il sistema,
in fase di disegno, ricercherà anche in questa particolare sottodirectory i file con estensione .VZM. Nel
momento del lancio dello zoom da un programma, è però necessario prefissarlo con la path corretta. Ad
esempio, dovendo lanciare lo zoom "prova", contenuto nella sottodirectory "Zoom", si dovrà utilizzare la
sintassi "Zoom/prova.VQR" per permettere al sistema di trovare il file indicato.
Esci
Esce tornando all'applicazione.
Table
Consente di selezionare la tabella principale.
Il bottone attiva la maschera "Selezione Tabella" che contiene l'elenco delle tabelle
dell'applicazione.
Figura 81 - La
finestra 'Selezione
tabella'
V I S U A L
Z O O M
8 5
V I S U A L
T O O L
G U I D E
Selezionando una tabella la zona di visualizzazione dello zoom risulta valorizzata con i campi
e i record della tabella.
Opzioni
Maschera per la definizione delle opzioni dello zoom.
Figura 82 - La
finestra 'Opzioni'
Nella maschera è possibile definire il titolo dello zoom e specificare l'eventuale programma
da lanciare alla selezione del record.
Titolo
Stringa del titolo.
La stringa è utilizzata per il titolo dello zoom.
Programma
Nome del programma da eseguire alla selezione di un record.
Nota Bene
Se lo zoom viene lanciato da un programma batch in cui sono state inserite delle variabili locali con lo
stesso nome dei campi dello zoom e prefissate da "w_", è possibile inserire in questa zona il valore
"return".
Questo valore permette di riportare in tutte le variabili del batch i valori dei campi della riga selezionata
dallo zoom.
Opzioni
Opzioni visualizzabili nello zoom.
Se viene attivato è possibile visualizzare nello zoom alcune opzioni di ricerca per affinare i
risultati della query che genera lo zoom.
4.2.2 La zona di visualizzazione
La zona, altamente configurabile e personalizzabile, contiene i record normalmente
visualizzati in colonne titolate.
È possibile dimensionare questa zona per riservare dello spazio sia per i campi a scorrimento
che per i campi in posizione fissa.
8 6
V I S U A L
Z O O M
V I S U A L
T O O L
G U I D E
Figura 83 - Uno
Zoom con campi
in posizione fissa
Le opzioni della colonna
Clickando con il tasto destro del mouse sul titolo della colonna si attiva la maschera "Titolo
Colonna", che consente di definire alcune proprietà del campo visualizzato nella colonna.
Figura 84 - La
finestra 'Titolo
colonna'
Campo
Nome del campo di riferimento.
Titolo
Titolo della colonna.
La stringa è utilizzata come descrizione nel caso il campo è in posizione fissa.
V I S U A L
Z O O M
8 7
V I S U A L
T O O L
G U I D E
Formato
Picture del campo.
Per l'elenco delle picture disponibili si faccia riferimento al manuale del linguaggio utilizzato.
Altezza
Altezza in pixel del campo.
L'altezza è utilizzata solo se il campo è in posizione fissa.
Larghezza
Larghezza in pixel del campo.
La larghezza è utilizzata solo se il campo è in posizione fissa.
Col. testo
Colore del testo del campo.
L'inserimento dei valori dei colori disponibili viene effettuata tramite la funzione RGB() di
Visual FoxPro. È possibile inserire condizioni e/o espressioni logiche accettate dal linguaggio
Visual FoxPro.
Col. sfondo
Colore di sfondo del campo.
L'inserimento dei valori dei colori disponibili viene effettuata tramite la funzione RGB() di
Visual FoxPro. È possibile inserire condizioni e/o espressioni logiche accettate dal linguaggio
Visual FoxPro.
Editabile (in zoom editabili)
Editabilità della colonna.
Se il checkbox è attivato, nelle tabelle editabili sarà possibile modificare il contenuto dei
campi.
4.2.3 La zona di configurazione
La zona di configurazione, attivabile dal bottone "Opzioni", consente di specificare tutti i
parametri dello zoom.
8 8
V I S U A L
Z O O M
V I S U A L
T O O L
G U I D E
Figura 85 - La zona
di configurazione
In essa sono presenti diverse zone: le prime tre ("Selezione", "Ordinamento" e "Campi")
consentono di definire le caratteristiche della frase SQL di estrazione. La zona "SQL"
permette di visualizzare la frase sql basata sui parametri inseriti in quelle precedenti, oppure
di selezionare una query visuale da associare allo zoom. "File" consente di salvare i parametri
specificati nello zoom e di creare o modificare una stampa.
Le modifiche apportate allo zoom sono verificabili in ogni momento attraverso "Interroga":
infatti, la selezione del bottone consente di rieseguire l'interrogazione basandosi sui parametri
appena inseriti.
La zona di selezione
In questa zona sono inserite le espressioni di ricerca e/o ulteriori parametri di selezione sui
record estratti dalla Visual Query.
È possibile creare complesse espressioni di ricerca multiparametro sfruttando gli operatori di
confronto della seconda colonna e l'operatore booleano "OR".
Figura 86 - La zona
di selezione
La scelta dei campi per le espressioni si ottiene trascinando il valore di una colonna nella
zona di selezione.
L'operatore di confronto si seleziona con un doppio click dalla seconda colonna mentre
l'operatore "OR" è selezionabile dall'omonimo bottone.
V I S U A L
Z O O M
8 9
V I S U A L
T O O L
G U I D E
La zona d'ordinamento
È possibile specificare diversi tipi d'ordinamento trascinando i campi nella zona
"Ordinamento". Clickando due volte sui campi presenti in questa possiamo specificare se
l'ordinamento sul campo è CRESCENTE (Default) o DECRESCENTE.
Figura 87 - La zona
d'ordinamento
Il bottone "Elimina" consente di togliere il campo evidenziato dalla lista d'ordinamento.
La zona dei campi
Zona di selezione dei campi da inserire nella zona di visualizzazione.
La colonna di sinistra presenta i campi da visualizzare, quella di destra i campi della tabella
che non sono presenti sullo zoom.
I due bottoni consentono di spostare uno o più campi da una parte all'altra.
Figura 88 - La zona
dei campi
La zona SQL
La zona contiene la frase SQL per l'estrazione dei dati da visualizzare.
Se associamo una query visuale allo zoom notiamo che la clausola di "WHERE" è sostituita
dal nome della query.
Figura 89 - La zona
SQL
Il bottone "Query" consente di attivare la finestra per la selezione della query visuale
(*.VQR).
Settando il flag 'Modifica frase' è possibile digitare direttamente, secondo la sintassi SQL, le
modifiche alla frase SQL di estrazione dati.
9 0
V I S U A L
Z O O M
V I S U A L
T O O L
G U I D E
La zona File
La zona è utilizzata soprattutto in fase di configurazione per salvare i parametri specificati
nello zoom e per creare o modificare una stampa.
Figura 90 - La zona
file
Il flag "Default" indica che la configurazione attuale verrà utilizzata come default, il flag
"chiede parametri" indica di richiedere i parametri di selezione all'apertura dello zoom mentre
il flag "Mantieni dimensioni" salva nel file di configurazione le dimensioni della finestra.
Nota Bene
È sempre possibile salvare lo zoom all'interno della sottodirectory "Default" creata dall'utente. Il sistema,
in fase di disegno, ricercherà anche in questa particolare sottodirectory i file con estensione .VZM. Nel
momento del lancio dello zoom da un programma, è però necessario prefissarlo con la path corretta. Ad
esempio, dovendo lanciare lo zoom "prova", contenuto nella sottodirectory "Default", si dovrà utilizzare la
sintassi "Default/prova.VZM" per permettere al sistema di trovare il file indicato.
Digitando un nome per la configurazione e salvandolo (bottone "Salva") viene creato il file di
configurazione secondo questa sintassi:
<NomeConfigurazione>.<NomeTabella>_VZM
Il bottone "Modifica/crea stampa" lancia il tool dei report di MS Foxpro 5.x associando allo
zoom una stampa.
Il nome della stampa segue questa sintassi:
<NomeConfigurazione>_<NomeTabella>.FRX
È possibile richiamare la stampa associata da bottone clickando sul bottone "Esegue Report"
della zona utente.
V I S U A L
Z O O M
9 1
V I S U A L
T O O L
G U I D E
Figura 91 - Un
esempio del tool
dei report
Il bottone "Modifica/crea MSWord" lancia MS Word creando un
(<NomeConfigurazione>_<NomeTabella>.DOC) su cui eseguire il merge dei dati estratti.
modello
Il modello può poi essere reimpaginato per adattarsi alle più disparate esigenze (es. stampa di
etichette, di buste, di documenti preformattati in base a un determinato protocollo, ecc.).
Il database di appoggio per il mailmerge (__WORD__.DBF e FPT) viene creato nella directory
temporanea
di
Windows
(generalmente
corrispondente
all'assegnazione
TEMP=C:\WINDOWS\TEMP).
In fase di esecuzione, la selezione del bottone per il mail merge con Word, aprirà il modello
ed eseguirà il mailmerge dei dati creando di default
<NomeConfigurazione>_<NomeTabella>.DOC
il file CATALOGO1.DOC.
È possibile utilizzare le diverse tipologie di mailmerge messe a disposizione da Word in fase
di definizione del modello; ad esempio è possibile eseguire il mailmerge direttamente su
documenti di posta elettronica selezionando nella maschera di 'stampa unione' l'opzione
'Posta elettronica' (vedi 'La realizzazione del modello con MS Word').
4.2.4 La zona utente
La zona utente si compone di una serie di bottoni che consentono di interagire con lo zoom.
Figura 92 - I
bottoni della zona
utente
Ogni bottone ha associato un tooltip di aiuto che ne rende chiaro il significato.
9 2
V I S U A L
Z O O M
V I S U A L
T O O L
G U I D E
Richiesta parametri
Il bottone lancia la maschera di richiesta parametri creata sulla base delle condizioni
specificate nella zona "Selezione". Il messaggio "Non ci sono parametri di selezione" segnala
che non sono stati inseriti dei parametri.
Configurazioni
Consente di selezionare una particolare configurazione.
La finestra presenta la lista dei file salvati al momento della configurazione.
Esegue Report
Il bottone lancia la maschera per la selezione del device su cui eseguire il report.
Figura 93 - La
finestra 'Print
System'
Per ulteriri specifiche sull'utlizzo della maschera si veda 'Il sistema delle stampanti' nel
Programming & Utilities Guide.
Riesegue Interrogazione
Anche questo bottone ha una duplice funzionalità. Il tasto sinistro riesegue l'ultima
interrogazione, mentre il destro toglie tutte le condizioni impostate nella zona di
configurazione.
4.2.5 Il disegno di uno zoom
Vediamo alcune semplici linee guida per il disegno di uno zoom.
Lo zoom nasce come strumento per visualizzare record di una tabella, quindi la prima cosa
da fare è selezionare una tabella su cui effettuare lo zoom. Le tabelle sono selezionabili dalla
lista che compare clickando sul bottone 'Table'.
Nota Bene
Prima di inserire una query realizzata con il tool di Visual Query è necessario selezionare una tabella di
riferimento.
La selezione della tabella valorizza la zona di visualizzazione dello zoom.
V I S U A L
Z O O M
9 3
V I S U A L
T O O L
G U I D E
A questo punto è possibile selezionare una Visual Query (vedi 'La zona SQL') da associare
allo zoom per la visualizzazione dei dati estratti.
4.2.6 Composizione del tool
Prima di esaminare i diversi utilizzi degli zoom realizzati con questo tool, vediamo da quali e
quante routine è composto.
PROGRAMMA
FUNZIONE
VZ_BUILD.PRG
Utilizzato per il disegno della query.
VZ_EXEC.PRG
Utilizzato per l'esecuzione dello zoom.
STDZ.VCX e .VCT
Libreria di classi per il tool.
Il programma VZ_BUILD.PRG consente di disegnare e costruire lo zoom e, come risultato,
fornisce un file con estensione .VZM in cui è memorizzata la struttura dello zoom
interrogazione.
Il programma viene automaticamente inserito nel menu di utility alla voce "Disegnatore
Zoom" delle applicazioni realizzate tramite CODEPAINTER REVOLUTION.
L'esecuzione dello zoom si ottiene in diversi modi:
•
direttamente dal tool, in ogni istante, possiamo verificare il risultato della configurazione
dal bottone "Interroga" posto nella zona di configurazione;
•
da menu possiamo eseguire lo zoom lanciando la procedura VZ_EXEC che ha come
parametro il nome dello zoom racchiuso tra apici;
•
sempre da menu possiamo lanciare la procedura VX_EXEC che in base all'estensione
lancia l'interprete corretto.
Nota Bene
Se al posto del nome non si inserisce alcun parametro verrà aperta la finestra di "Open" che consente di
selezionare lo zoom da eseguire.
Esempi
do vz_exec with "prova"
Lancia l'esecuzione dello zoom 'prova'.
do vz_exec
Apre la finestra di "Open" che consente di selezionare lo zoom da
eseguire (file con estensione *.VZM).
VX_EXEC with "<NomeZoom>.VZM"
Inserendo la chiamata a menu viene lanciato l'interprete che esegue lo
zoom <NomeZoom>, basandosi sull'estensione VZM.
9 4
V I S U A L
Z O O M
V I S U A L
T O O L
G U I D E
4.3 L'integrazione di uno zoom visuale
nelle applicazioni
Gli zoom visuali possono essere integrati in un'applicazione creata con CODEPAINTER
REVOLUTION lanciandoli da un bottone di un oggetto o da menu.
Nel seguito del manuale, vista la vasta gamma di possibili combinazioni d'utilizzo, vedremo
brevemente i casi più comuni.
4.3.1 Visual Zoom e bottoni
È possibile lanciare da bottone di un qualsiasi oggetto CODEPAINTER REVOLUTION
un Visual Zoom semplicemente settando il flag "UTK Object" e inserendo il nome dello
zoom alla voce "Execute".
Figura 94 - La
definizione di un
bottone che lancia
uno zoom
4.3.2 Visual Zoom con selezione
Talvolta può risultare utile avere degli zoom visuali dai quali poter selezionare alcuni record
per elaborazioni successive. CODEPAINTER REVOLUTION mette a disposizione la
routine CP_SZOOM.PRG, che consente di utilizzare questi tipi di oggetti.
Questa routine, che può essere richiamata esclusivamente dal Painter dei Batch, riceve come
parametri il nome del cursore che verrà creato con i record selezionati, il nome della tabella
su cui lavora lo zoom, il titolo dello zoom ed un eventuale file di configurazione.
V I S U A L
Z O O M
9 5
V I S U A L
T O O L
G U I D E
Basandosi su quest'ultimo parametro è possibile configurare uno zoom visuale su un
archivio, salvare la configurazione e richiamare la configurazione da un programma batch
come zoom di selezione.
Il discorso si estende ovviamente a configurazioni basate su query multifile.
Figura 95 - Un
esempio di zoom
con selezione
Esempio
Per richiamare uno zoom di selezione all'interno di un programma batch
basta inserire un 'Execute Statement' con i seguenti parametri:
Cp_szoom (<i_cCursor>, <i_cFilename>, <i_cZoomTitle>, <i_cZoomFile>)
oppure:
do Cp_szoom with <i_cCursor>, <i_cFilename>,
<i_cZoomTitle>, <i_cZoomFile>
in cui:
<i_cCursor>
nome del cursore creato con i record selezionati;
<i_CFileName>
nome della tabella su cui lavora lo zoom;
<i_CZoomTitle>
titolo della finestra di zoom;
<i_CZoomFile>
nome del file di configurazione.
9 6
V I S U A L
Z O O M
V I S U A L
T O O L
G U I D E
Viene aperto <i_cZoomFile>.<i_cFileName>_vzm. Se il parametro non
viene specificato, viene cercato default.<i_cFileName>_vzm. Nel caso
non venga trovata neanche questa configurazione, mostra tutti i campi
della tabella.
4.3.3 Visual Zoom lanciati da menu
Come già osservato in precedenza, illustrando la composizione del tool, uno zoom visuale
può essere lanciato da menu inserendo la chiamata alla VZ_EXEC che ha come parametro il
nome dello zoom racchiuso tra apici, oppure usando la procedura VX_EXEC, che in base
all'estensione lancia l'interprete corretto.
4.3.4 Visual Zoom lanciati da batch
Un Visual Zoom può essere lanciato anche da un programma batch inserendo un comando
di "Execute" e settando il flag di "UTK Object".
Nella zona "Execute" si dovrà poi specificare il nome dello zoom con estensione (*.VZM).
Se nel programma batch sono state inserite delle variabili locali con lo stesso nome dei campi
dello zoom e prefissate da "w_", è possibile valorizzarle all'uscita dello zoom semplicemente
inserendo nel campo 'Programma' della finestra "Opzioni" il valore "return".
Figura 96 - La
finestra 'Opzioni'
con il valore 'return'
impostato
4.4 Limitazioni dell'accesso al tool degli
zoom
Per limitare o inibire l'accesso al tool da parte di particolari utenti è necessario attivare la
Gesione Sicurezza premendo contemporaneamente i tast ALT+F12 quando la gestione dei
Visual Zoom è attiva. (Vedi Gestione Sicurezza Programming and Utilities Guide 10.4).
V I S U A L
Z O O M
9 7
V I S U A L
T O O L
G U I D E
Figura 97 - La
gestione della
sicurezza di un
Visual Zoom
9 8
V I S U A L
Z O O M
V I S U A L
T O O L
G U I D E
Capitolo 5
Visual Menù
5.1 Introduzione
Il Disegnatore di Menù è un efficace tool con il quale è possibile effettuare la
personalizzazione dei menù a livello utente delle applicazioni in ambiente Client/server. Con
questo tool è possibile 'disegnare' la struttura dei menù a partire dal menù di default, per
disporre le voci nel modo che si ritiene più opportuno, o per limitare l'accesso alle stesse da
parte di determinati utenti, realizzando così configurazioni riservate ai singoli utenti o gruppi
di utenza.
Fino ad oggi, la personalizzazione del menù era sempre effettuata a partire dal menù
"default": in base alle esigenze, lo sviluppatore o l'utente era costretto a personalizzare il
proprio menù andando quasi sempre a modificare il menù di default fornito con
l'applicazione.
Tutto ciò portava ad inconvenienti a volte rilevanti: l'uscita di patch o di release
dell'applicativo contenente nuove voci di menù, costringeva a reinstallare un nuovo menù di
default, facendo perdere, nella maggior parte dei casi, le personalizzazioni effettuate, o
costringendo gli sviluppatori\utenti ad una 'caccia alle voci modificate' spesso difficoltosa.
D'ora in avanti molti di questi problemi saranno risolti.
La logica della gestione del menù dell'applicativo è cambiata: non più un solo menù
contenente tutte le voci, ma tanti più o meno piccoli menù, in grado di ' agganciarsi'
dinamicamente (in fase di caricamento della procedura) ad un menù di base.
L'applicazione, infatti, avrà un menù chiamato "default.vmn" contenente le funzionalità
principali, mentre ogni modulo aggiuntivo avrà il proprio menù che verrà automaticamente
caricato all'avvio.
V I S U A L
M E N Ù
9 9
V I S U A L
T O O L
G U I D E
Allo sviluppatore\utente finale, verrà data la possibilità di creare un proprio menù
personalizzato completamente indipendente da quello base (o di default) dell'applicativo.
In questo modo, ad ogni patch o rilascio, sarà possibile aggiornare il menù sopracitato senza
preoccupazioni, in quanto le personalizzazioni rimarranno perlopiù funzionanti o
eventualmente adattabili con pochissimo dispendio di energie e tempo.
A questo scopo, per permettere delle facili personalizzazioni, è stata quasi completamente
rivista la veste grafica del tool per offrire queste nuove funzionalità. Sarà possibile, come
spiegheremo nel seguito, creare nuove voci o interi menù da "aggangiare" al menù principale,
eliminare voci o interi menù dal menù base, spostare, con un po' di pratica, voci o interi
menù, abilitare o disabilitare voci o menù; perfino inserire proprie bitmap per rendere più
piacevole la procedura.
5.2 Menù Differenziali
Il concetto di menù differenziale è esplicabile in poche parole: si tratta di avere un menù
costruito tramite differenze. Ciò significa avere un menù di base che verrà sempre caricato, al
quale, per differenze, ne saranno agganciati di nuovi che avranno la funzione di integrare
quello di default con l' inserimento di nuove voci o l'eliminazione di alcune, rendendone più
facile la manutenzione nonché offrendo maggiori possibilità di personalizzazione.
In particolare la nuova gestione, sia a livello fisico che logico, prevede la costruzione di tanti
menù, in particolare uno per ogni modulo, che in fase di caricamento saranno "mergiati" ed
integrati.
Per gli sviluppatori, ciò significa che il menù che fino ad adesso era il default.vmn è stato
smembrato: esso contiene solo un menù base privo degli interi menù dei moduli.
Questi saranno caricati e agganciati al principale in fase si avvio della procedura.
Quindi, affinchè ogni modulo possa essere caricato come voce all'interno del menù
principale, dovrà contenere il proprio menù: un file con estensione .vmn denominato
<nomemodulo>_default e contenuto o nella cartella <nomemodulo> della procedura o
nella cartella <nomemodulo>\exe\.
E' possibile dare una panoramica di ciò che avviene all'avvio della procedura.
Viene caricato il menù "Default.vmn" contenente i moduli di base e le voci principali di ogni
modulo come da immagine, prive dei sub menù:
1 0 0
V I S U A L
M E N Ù
V I S U A L
T O O L
G U I D E
Figura 98 - un
esempio
Dopodichè, per ogni modulo installato, viene ricercato all'interno della cartella del modulo il
menù <nomemodulo>_default.vmn corrispondente.
Ognuno di questi viene agganciato al menù principale, appoggiandosi proprio alla voce già
presente precedentemente citata, in modo tale da poterlo agganciare subito dopo, come da
figura:
V I S U A L
M E N Ù
1 0 1
V I S U A L
T O O L
G U I D E
Figura 99 - un
esempio in
esecuzione
Come si può notare dall'esempio, compaiono due voci "offerte" di cui la prima funziona da
"Aggancio" ed è vuota, mentre la seconda è quella che è stata appena agganciata e contiene
l'intero menù.
Quindi occorre eliminare la prima voce.
Questa operazione sarà sempre contenuta all'interno del menù del modulo che dovrà
contenere anche una voce "Cancellata" contenente il path della voce stessa, come da
esempio.
1 0 2
V I S U A L
M E N Ù
V I S U A L
T O O L
G U I D E
Figura 100 aggancio ed
elimanazione voci
5.3 Menù Personalizzati
Dopo che sarà stata esaurita la ricerca nei moduli, la procedura passerà alla ricerca dei menù
personalizzati.
Per ogni utente o per ogni gruppo potrà essere creato un unico menù contenente tutte le
personalizzazioni.
Questo
dovrà
essere
chiamato
<Custom_<numeroUtente>>.vmn
o
<Custom_G<numeroUtente>>.vmn per i gruppi e potrà essere inserito nella cartella della
procedura exe\custom o nella cartella exe\ o, ancora, nella cartella exe\std.
A differenza del passato, non sarà più necessario modificare il menù "Default.vmn" ma
questo file "Custom" potrà tranquillamente contenere tutte le modifiche al menù principale
che si riterranno necessarie, come l'aggiunta di nuove voci, la loro eliminazione, il loro
spostamento, come spiegato in questo manuale, il tutto costruito, appunto, per differenze.
V I S U A L
M E N Ù
1 0 3
V I S U A L
T O O L
G U I D E
5.4 Il tool
L'attivazione del tool si ottiene selezionando dal menù utility dell'applicazione la voce
"Disegnatore Menù".
Il tool è composto da due viste ad albero principali correlate da bottoni e campi per inserire
tutte le modifiche del caso.
Figura 101 - Il tool
Visual Menù
In alto, sopra le due principali treeview, compaiono i nomi dei menù caricati: a sinistra, come
da figura, un menù utente "custom_2" creato appositamente per le personalizzazioni; a
destra, l'intero menù.
Sotto, le due viste corrispondenti e, infine, tutti i campi necessari alle personalizzazioni.
All'avvio del Tool, a destra viene sempre caricato il menù di default, contenente tutte le voci
visibili nel menù principale dell'applicazione: quindi, per entrare nella logica della nuova
gestione, viene caricato il menù base (o deafult), al quale sono già "agganciati" tutti i menù
dei sottomoduli e tutti i menù contenenti le personalizzazioni per l'utente attualmente attivo.
Il menù di destra così presentato, non è direttamente modificabile, ma è, possiamo dire, di
sola consultazione.
E' possibile comunque caricare un qualunque menù in questa vista, agendo sul bottoncino in
alto a destra accanto alla voce "Menù".
A sinistra, sempre all'avvio, non è caricato alcun menù, ma è presentata una vista vuota
contenente solamente il ramo "Menù Principale".
1 0 4
V I S U A L
M E N Ù
V I S U A L
T O O L
G U I D E
E' questo il cuore del tool: qui è effettivamente possibile creare il proprio menù,
aggiungendo, cancellando, modificando, spostando voci.
Per ognuna di esse è infatti possibile leggere e modificare tutte le informazioni relative, nei
campi sottostanti, semplicemente selezionando nella TreeView la voce desiderata.
E' importante capire come la TreeView di destra serva da riferimento per avere una visione
completa del menù principale, così come la TreeView di sinistra è effettivamente quella che ci
permette di vedere il menù in creazione, di modificarlo e di leggere tutte le proprietà di ogni
voce.
Di seguito verranno descritte tutte le operazioni che potranno essere eseguite, sia tramite
spiegazioni, sia tramite esempi concreti.
5.4.1 La toolbar di utilità
La toolbar, che viene attivata contemporaneamente al tool, contiene una serie di bottoni che
consentono di interagire con lo strumento.
Nella tabella che segue troviamo il loro nome e l'azione corrispondente.
BOTTONE
NOME
AZIONE
Nuovo
Apre un nuovo menù (.VMN).
Apri
Apre un menù esistente (.VMN).
Salva
Salva il menù corrente.
Salva come ...
Salva il menù corrente con un nome diverso (massimo 8
caratteri).
Esci
Esce tornando all'applicazione.
Nuovo
Ripulisce la memoria e apre un nuovo menù.
Apri
Apre un menù esistente.
Selezionando il bottone viene attivata la finestra di 'Open' in cui è visualizzata la directory di
lavoro con la lista dei menù (estensione .VMN).
Salva
Salva il menù corrente.
Salva come ...
Salva il menù corrente con un nome diverso.
V I S U A L
M E N Ù
1 0 5
V I S U A L
T O O L
G U I D E
Nota Bene
Il nome del menù deve essere al massimo di otto caratteri.
È sempre possibile salvare il menù all'interno della sottodirectory "Menù" creata dall'utente. Il sistema, in
fase di disegno, ricercherà anche in questa particolare sottodirectory i file con estensione .VMN. Nel
momento del lancio del menù da un programma, è però necessario prefissarlo con la path corretta. Ad
esempio, dovendo lanciare il menù "prova", contenuto nella sottodirectory "Menù", si dovrà utilizzare la
sintassi "Menu/prova.VMN" per permettere al sistema di trovare il file indicato.
Esci
Esce tornando all'applicazione.
5.4.2 La treeview del menù di default
In questa zona, viene presentato lo stesso menù visibile nel menù principale della procedura,
comprensivo del menù di base, con "agganciati" tutti i menù dei moduli e quelli delle
personalizzazioni. Ricordiamo ancora che su questo menù non è possibile modificare
direttamente le voci, ma è possibile agire su di esse per compiere alcune operazioni che
descriveremo in seguito.
Nel campo in sola lettura notiamo il nome del menù caricato, mentre è possibile agire sul
bottoncino per ricercare un menù da caricare in questa vista.
1 0 6
V I S U A L
M E N Ù
V I S U A L
T O O L
G U I D E
Figura 102 - La
treeview del menù
di default
Cliccando sul + di ogni menù, è possibile esplodere la cartellina, visualizzando tutto ciò che
c'è al suo interno: in questo modo, il "+" diventerà un "-" che potrà essere utilizzato per
chiudere il menù appena espanso.
L'operazione più importante che è possibile fare agendo direttamente sulle voci di questa
vista, è la copia delle voci nella finestra di sinistra per permettere tutte le modifiche che si
vogliono effettuare.
E' possibile fare la copia effettuando un doppio click sulla descrizione delle voci del menù di
destra: in questo modo, noteremo che ciò su cui abbiamo appena cliccato è stato copiato
nella zona del menù in costruzione.
Nota Bene
Le voci che copieremo saranno posizionate immediatamente sotto (o dentro, nel caso di menù) la voce
selezionata nella vista di sinistra.
I bottoni della treeview di default
Come da figura, sotto il menù di destra, compaiono i seguenti bottoni:
Figura 103 - I
bottoni della
treeview di default
V I S U A L
M E N Ù
1 0 7
V I S U A L
T O O L
G U I D E
I primi quattro permettono di effettuare operazioni di aggancio in automatico, mentre
l'ultimo compie l'operazione di eliminazione.
Operazioni di aggancio ed eliminazione
Per spiegare come questi bottoni possano funzionare, occorre addentrarci nella spiegazione
sommaria di come avviene l'"aggancio" delle voci di menù.
Ad ogni voce o menù, sono associate alcune proprietà, come il proprio nome, la procedura
che dovrà essere lanciata, la bitmap, un percorso, una posizione, un modulo, ed
eventualmente il fatto che debba o meno essere disabilitata o cancellata.
Queste informazioni compaiono nei campi in basso della maschera qualora si selezioni
(esclusivamente) una voce nel menù di sinistra.
Figura 104 - Un
esempio con le
proprietà
dell'opzione di
menù
Il "Titolo", sempre abilitato, è il nome che si vuole dare al menù: una volta inserito, sarà
subito visibile nella treeview di sinistra alla voce relativa.
L'opzione "Bitmap" è il bitmap che si vuole visualizzare associato ad una particolare voce.
La "Procedura" è ciò che deve essere lanciato dalla voce di menù. Questo campo non è
sempre editabile: lo è solamente per le voci (o opzioni) e non lo è per i menù.
Il "Percorso", assieme alla "Posizione", è una delle novità introdotte ed è sicuramente la più
importante perchè è il campo sul quale si basa la funzionalità di aggancio. Quello che
contiene è il path della voce prima o dopo (posizione) la quale si vuole agganciare una voce.
Il path, nella fattispecie, è il percorso di posizionamento di quella voce.
Per spiegare meglio, consideriamo il seguente esempio.
Esempio
Supponiamo
di
voler
"Archivi/Magazzino/Marchi".
1 0 8
V I S U A L
M E N Ù
inserire
una
voce
PRIMA
di
V I S U A L
T O O L
G U I D E
Figura 105 - Un
esempio con le
proprietà
dell'opzione di
menù
Per fare ciò, occorre definire una nuova opzione nel menù di sinistra,
riempire i campi che ci interessano, ma soprattutto inizializzare il campo
"Percorso".
In questo caso, come si può notare dal menù di destra, esso contiene
proprio il percorso necessario ad inserire la voce "My Option"
esattamente PRIMA di Marchi.
È chiaramente possibile inserire a mano il percorso stando bene attenti
all' utilizzo del carattere di separazione (ALT+0172), ma è sicuramente
più opportuno utilizzare il bottone "Percorso" che evita la possibilità di
errori nel path. Occorre quindi creare una nuova voce o menù nella vista
di sinistra, posizionarsi nel menù di destra sulla voce prima o dopo la
quale vogliamo inserire il nostro menù, e cliccare quindi sul bottone
"Percorso".
Tornando ai nostri quattro bottoni di inserimento automatico:
Figura 106 - i
bottoni di
inserimento
automatico
questi facilitano ancora di più le operazioni fin qui descritte.
Infatti, i bottoni servono proprio per creare un nuovo menù o una nuova voce con relativo
path di inserimento. Per far ciò basta semplicemente posizionarsi, a destra, sulla voce prima o
dopo la quale vogliamo inserire una personalizzazione e cliccare quindi sul bottoncino
desiderato.
V I S U A L
M E N Ù
1 0 9
V I S U A L
T O O L
G U I D E
Questa azione creerà a sinistra una nuova voce o menù, con già inizializzati i campi
"Percorso" e "Posizione".
Ecco una tabella con le funzioni del singolo bottone:
FUNZIONE
SIGNIFICATO
Inserire un menù prima della voce selezionata
Inserire un menù dopo della voce selezionata
Inserire una opzione prima della voce selezionata
Inserire una opzione dopo la voce selezionata
Il bottone 'Elimina' merita un discorso a parte.
Questo bottone ha la funzione di creare una voce con "Percorso" relativo alla voce che si
vuole non sia più visibile nel menù principale.
La logica per le voci da "cancellare" è la stessa utilizzata per le voci da inserire.
Si seleziona una voce nel menù di destra, si clicca sul bottone "Elimina" e quindi comparirà a
destra una voce o un menù già correttamente inizializzato con i dati relativi alla voce da
eliminare.
Naturalmente, in questo caso, si noterà che la combo Posizione è disabilitata in quanto non
verrà eliminata una voce prima o dopo quella presenta in percorso, ma bensì la stessa.
Si noterà, infine, che è attivo il flag "Cancellato" che indica che quella voce sarà cancellata.
A colpo d'occhio sono visibili nel menù di sinistra le voci che saranno cancellate, in quanto
presentano un'icona leggermente differente dalle altre ( una piccola x rossa in basso a destra
dell'icona).
Nota Bene
E' sempre possibile non avvalersi dei bottoncini che consentono questi automatismi, e fare tutto
manualmente, cioè andando a modificare i valori dei campi. In questo caso è bene porre un po più di
attenzione: in riferimento al menù di sinistra, il campo "Percorso" sarà abilitato solamente per le voci
direttamente figlie di "Menù Principale" ed ancora, non sarà possibile mettere il flag a cancellato finchè
non sarà stato riempito proprio il campo "Percorso".
Nota Bene
la possibilità di inserire un "Percorso" è inoltre limitata dal fatto che nel menù di destra sia caricato
esclusivamente il menù di Default.
5.4.3 La treeview del menù di sinistra
Questa zona è la parte dedicata alla costruzione dei menù personalizzati.
Nel campo in alto compare il nome del menù caricato, mentre all'apertura del Disegnatore di
menù troviamo la dicitura nuovo.
1 1 0
V I S U A L
M E N Ù
V I S U A L
T O O L
G U I D E
Nell'albero, è presente l'intera visualizzazione del menù aperto: da notare come all'avvio
l'albero sia vuoto, o meglio, contenga solo la voce Menù Principale, non modificabile.
Ad essa saranno poi attaccate le nuove voci o i nuovi menù.
Figura 107 - La
treeview del menù
di sinistra
I bottoni della treeview di sinistra
Il bottone "Menù" crea un nuovo menù (una cartella) subito sotto una voce selezionata o
dentro un menù selezionato.
Il bottone "Opzione" crea una nuova Opzione sotto una voce selezionata o dentro un menù
selezionato; le opzioni non sono altro che voci di menù alle quali è possibile associare una
procedura.
Il bottone "Sep" aggiunge un separatore al menù. All'interno della vista ad albero, questi è
visualizzato come una serie di trattini: in realtà, al momento della generazione del Menù
Principale, verrà visualizzato come una lineetta divisoria tra le voci.
Nota Bene
Non è possibile inserire un separatore subito sotto il "Menù Principale"
V I S U A L
M E N Ù
1 1 1
V I S U A L
T O O L
G U I D E
Gli ultimi due bottoni, "Seq +" e "Seq -", consentono di modificare la disposizione di ogni
singolo elemento inserito. Selezionando una voce di menù e cliccando su "Seq +", l'elemento
verrà spostato verso il basso. Al contrario, il bottone "Seq -" sposterà l'elemento verso l'alto.
L'eliminazione di una voce di menù
Supponiamo che in fase di creazione del nostro menù Personalizzato ci accorgiamo di aver
fatto alcuni errori: abbiamo inserito un menù di troppo, abbiamo messo una voce in una
posizione sbagliata, vogliamo togliere un separatore inserito per errore.
Ciò che vorremmo è cancellare definitivamente questa voce dal nostro menù. Per far ciò
basta eseguire un doppio click sulla voce che vogliamo eliminare e questa verrà rimossa dal
nostro menù. Attenzione però: se effettuiamo un doppio click su un menù (icona con
cartella) che contiene al suo interno altre voci, verranno eliminate tutte le voci figlie.
Nota Bene
L'eliminazione di una voce di menù qui illustrata fa esplicitamente riferimento all'eliminazione fisica di
una voce di un menù personalizzato caricato nel menù di sinistra. Occorre pertanto non far confusione
quando, in altre parti di questo manuale, si parla di cancellazione di una voce di menù.
5.4.4 Le Proprietà delle voci
Come già accennato in precedenza, ad ogni voce del menù di sinistra, sono associate tutte
quelle informazioni visibili nei campi sottostanti della maschera.
Figura 108 - Un
esempio di
proprietà per una
voce di menù
1 1 2
V I S U A L
M E N Ù
V I S U A L
T O O L
G U I D E
Vediamo nel dettaglio il loro significato e quando possono essere modficati.
Come già detto il tool non permetterà di modificare sempre tutte le voci.
Titolo
è sempre abilitato: indica il nome che si vuole dare al menù: una volta inserito, sarà subito
visibile nella TreeView di sinistra alla voce relativa.
Bitmap
è la bitmap che si vuole visualizzare associata ad una particolare voce: il campo è sempre
abilitato. Per ricercare una bitmap, si consiglia di utilizzare l'apposito bottoncino alla destra
del campo per una corretta inizializzazione del percorso della stessa. Cliccando sul bottone si
aprirà una maschera windows che permettera di muoversi attraverso il file system per
ricercare la bitmap desiderata. Una volta inserita, non appena si abbandonerà il campo, la
bitmap sarà caricata alla voce selezionata nel menù di sinistra.
Nota Bene
La procedura è in grado ora di gestire le bitmap dei menù.
Ciò significa che quando assoceremo una bitmap ad una voce, questa verrà visualizzata alla sinistra della
stessa ogniqualvolta compaia in un menù. Ciò significa che l' icona comparirà nel disegnatore di menù, nel
menù principale, nel Tool Menù (richiamabile tramite CTRL+T) ed eventualmente nei menù contestuali.
Percorso
Contiene il percorso della voce prima o dopo (posizione) la quale se ne vuole agganciare
un'altra. Dato che il percorso necessita di una particolare sintassi, è consigliato, per evitare
malfunzionamenti, di utilizzare il pulsante di riempimento "Percorso". Per utilizzarlo in
modo corretto basta seguire alcuni semplici passi:
1) Posizionarsi, nel menù di sinistra, sulla voce creata che si desidera agganciare o
cancellare: in questo modo verranno inizializzati tutti i campi con le relative
informazioni.
2) Verificare che il bottoncino "Percorso" sia abilitato.
3) Spostarsi nel menù di Destra e ricercare la voce desiderata.
4) Selezionare tale voce e cliccare su "Percorso"
A questo punto noterete come il campo relativo sia stato correttamente inizializzato. In
alternativa a questo inserimento manuale, è possibile utilizzare i bottoni subito sotto la
treeview di destra, come già spiegato nella sezione "Operazioni di aggancio ed eliminazione".
Nota Bene
Il bottoncino "Percorso" e il relativo campo sono editabili solamente in alcuni casi:
1) Quando la voce o il menù sono direttamente figli di "Menù Principale"
2) Quando nella treeview di destra è caricato il Menù di Default
Posizione
Indica dove deve essere posizionata la voce o il menù che si vuole inserire, in riferimento al
"Percorso". Le possibilità offerte sono Prima e Dopo. La ComboBox è abilitata solamente
quando il campo percorso non è vuoto e il flag cancellato non è settato.
V I S U A L
M E N Ù
1 1 3
V I S U A L
T O O L
G U I D E
Nota Bene
Quando è presente un "Percorso" e il flag "Cancellato" è settato, la combo " Posizione" è disabilitata.
Questo perchè ad essere eliminata sarà proprio l' ultima voce presente nel percorso (e non quella prima o
quella dopo).
Cancellato
Il flag cancellato indica se si vuole rimuovere la voce presente in " Percorso", pertanto sarà
disabilitato finchè non sarà valorizzato questo campo. Tutte le voci che avranno questo flag
settato, verranno rese invisibili in modo tale che non siano selezionabili. Ha pressochè la
stessa funzione del flag " Abilitato", ma mentre quest'ultimo inabilita la voce lasciandola
comunque visibile all'interno del menù, il flag "Cancellato" farà sì che quella voce scompaia.
Procedura
E'utilizzato per indicare l'operazione che deve essere eseguita cliccando sulla voce di menù; è
editabile solamente per le voci e non per i menù.
Attivazione
All'interno di questo campo è possibile inserire il modulo per attivare o disattivare un
particolare menù.
Abilitato
Consente di abilitare o disabilitare un menù. Di default il flag è sempre attivo per ogni voce.
Disattivandolo, la voce continuerà ad apparire in ogni menù, ma non sarà possibile cliccare
su di essa.
5.5 Visual menù, salvataggi e gestione
utenti
L'utilizzo del nuovo Disegnatore di Menù ha come obiettivo principale la creazione di un file
personalizzato contenente tutte le modifiche che si vogliono attuare sul menù in base alla
proprie esigenze. Non sarà quindi più necessario creare un menù Default per ogni gruppo
contenente tutte le voci, ma solamente un menù Custom con tutte le modifiche che si
vogliono apportare. Supponendo quindi di aver creato il nostro menù personalizzato
contenente solo le modifche che si vogliono apportare, dobbiamo salvarlo e far sì che, al
prossimo riavvio della procedura, venga correttamente caricato.
A questo proposito, una volta terminate le modifiche, clicchiamo sulla toolbar nell'icona con
il floppy. Si aprirà una maschera windows che ci proporrà il salvataggio.
Affinchè le nuove modifiche abbiano effetto, occorre salvare il nostro menù con il nome
<custom> all'interno della cartella \exe\custom dell'applicazione o in alternativa all'interno
della cartella exe\ In questo modo, ogni volta che riavveremo la procedura, il nostro file
verrà caricato e il menù sarà modificato di conseguenza.
Si può ancora fare di più: è infatti possibile associare un menù ad ogni utente o ad ogni
gruppo semplicemente salvando il nostro lavoro come <Custom_> seguito dal numero
1 1 4
V I S U A L
M E N Ù
V I S U A L
T O O L
G U I D E
dell'utente; per il gruppo la sintassi è leggermente differente: <Custom_G> seguito dal
numero del gruppo.
5.6 Esempi
In questa sezione esamineremo con alcuni esempi l'inserimento la cancellazione e la modifica
delle voci di menù.
5.6.1 Come inserisco una nuova voce al menù
principale?
Per inserire una nuova voce al menù principale, il modo più semplice è il seguente.
Apriamo il disegnatore di menù da "Utility/Disegnatore Menù".
Una volta visualizzata la maschera, se è già stato creato un proprio menù custom, agire sul
pulsante Apri della toolbar e caricare il menù interessato.
In questo modo, nella toolbar di sinistra, comparirà il menù appena caricato.
Se non è ancora stato creato un menù custom, non caricare nulla.
In ogni caso, per inserire una nuova voce, andiamo nella vista di destra e ricerchiamo il menù
al quale vogliamo agganciare una voce: supponiamo sia quello mostrato in figura:
V I S U A L
M E N Ù
1 1 5
V I S U A L
T O O L
G U I D E
Figura 109 - Un
esempio di
inserimento prima
della voce
selezionata
Una volta individuata la voce, non ci resta che cliccare sul pulsante "Opt ^" , se vogliamo
inserire un'opzione prima della voce selezionata; "Opt v" se vogliamo inserire un'opzione
dopo la voce selezionata.
Apparirà una nuova opzione che comparirà nella posizione voluta, come da figura.
1 1 6
V I S U A L
M E N Ù
V I S U A L
T O O L
G U I D E
Figura 110 - Il
risultato in
esecuzione
5.6.2 Come cancello una nuova voce dal menù
principale?
Cancellare una voce dal menù Principale è molto semplice.
Apriamo il disegnatore di menù da "Utility/Disegnatore Menù".
Una volta visualizzata la maschera, se è già stato creato un proprio menù custom, agire sul
pulsante Apri della toolbar e caricare il menù interessato.
In questo modo, nella toolbar di sinistra, comparirà il menù appena caricato.
Se non è ancora stato creato un menù custom, non caricare nulla.
In ogni caso, per cancellare una nuova voce, andiamo nella vista di destra e ricerchiamo il
menù o la voce che vogliamo eliminare: supponiamo sia tutto il menù degli Archivi:
V I S U A L
M E N Ù
1 1 7
V I S U A L
T O O L
G U I D E
Figura 111 - Un
esempio di
cancellazione della
voce selezionata
A questo punto, una volta individuato Archivi e selezionato, clicchiamo sul bottone
"Elimina".
Nella vista di destra vedremo comparire un nuovo menù con un'icona particolare: noteremo
inoltre che è stato inizializzato il "Percorso" ed è stato settato il Flag Cancellato.
Salviamo il menù come <Custom_<numero utente>> (vedere sezione salvataggi e gestione
utenti) e riavviamo l'applicazione.
Il risultato sarà il seguente:
Figura 112 - Il
risultato in
esecuzione
1 1 8
V I S U A L
M E N Ù
V I S U A L
T O O L
G U I D E
5.6.3 Come sposto una voce dal menù
principale?
In realtà, lo spostamento vero e proprio di una voce di menù non è possibile.
Ciò che occorre fare è ricorrere ad un piccolo trucchetto, vale a dire creare un menù con la
voce che vogliamo spostare in modo tale che si possa settare il percorso con la nuova
posizione; quindi creiamo una voce che cancelli il menù nella vecchia posizione.
Vediamo un esempio:
Supponiamo di voler spostare il menù "Archivi" dopo il menù "Magazzino".
Apriamo il disegnatore di menù da "Utility/Disegnatore Menù".
Una volta visualizzata la maschera, se è già stato creato un proprio menù custom, agire sul
pulsante Apri della toolbar e caricare il menù interessato.
In questo modo, nella toolbar di sinistra, comparirà il menù appena caricato.
Se non è ancora stato creato un menù custom, non caricare nulla.
In ogni caso, per spostare la voce come da esempio, andiamo nella vista di destra e
ricerchiamo il menù Archivi: facciamo doppio click sulla voce.
Figura 113 - Un
esempio di
spostamento della
voce selezionata
Il doppio click ha la funzione di copiare il menù Archivi, con tutto ciò che vi è al suo interno,
nel menù di sinistra.
V I S U A L
M E N Ù
1 1 9
V I S U A L
T O O L
G U I D E
A questo punto selezioniamo a sinistra proprio il menù appena inserito (Archivi) per
inizializzare i campi: dobbiamo inserire il Percorso.
Quello che vogliamo è che la voce venga messa dopo il menù "Magazzino".
Quindi spostiamoci di nuovo a destra e selezioniamo "Magazzino" come da figura.
Figura 114 - Un
esempio di
spostamento della
voce selezionata
Clicchiamo ora su "Percorso", in modo tale da riempire il campo associato; impostiamo la
combo "Posizione" su "Dopo".
Quello che abbiamo fatto è stato clonare "Archivi" in modo tale che venga inserito dopo
"Magazzino".
Se salvassimo ora il nostro menù come <Custom_<numeroUtente>> avremmo la voce
"Archivi" del menù principale duplicata.
Quindi per simulare lo spostamento desiderato, dobbiamo cancellare "Archivi" dalla
posizione originale.
Sempre nel nostro menù, posizioniamoci a destra su "Archivi" e clicchiamo sul bottone
Elimina.
1 2 0
V I S U A L
M E N Ù
V I S U A L
T O O L
G U I D E
Figura 115 - Un
esempio di
spostamento della
voce selezionata
Vedremo comparire a sinistra un "Menù" con un'icona particolare che ci indica che quel
menù verrà cancellato. Selezioniamolo e noteremo che questa voce ha il percorso
inizializzato e il flag "Cancellato" settato.
Salviamo il nostro menù personalizzato come <Custom_<numeroUtente>> (vedere sezione
salvataggi e gestione utenti), e riavviamo la procedura: l'effetto sarà il seguente.
Figura 116 - Un
esempio di
spostamento della
voce selezionata in
esecuzione
V I S U A L
M E N Ù
1 2 1
Scarica

Visual Tool Guide