Perchè utilizzare i gestori
1) Ottimizzano le letture nel file - il gestore è come una working-list, ad ogni richiesta di record controlla se tale record non sia già presente nella lista e se non lo trova lo carica
2) Migliorie rispetto alla call ad un programma utility:
è più veloce in quanto definito internamente alla funzione
posso leggere solo i campi che mi interessano, non mi vengono "restituiti" tutti gli altri
libera dall'obbligo di sapere su quali campi passare le chiavi di lettura
3) Libera l'utente dal sapere le posizioni dei campi nelle tabelle monorecord -
4) Si ha la possibilità di creare gestori che correlano le informazioni di + files - un esempio quello delle taglie "normali / raggruppate" con una sola operazione posso farmi ritornare
sia le numerate che i raggruppamenti
5) Posso definire i gestori come *DEFERRED pertanto verranno creati solo all'effettivo utilizzo
6) Progressivi - nel gestore viene inglobata la parte che blocca il progressivo, lo aumenta e lo sblocca
Gestore
Nel caso in cui si crei un oggetto Record/Gestore/WAM/Prompter per le tabelle, si deve sempre aggiornare il documento
\\Pcserver\DATIEMME\Documentazione Progetti\EMMEDATA\TABELLE APPLICATIVE\Elenco Tabapp + gestori.xls
per la linguetta "Tabelle con Oggetti"
Prima di creare il gestore controllare se non esiste già con il form EDUTGEST
Template di riferimento: EDTBRECORD / EDTBGESTOR / EDTBSINGOL / EDTBREADPR
I Gestori per le Tabelle sono stati concepiti per facilitare l'utilizzo e la lettura delle Tabelle Applicative e delle Impostazioni dei Programmi.
I Gestori si dividono quindi in 2 tipi:
- Tabelle Applicative (con una o più chiavi)
- Tabella Impostazioni (SAXT00f o FILT00F)
Per le tabelle applicative (Es: Nazioni, Stagioni, Agenti) si crea il record tramite EDTBRECORD, quindi si crea il gestore tramite EDTBGESTOR.
Dovete modificare il gestore solo se la tabella ha più chiavI, seguendo i commenti all'interno del programma.
Per le Tabelle Impostazioni creare il record tramite EDTBRECORD poi implementare tutte le proprietà dell'oggetto con i nomi dei campi utilizzati per le substring:
se il vecchio programma utilizzava per esempio SAXTFL01 creare la proprietà up_SAXTFL01 e cosi via...
Se possibile specificare nella descrizione il campo origine, posizione substring e lunghezza.
DEFINE_PTY NAME(up_SAXTFL01) GET(*auto £SAXTFL01) SET(*auto £SAXTFL01) HELP('Indica un flag. SXDE 1 5')
Quindi creare il gestore tramite EDTBSINGOL seguendo i commenti all'interno del programma.
**** IMPORTANTE ******
Per le tabelle singole che hanno al loro interno un progressivo, questo DEVE essere gestito (letto/scritto) tramite un apposito metodo la cui struttura è questa:
MTHROUTINE Name(um_LeggiProgressivo) Help('Lettura Progressivo con aggiornamento')
DEFINE_MAP FOR(*INPUT) Class(£PRIM_BOLN) Name(£p_Blocca) Mandatory(TRUE)
DEFINE_MAP FOR(*RESULT) Class(<Campo Progressivo>) Name(£p_Progressivo)
<BLOCCAGGIO DEL RECORD>
<LETTURA PROGRESSIVO>
<INCREMENTO PROGRESSIVO>
<MEMORIZZAZIONE PROGRESSIVO>
<SBLOCCAGGIO DEL RECORD>
ENDROUTINE
E' stata modificata la Template EDTBSINGOL in modo da includere le relative modifiche.
E' stata creata la Template EDTBREADPR con solo il metodo per poter essere implementato.
Programma
Template di riferimento: EDVLFWFILT / EDVLFWTABE / EDVLFWPRG
Il programma di manutenzione va creato all'interno del FrameWork "Tabelle Applicative" sotto l'applicazione relativa al modulo.
Possono essere create 3 tipi di Tabelle
1) Tabelle con un singolo command (solitamente quelle di Impostazione) Es: TBBU003C (Conto Lavoro / Impostazioni Base)
2) Tabelle con filtri visibili + instance-list + command Es: TBED001F (Tabelle Comuni / Agenti)
3) Tabelle con filtri nascosti + instance-list + command Es: TBPR018F (Produzione / Reperti di produzione)
In ogni programma aggiungere una fast-part checkbox di nome 'FP_RCKCLS' in una tabella di 1 riga e 1 colonna almeno 3 invii sotto l'ultimo campo a video.
Questo serve per l'opzione "Chiudi Finestra" per scegliere se fare l'inserimento consecutivo o meno.
Nel command-handler di gestione le assegnazioni dei campi non dovranno essere più fatte con le variabili
*MTXTVAR0001/*MTXTVAR0002/*MTXTVAR0003/*MTXTVAR0004 bensì con i corrispettivi valori fissi
S/N/SI/NO
N.B. se il vecchio programma gestisce 2 file per le stesse informazioni di cui uno è il vecchio file (es.SAXT00F)
e uno è il nuovo file (es. PRTBLN) la gestione del vecchio file deve essere fatta nel Command Handler e non
nel Gestore/Record
Tutti gli esempi possono essere consultati direttamente dal framework delle "Tabelle Applicative"
Per le tabelle che gestiscono progressivi occorre implementare il codice di controllo per la memorizzazione del progressivo (fare riferiemento a TBBU003C):
<Includere nella WEB_MAP (*BOTH) tipo (*HIDDEN) un campo in cui memorizzare il progressivo corrente>
Nell'evento "Execute"
<Leggere il progressivo ed assegnarlo al campo a video ed al campo nascosto>
Nell'evento "Salva"
<Assegnazione dei Campi>
<Blocco del Record>
<Se progressivo cambiato: messaggio di avviso e non salvo>
<Memorizzazione del Record>
<Sblocco>
E' stata creata la template EDVLFWPRG per inserire il codice relativo
Stampa
La stampa della tabella avviene richiamando il metodo "um_PrintList" implementato all'interno del gestore.
MTHROUTINE NAME(um_PrintList) OPTIONS(*REDEFINE)
Dato che i gestori sono creati tutti con lo stesso anchestor per effettuare la stampa attenersi alle seguenti regole:
1) Nel FrameWork, agganciare il command "Stampa" all'oggetto tabella ed impostarlo come "Business Object Command"
COSA MOLTO IMPORTANTE E' IMPOSTARE COME "ALPHA ARGUMENT 1" IL NOME DEL GESTORE CHE
GESTIRA' LA STAMPA (IN PRATICA QUELLO DELLA TABELLA)
Utilizzare Alpha Argument 2 impostato ad "N" se non occorre gestire il flag "Escludi Annullati"
Impostare come "Command Handler" SEMPRE la wam TBEDPRTB
Il resto viene da se!
**** NOTA BENE *****
Per la modifica dei gestori esistenti basta posizionarsi subito prima del comando END_COM, far girare la template "EDTBMTHPRT" e
seguire le istruzioni a video (in pratica solo la richiesta del file per recuperare i campi).
Fatto questo ricompilare il gestore.
La struttura genera il file DBF con il nome del Gestore e cerca il report con il nome del Gestore.
Per la creazione del report attenersi alle regole generali per le stampe in Crystal Report con l'unica eccezione di
utilizzare il Layout Verticale per la stampa in quanto le tabelle non hanno mai tanti campi.
Disegno della videata XSL
Filtri
Per le label dei campi di ricerca utilizzare la dicitura "Da Codice" (*MTXTEDDACODICE) e "A Codice" (*MTXTEDACODICE)
e mettere i campi in orizzontale.
NON mettere le pop-up di ricerca
Formattare la pagina tipo questo esempio: (WAM TBPR009F)
Utilizzo
Gestori Standard
Instanziare il Gestore all'interno del programma chiamdolo £vi_<Nome del File che Gestisce>
Per leggere un record utilizzare il metodo um_GetItem(<Chiave>).up_<Nome del campo dal leggere>
La proprietà up_Lista và utilizzata in un ciclo for SOLO DOPO aver chiamato il metodo um_LoadListFromFile
Nel caso che il file gestisca gli annullati occorre passare il parametro £p_IncludiAnnullati in questo modo:
um_LoadListFromFile P_ESCLUDIANNULLATI(*Not £p_IncludiAnnullati)
Il metodo um_ItemExist(<Chiave>) controlla l'esistenza di un record. Restituisce TRUE o FALSE
Gestori Impostazioni
Instanziare il Gestore all'interno del programma chiamdolo £vi_<Nome del File che Gestisce>
Per leggere un record utilizzare la proprietà up_Record.up_<Nome Campo>
La proprietà up_Exist controlla se il record di impostazione esiste. Restituisce TRUE o FALSE
La lettura del progressivo va fatta in questo modo: um_LeggiProgressivo p_Progressivo(<Campo>)
Per entrambi i Gestori e solo per il programma di manutenzione delle Tabelle instanziare anche l'oggetto record come £vi_Record,
inizializzarlo con i valori a video e passarlo ai metodi um_Insertitem o um_UpdateItem