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