Strumenti Utente

Strumenti Sito


sviluppo:cityware_superclassi

Request Dispatching

La classe controller.php del framework itaEngine svolge la funzione di dispatcher: ad ogni evento della pagina corrisponde una chiamata ajax che invia al server diverse informazioni, alcune indispensabili per identificare la classe ed il metodo con cui quest'ultimo dovrà rispondere all'evento:

model Nome model form (Es. cwbBtaGrunaz)
event Evento scatenante (Es. onClick)
id Componente scatenante (Es. cwbBtaGrunaz_Nuovo)
nameform Nome instanza (solitamente corrisponde con il nome del model

La richiesta verrà inoltrata ad un model form, la cui classe php è situata obbligatoriamente all'interno della cartella apps; per quanto riguarda la sottocartella, invece, occorre vedere le prime tre lettere di model, e vedere il valore corrispondente presente nella classe lib/AppDefinitions/AppDefinitions.php. Nell'esempio, il prefisso cwb corrisponde a CityBase, pertanto il file php che risponde alla richiesta, per modelform=cwbBtaGrunaz, è apps/CityBase/cwbBtaGrunaz.php

Casi d'uso

Le tipologie di finestre che possono essere gestite con il framework possono essere raggruppate secondo questa classificazione:

Tipologia Descrizione
Tabella di gestione CRUD Consente di effettuare le classiche operazioni di ricerca, inserimento, aggiornamento, cancellazione su una determinata tabella mediante una rappresentazione tabellare. E' composta da tre elementi: ricerca - paginazione - dettaglio.
Albero Come sopra, solo che la rappresentazione dei dati, anzichè essere tabellare, è fatta utilizzando una “TreeTable”. Utilizzare quando la tabella presenta una struttura gerarchica.
Mono-record Consente di inserire/modificare l'unico record presente in tabella. Sulla base di questo, la struttura, rispetto ad una tabella di gestione tradizionale, è semplificata, in quanto non è presente la paginazione con una griglia di risultati, ma si accede direttamente al dettaglio (se il record non esiste, si effettuerà un inserimento, altrimenti si andrà in aggiornamento. In questo tipo di gestione non è prevista la cancellazione.
Finesta “fuori standard” Rientrano in questa casistica tutte le altre casistiche (console, monitor, programmi di stampa, programmi di elaborazione). Queste finestre, essendo tutte diverse tra di loro, avranno una gestione propria, che va vista caso per caso.

Tabella classica di gestione (CRUD) semplice

Esempio: cwbBtaGrunaz

Metodi da specificare (obbligatori)

Metodo Descrizione
initVars Valorizzare le variabili: GRID_NAME, AUTOR_NAME, AUTOR_NUMERO, searchOpenElenco e libDB
postSqlElenca Valorizzare la variabile SQL utilizzata per caricare l'elenco di paginazione (Utilizzare un metodo in una lib, è buona norma non scrivere l'istruzione SQL all'interno della classe di gestione della form
sqlDettaglio Valorizzare la variabile SQL utilizzata per caricare il singolo record (Utilizzare un metodo in una lib, è buona norma non scrivere l'istruzione SQL all'interno della classe di gestione della form

Metodi da specificare (facoltativi)

Metodo Descrizione
postApriForm Inizializzazione combo di gestione; impostazione del focus sul campo desiderato.
postAltraRicerca Impostazione del focus sul campo desiderato.
postNuovo In questo caso, sblocca il campo chiave perchè deve essere specificato manualmente; impostazione del focus sul campo desiderato.
postAggiungi Impostazione del focus sul campo desiderato.
setGridFilters Impostazione dei filtri provenienti dalle colonne della grid.
elaboraRecords Formatta l'output della grid.

Tabella classica di gestione (CRUD) complessa

TODO: completare

Albero

Esempio: cwbBorOrgan

Metodi da specificare (obbligatori)

Metodo Descrizione
initVars Valorizzare le variabili: GRID_NAME, AUTOR_NAME, AUTOR_NUMERO, searchOpenElenco e libDB
caricaNodiPrimoLivello Effettua il caricamento dei soli nodi al primo livello. Demandare l'operazione di caricamento ad una apposita lib.
caricaFigli Effettua il caricamento dei figli, dato in ingresso l'identificativo del nodo padre. Demandare l'operazione di caricamento ad una apposita lib.
getLivello Restituisce il livello del nodo corrente dell'albero.
caricaAlbero Effettua il caricamento dell'albero, applicando i filtri di ricerca
caricaGerarchiaNodo Effettua il caricamento di tutti i nodi padre relativi al nodo passato come parametro in ingresso
cercaPadre Restituisce il record padre del record selezionato
postElaboraNodiCaricati Effettua un ordinamento dell'array
livelloDaNodo Restituisce il livello del nodo specificato in ingresso
parentDaAlbero Restituisce il codice padre relativo al nodo specificato in ingresso
getFoglia Restituisce TRUE se il nodo passato come parametro è una foglia, altrimenti FALSE
expandedDaCaricamento Controlla se presenti figli nell'albero caricato per il nodo corrente (se si, restituisce TRUE, altrimenti FALSE)

Metodi da specificare (facoltativi)

Metodo Descrizione
postApriForm Inizializzazione combo di gestione; impostazione del focus sul campo desiderato.
postAltraRicerca Impostazione del focus sul campo desiderato.
postNuovo In questo caso, sblocca il campo chiave perchè deve essere specificato manualmente; impostazione del focus sul campo desiderato.
postAggiungi Impostazione del focus sul campo desiderato.
setGridFilters Impostazione dei filtri provenienti dalle colonne della grid.
elaboraRecords Formatta l'output della grid.

Finestra mono-record

Esempio: cwbBgdParott

Metodi da specificare (obbligatori)

Metodo Descrizione
initVars Valorizzare le variabili: GRID_NAME, AUTOR_NAME, AUTOR_NUMERO, searchOpenElenco e libDB
sqlDettaglio Valorizzare la variabile SQL utilizzata per caricare il singolo record (Utilizzare un metodo in una lib, è buona norma non scrivere l'istruzione SQL all'interno della classe di gestione della form

Metodi da specificare (facoltativi)

Metodo Descrizione
postApriForm Inizializzazione combo di gestione; impostazione del focus sul campo desiderato.
postAltraRicerca Impostazione del focus sul campo desiderato.
postNuovo In questo caso, sblocca il campo chiave perchè deve essere specificato manualmente; impostazione del focus sul campo desiderato.
postAggiungi Impostazione del focus sul campo desiderato.
setGridFilters Impostazione dei filtri provenienti dalle colonne della grid.

Finestre fuori standard

Monitor Eventi

Esempio: cwbBgeMonitor

Questo caso è abbastanza simile ad una finestra CRUD, infatti la classe estende la superclasse cwbBpaGenTab. Una particolarità importante è che il metodo elenca è abbastanza differente da quello standard, per questo motivo è stato completamente sovrascritto.

Console Diagnostica

Esempio: cwbDiagnostica

In questo caso, la classe estende semplicemente itaFrontController in quanto non deve lavorare con il database, ma lanciare dei test per una diagnostica di secondo livello. Anche a livello di generator la struttura della pagina sarà molto diversa da una pagina CRUD tradizionale. L'unico punto in comune con le CRUD può essere quindi solamente il parseEvent.

Finestra mono-record con tabella senza la chiave primaria

TODO: descrivere il caso specifico

Superclassi

Per soddisfare la richiesta, una classe model form deve estendere obbligatoriamente una delle due classi sotto descritta:

itaModel Superclasse originale presente nel framework. Utilizzata in diversi applicativi.
itaFrontController Superclasse introdotta con la modifica del multi-database e dei service. Utilizzata negli applicativi City*

In questa sezione verrà descritto il filone di itaFrontController.

Gerarchia

Diagramma UML:

itaFrontController

Variabili private principali

nameForm nome grafico della form, può essere sostituito con un alias nel caso di finestre che richiamano se stesso (es btaVieOriginali)
nameFormOrig Nome form originale, da usare per accedere al modello (es btaVie)
wizardParameters Serve per passare dei parametri tra una form e l'altra nel caso venga usata all'interno di un wizard (2)
TABLE_NAME Nome tabella
TABLE_VIEW Nome vista usata per la ricerca
modelService Oggetto modelService per operazioni di inserimento-modifica-cancellazione su database
helper Oggetto helper (serve per accentrare operazioni comuni tra gli stelli livelli della gerarchia)
CITYWARE_DB Connessione al database Cityware (1)
GRID_NAME Nome jqGrid (2)
AUTOR_MODULO Check autorizzazioni: modulo da controllare (3)
AUTOR_NUMERO Check autorizzazioni: numero autorizzazione da controllare (3)
formData Dati passati alla form, filtrati e bonificati dall'array $_POST
returnModel Modello di rientro dai lookup
returnNameForm nameform di rientro dai lookup (in caso di alias è diverso da model)
returnEvent event di rientro dai lookup
returnId id che ha causato il rientro di rientro dai lookup

NOTE:
(1) = TODO: Fare refactor del nome della variabile.
(2) = Questa variabile non dovrebbe essere posizionata in questo livello gerarchico, ma in un sottolivello. Per ora è stato messo qui per comodità, in modo da avere la variabile sempre a disposizione
(3) = TODO: Spostare queste variabili, in modo da rendere la classe agnostica rispetto a Cityware.

Variabili utilizzate in sessione

Ci sono alcune variabili che vengono scritte in sessione al distruttore della classe, e rilette dalla sessione alla request successiva. Sono le seguenti:

  • perms
  • formData
  • modelConfig
  • returnModel
  • returnNameForm
  • returnEvent
  • returnId
  • procObj
  • eqAudit

Utilizzo del modelService

Metodo Descrizione Esempio
initModelService Qui è dove viene istanziato il modelService $this→modelService = itaModelServiceFactory::newModelService($this→nameFormOrig);
insertAudit Inserimento evento su tabella di audit di sistema $this→modelService→insertAudit($DB, $tableName, $data, $opCode);
openRecord Apertura record $this→modelService→openRecord($DB, $tableName, $data);
insertRecord Inserimento record $this→modelService→insertRecord($DB, $tableName, $data, $record_Info);
updateRecord Aggiornamento record $this→modelService→updateRecord($DB, $tableName, $data, $record_Info);
deleteRecord Cancellazione record $this→modelService→deleteRecord($DB, $tableName, $dataPk, $record_Info);
getLastInsertId Recupera ultimo id inserito $this→modelService→getLastInsertId();
setLastInsertId Imposta ultimo id inserito (in caso di gestione progressivo calcolato manualmente) $this→modelService→setLastInsertId($lastInsertId);

Utilizzo del modelService all'interno di una lib

Il modelService può essere utilizzato in qualsiasi punto dell'applicazione, comprese le lib. Per prima cosa, occorre istanziarlo, quetso è possibile farlo attraverso la factory cwbModelServiceFactory:

$modelService = cwbModelServiceFactory::newModelService($modelName);

se non si conosce il nome del model, ma solo della table, è possibile risalire all'informazione utilizzando il metodo modelNameByTableName di cwbModelHelper:

$modelService = cwbModelServiceFactory::newModelService(cwbModelHelper::modelNameByTableName($tableName));

A questo punto, è possibile utilizzarlo all'interno del punto dove è stato definito, es:

$rec = $modelService->getByPks($DB(), $tableName, $values);  

Eventi gestiti nel metodo parseEvent

  • openform
  • openportlet
  • startProcess
  • endProcess
  • broadcastMsg
  • refreshProcess

cwbBpaGenModel

Variabili private principali

CURRENT_RECORD Array che contiene il record corrente
RECORD_INFO Array che contiene le informazioni sul record per audit
PK Array chiavi primaria
ALIAS Alias finestra (per istanze multiple)
LOCK Array che identifica un lock logico
libDB Libreria Database
gridFilters Array che contiene i filtri sulla jqGrid
detailView Libreria Database
filtriFissi Array di filtri fissi
hasSequence true se la tabella ha la sequence
modelData Dati da passare al ModelService per validazione/salvataggio
noCrud indica se la pagina deve gestire o meno le operazioni di crud
SQL
masterRecord Record principale (per master-detail)
flagSearch Indica se la finestra è stata chiamata in ricerca
externalParams Array che contiene i parametri esterni
searchOpenElenco Indica se in fase di search la finestra deve presentare subito l'elenco
authenticator Oggetto Authenticator
printStrategy Print Strategy (Omnis Report/Jasper)
operationsData Operazioni (U/D, la insert non va specificata, se è senza pk inserisco diretto) effettuate sulle tabelle relazionate (array('nameForm' ⇒ array('relationTableName' ⇒ array('operation' ⇒ 'I/U/D','guuid' ⇒ 'xxx', 'pks'⇒ array('key'⇒'value'))))
operationMapping contiene i riferimenti con il data su $operationsData
skipAuth se true salta il controllo sulle autorizzazioni
omnisReportName Nome report Omnis
openDetailFlag Flag che indica se deve segnalare o meno l'apertura di una pagina di dettaglio.
actionAfterNew Prende una costante GOTO_*, indica cosa fare dopo aver creato un nuovo elemento.
actionAfterModify Prende una costante GOTO_*, indica cosa fare dopo aver modificato un elemento.
elencaAutoAudit Se impostato a true abilita la gestione automatica delle colonne di audit (CODUTE e DATAORAOPER).
elencaAutoFlagDis Se impostato a true abilita la gestione automatica delle colonne dell'abilitazione (FLAG_DIS).

Variabili utilizzate in sessione

  • flagSearch
  • detailView
  • externalParams
  • autorLevel
  • stopEvent
  • operationsData

Eventi gestiti nel metodo parseEvent

Evento Descrizione Comportamento
openForm Apertura della form Se si tratta di una gestione master-detail, e alla form corrente viene passato il masterRecord, richiama il metodo elenca. Nel caso di una gestione tradizionale, viene richiamato il metodo apriForm (se presenti dei filtri esterni - externalParams valorizzato - prima di chiamare apriForm lancia il metodo initExternalFilter.
dbClickRow Doppio click sulla griglia di paginazione dei risultati Se la finestra è stata richiamata da binocolo, lancia il metodo ricercaEsterna in modo da poter effettuare una lookup. Se invece la finestra è stata richiamata in modo tradizionale, ricade nella stessa casistica di editGridRow.
editGridRow Click su pulsante modifica della griglia di paginazione Lancia il metodo dettaglio, che imposta la finestra nel pannello di dettaglio del record selezionato.
addGridRow Click su pulsante aggiungi della griglia di paginazione Lancia il metodo nuovo, che imposta la finestra nel pannello di dettaglio del record selezionato, predisponendosi per l'inserimento di un nuovo record.
delGridRow Click su pulsante elimina della griglia di paginazione Lancia il metodo cancella, che mostra a video una dialog di conferma per la cancellazione del record selezionato.
onClick Click su un qualsiasi componente della pagina “cliccabile” Nella superclasse vengono gestiti i pulsanti della buttonbar che sono presenti in tutte le finestre.
onClickTablePager Click su pulsante refresh della griglia Lancia il metodo elenca per caricare i record, in funzione dei filtri impostati. N.B.: Questo evento scatta automaticamente dopo il primo ridimensionamento grafico della pagina, in modo da calcolare esattamente il numero di record che possono essere effettivamente visualizzati nella griglia, in funzione delle dimensioni dello schermo.
printTableToHTML Click su pulsante stampa della griglia Lancia il metodo stampaElenco. La stampa viene effettuata in funzione di printStrategy (Omnis/Jasper).
exportTableToExcel Click su pulsante esporta in Excel della griglia Lancia il metodo exportXLS.

Click su ButtonBar

Nella superclasse sono sttai gestiti i pulsanti presenti in tutte le form:

Nome Pulsante Descrizione Metodo corrispondente
Nuovo Preparazione per creazione nuovo record nuovo
Aggiungi Inserimento nuovo record aggiungi
Aggiorna Aggiornamento nuovo record aggiorna
Cancella Richiede conferma per cancellazione record selezionato cancella
ConfermaCancella Cancella record confermaCancella
Elenca Effettua ricerca e mostra i risultati nella griglia elenca
AltraRicerca Imposta la pagina sui filtri, per cosentire di effettuare una nuova ricerca altraRicerca
Torna Ritorna a elenco risultati tornaAElenco
CaricaParametriRicerca Effettua il caricamento dei parametri di ricerca da database caricaParametriRicerca
SalvaParametriRicerca Effettua il salvataggio dei parametri di ricerca su database salvaParametriRicerca
ResetParametriRicerca Pulisce i parametri di ricerca a video resetParametriRicerca
ConfermaWarning Conferma i messaggi di warning A seconda dell'operazione effettuata in precedenza, lancia il metodo giusto: nel caso di inserimento, lancia aggiungi; se aggiornamento, lancia aggiorna; se cancellazione, lancia confermaCancella

Azioni e punti di personalizzazione

Di seguito, un elenco di tutti i metodi che possono essere sovrascritti al bisogno nelle sottoclassi, raggruppati per funzione.

Nuovo

Metodo Descrizione Quando utilizzarlo
preNuovo Viene lanciato all'inizio del metodo, prima di effettuare qualsiasi operazione. Pulizia dei campi a video, inizializzazione di combo box
postNuovo Viene lanciato alla fine del metodo. Aggiustamenti grafici dei campi a video (Es. campi readonly, applicazioni di classi/stili css), impostazione del focus sul campo desiderato

Aggiungi

Metodo Descrizione Quando utilizzarlo
preAggiungi Viene lanciato all'inizio del metodo, prima di effettuare qualsiasi operazione Normalizzazione valori $_POST, controlli aggiuntivi, inizio transazione manuale (casistiche particolari, vedi cwbBtaSogg)

Aggiorna

Metodo Descrizione Quando utilizzarlo
preAggiorna Viene lanciato all'inizio del metodo, prima di effettuare qualsiasi operazione Vedi preAggiungi

Conferma Cancella

Metodo Descrizione Quando utilizzarlo
preConfermaCancella Viene lanciato all'inizio del metodo, prima di effettuare qualsiasi operazione Inizio transazione manuale (casistiche particolari, vedi cwbBtaSogg)

Elenca

Il metodo deve essere implementato nelle sottoclassi.

Altra Ricerca

Metodo Descrizione Quando utilizzarlo
preAltraRicerca Viene lanciato dopo lo sblocco della chiave Impostazione autocomplete campi, per casistiche particolari (vedi cwbBorOrgan)
postAltraRicerca Viene lanciato alla fine del metodo Impostazione del focus sul campo di ricerca desiserato

Torna A Elenco

Metodo Descrizione Quando utilizzarlo
preTornaElenco Viene lanciato dopo lo sblocco della chiave Previsto per casi particolari, mai utilizzato
postTornaElenco Viene lanciato alla fine del metodo Visualizzazione pulsanti custom nella button bar

Carica parametri di ricerca

Metodo Descrizione Quando utilizzarlo
postCaricaParametriRicerca Viene lanciato alla fine del metodo Previsto per casi particolari, mai utilizzato

Salva parametri di ricerca

Metodo Descrizione Quando utilizzarlo
postSalvaParametriRicerca Viene lanciato alla fine del metodo Previsto per casi particolari, mai utilizzato

Reset parametri di ricerca

Metodo Descrizione Quando utilizzarlo
postResetParametriRicerca Viene lanciato alla fine del metodo Previsto per casi particolari, mai utilizzato

Recupero righe selezionate

Metodo Descrizione Quando utilizzarlo
getSelected Metodo che restituisce le chiavi delle righe selezionate in caso di selezione multipla attivata Utilizzabile a seconda delle necessità della pagina

cwbBpaGenTab

La superclasse è specializzata per caricare i risultati su una datatable, accentrando le logiche comuni. I metodi specializzati sono:

Metodo Descrizione
elenca Si occupa del caricamento dei dati.
initializeTable Si occupa dell'inizializzazione del componente jqGrid
getDataPage Restituisce risultati dopo un'elaborazione della griglia
elaboraGrid Formatta risultati provenienti dal caricamento da presentare a video
setSortParameter Imposta parametri per ordinamento

Azioni e punti di personalizzazione

Di seguito, un elenco di tutti i metodi che possono essere sovrascritti al bisogno nelle sottoclassi, raggruppati per funzione.

elenca

Metodo Descrizione Quando utilizzarlo
preElenca Viene lanciato dopo l'impostazione dei filtri sulla griglia (metodo: setGridFilters) Effettua delle operazioni grafiche particolari (vedere ad esempio cwfFtaPagam)
postElenca Viene lanciato alla fine del metodo. Visualizzazione dei pulsanti particolari nella button bar

elaboraGrid

Metodo Descrizione Quando utilizzarlo
elaboraRecords Viene lanciato all'interno di elaboraGrid. Al metodo viene passato l'array dei risultati, che è possibile manipolare in modo da poter ottenere l'output desiderato. Inserimento di icone, applicazioni css a determinate colonne, concatenazione di più campi da mostrare in una singola colonna.

cwbBpaGenRow

La superclasse è specializzata per la gestione di tabelle con un solo record. Graficamente queste si presentano direttamente in dettaglio, e gestiscono l'inserimento e l'aggiornamento in modo automatico, a seconda della presenza o meno del record.

Metodo Descrizione
elenca Se il record è già presente sul database, lancia il metodo dettaglio, altrimenti lancia il metodo nuovo (per effettuare il controllo, si basa sulla variabile CURRENT_RECORD

Azioni e punti di personalizzazione

Vedi cwbBpaGenTable per quanto riguarda il metodo elenca.

cwbBpaGenTree

TODO: completare

Helper

TODO: completare

sviluppo/cityware_superclassi.txt · Ultima modifica: 2018/03/19 10:45 da 127.0.0.1