Gestione e modifica dei Report a Run-Time
© Articolo di: Fabrizio Garinetti © Agosto 2002 - Riproduzione vietata
Sono riuscito a scrivere questo articolo grazie ai vari interventi della mailing list, seguendo queste istruzioni sarà possibile modificare e personalizzare i report direttamente dal cliente.
Nell'analisi delle applicazioni che sviluppo metto in conto la manutenzione veloce dei report, penso sia capitato a molti che i clienti richiedono variazioni minime causandoci perdite di tempo e pazienza!
Tra le varie opzioni dell'applicazione ho introdotto la gestione di una tabella STAMPE.DBF dove indico:
· la procedura/e che la utilizza
· una descrizione sintetica del report,
· il nome del file frx
· e un flag che mi indica se è etichetta.
All'interno delle varie procedure sarà sempre aperta la tabella STAMPE.DBF e chiaramente ci sarà il pulsante relativo alla stampa dove verranno passati i parametri necessari per la selezione del report.
Esempio - Pulsante Stampa
. routine di elaborazione ..
.....
. fine elaborazione ..
** In base alla procedura si filtra la tabella STAMPE
FILTRO= NOME DEL FILE
SELECT STAMPE
SET FILTER TO STAMPE.PRN_FILE=FILTRO
** mi posiziono sulla tabella principale potrebbe essere anche un cursor
SELECT (THISFORM.TABELLA_DA_STAMPARE)
GO TOP
** chiamata oggetto
LOCAL OSEARCHDLOG
LOCAL LVISCHANGE,LSTATECHANGE
OSEARCHDLOG = CREATE("SELSTMP")
OSEARCHDLOG.SHOW()
La form SELSTMP appartiene a una classe basata sul generico Form.
La Grid elencherà i record filtrati della tabella stampe e tramite il pulsante Modifica Rep permetterà di modificare il report
Gli oggetti definiti all'interno del form sono:
· Grid
· Pulsante 1
· Pulsante 2
· Pulsante 3
· OptionGroup
Evento INIT del form:
* Salvo area del file da stampare
thisform.FILEDASTAMP=ALIAS()
* inizializzo l'eventuale finestra di visualizzazione dei risultati
DEFINE WINDOW anteprima FROM 1,1 TO 29,75 TITLE 'Anteprima' CLOSE FLOAT GROW SHADOW ZOOM MINIMIZE SYSTEM
* la dimensiono già al massimo possibile
ZOOM WINDOW "anteprima" MAX
* mi posiziono in testa del File Stampe filtrato in precedenza
SELECT STAMPE
GO TOP
* mi posiziono sulla griglia
THISFORM.GRID.SETFOCUSLa Grid visualizzerà solo i report che appartengono alla singola procedura
Evento DESTROY del form:
* rilascio l'eventuale finestra di visualizzazione dei risultati
RELEASE WINDOW ANTEPRIMACodice Pulsante Modifica Report
Tramite questo codice si abilita la modifica del report:
SET SYSMENU TO _MFILE, _MVIEW
DEFINE PAD _MSM_VIEW OF _MSYSMENU AFTER _MSM_EDIT PROMPT "\<VIEW" COLOR SCHEME 3 KEY ALT+V, "" MESSAGE "CHANGES DISPLAY OPTIONS"
ON PAD _MSM_VIEW OF _MSYSMENU ACTIVATE POPUP _MVIEW
DEFINE POPUP _MVIEW MARGIN RELATIVE SHADOW COLOR SCHEME 4
DEFINE BAR _MVI_TOOLB OF _MVIEW PROMPT "\<TOOLBARS..." MESSAGE "SHOWS, HIDES, OR CUSTOMIZES TOOLBARS"
SYS(1500, '_MVI_TOOLB', '_MVIEW')
LOCAL LOLDSCREENVISIBLE
LOLDSCREENVISIBLE = _SCREEN.VISIBLE
_SCREEN.VISIBLE = .T.
** si controlla se etichetta o report
IF !STAMPE.PRN_ETIC
MODIFY REPORT (STAMPE.PRN_NOME)
ELSE
MODIFY LABEL (STAMPE.PRN_NOME)
ENDIF
_SCREEN.VISIBLE = LOLDSCREENVISIBLEIn questo modo sarà possibile:
· modificare o salvare i report con un altro nome
· agganciare un nuovo report tramite la gestione della tabella stampe.Codice Pulsante OK
si verifica se si deve stampare etichette o report
.si lancia la stampa o l'anteprimaCodice Pulsante CANC
.. si rilascia il form
Conclusioni:Tutti noi in base alla propria esperienza prendiamo strade diverse per lo sviluppo di applicativi, ovviamente il "bello" della programmazione è la molteplicità di percorsi differenti che ognuno di noi può ideare, per questo motivo non dobbiamo sottovalutare l'importanza della trasmissione di conoscenze che può aiutare ad accrescere il nostro apprendimento.
Grazie per aver letto questo articolo flash sperando che a qualcuno sia stato di aiuto ;-)
© Articolo di: Fabrizio Garinetti © Agosto 2002 - Riproduzione vietata
© FoxPro e Visual FoxPro sono un marchi registrati da Microsoft Corporation
dal 22 Giugno 1999