Differenze tra le versioni di "Inserimento dati personalizzabile: Tabella dati"
imported>Root |
imported>Root |
||
| Riga 1: | Riga 1: | ||
Questo oggetto permette di visualizzare | Questo oggetto permette di visualizzare dati presi direttamente dagli attributi di workflow, presentandoli all'utente in forma tabellare. L'utente piu' modificare i dati, aggiungere/cancellare righe, scegliere una o più righe. A questo punto è possibile estrarre tutti i dati oppure solo i dati selezionati dall'utente ed usarli nelle successive fasi di elaborazione. | ||
== Attributi specifici == | == Attributi specifici == | ||
=== columns === | === columns === | ||
Permette di definire i dati da visualizzare nella tabella. | Permette di definire i dati da visualizzare nella tabella. Ogni colonna sottintende un array di dati che popolano le celle della colonna (dall'alto in basso). Quindi il numero di array necessari a popolare la tabella è comandato dal numero di colonne definite. | ||
La definizione di ogni colonna segue una notazione nella forma: | La definizione di ogni colonna segue una notazione nella forma: | ||
:::<tt> | :::<tt>[descrizione], width=[larghezza in pixel della colonna], format=[come rappresentare il dato]</tt> | ||
* <tt>'''descrizione'''</tt>: Una descrizione a piacere che andrà posizionata sull'header della colonna. Può contenere un qualsiasi testo purchè non includa la virgola, che viene usata come separatore tra gli attributi | * <tt>'''descrizione'''</tt>: Una descrizione a piacere che andrà posizionata sull'header della colonna. Può contenere un qualsiasi testo purchè non includa la virgola, che viene usata come separatore tra gli attributi | ||
* <tt>'''width'''</tt>: permette di specificare la larghezza preferita (in pixel) per la colonna. Se la colonna è unica la larghezza segue comunque la tabella. Se le colonne sono multiple la larghezza viene calcolata in proporzione relativamente alla larghezza della tabella. E' possibile specificare una larghezza negativa, nel qual caso questa viene considerata assoluta e non ridimensionabile dall'utente. Se la colonna è unica oppure se tutte le colonne hanno larghezza negativa allora interviene nuovamente la proporzione in funzione della larghezza della tabella. | * <tt>'''width'''</tt>: permette di specificare la larghezza preferita (in pixel) per la colonna. Se la colonna è unica la larghezza segue comunque la tabella. Se le colonne sono multiple la larghezza viene calcolata in proporzione relativamente alla larghezza della tabella. E' possibile specificare una larghezza negativa, nel qual caso questa viene considerata assoluta e non ridimensionabile dall'utente. Se la colonna è unica oppure se tutte le colonne hanno larghezza negativa allora interviene nuovamente la proporzione in funzione della larghezza della tabella. | ||
* <tt>''' | * <tt>'''format'''</tt>: permette di specificare <tt>checkbox</tt> o <tt>checkboxnullable</tt>, e si applica attualmente ai numerici <tt>0/1</tt> o agli string <tt>true/false</tt>. | ||
E' possibile passare alla colonna varie combinazioni dei suddetti attributi: | |||
:::{| style="border-collapse:separate; border-spacing:0; border:1px solid #000; padding:0" | :::{| style="border-collapse:separate; border-spacing:0; border:1px solid #000; padding:0" | ||
Versione delle 16:30, 28 gen 2015
Questo oggetto permette di visualizzare dati presi direttamente dagli attributi di workflow, presentandoli all'utente in forma tabellare. L'utente piu' modificare i dati, aggiungere/cancellare righe, scegliere una o più righe. A questo punto è possibile estrarre tutti i dati oppure solo i dati selezionati dall'utente ed usarli nelle successive fasi di elaborazione.
Attributi specifici
columns
Permette di definire i dati da visualizzare nella tabella. Ogni colonna sottintende un array di dati che popolano le celle della colonna (dall'alto in basso). Quindi il numero di array necessari a popolare la tabella è comandato dal numero di colonne definite.
La definizione di ogni colonna segue una notazione nella forma:
- [descrizione], width=[larghezza in pixel della colonna], format=[come rappresentare il dato]
- descrizione: Una descrizione a piacere che andrà posizionata sull'header della colonna. Può contenere un qualsiasi testo purchè non includa la virgola, che viene usata come separatore tra gli attributi
- width: permette di specificare la larghezza preferita (in pixel) per la colonna. Se la colonna è unica la larghezza segue comunque la tabella. Se le colonne sono multiple la larghezza viene calcolata in proporzione relativamente alla larghezza della tabella. E' possibile specificare una larghezza negativa, nel qual caso questa viene considerata assoluta e non ridimensionabile dall'utente. Se la colonna è unica oppure se tutte le colonne hanno larghezza negativa allora interviene nuovamente la proporzione in funzione della larghezza della tabella.
- format: permette di specificare checkbox o checkboxnullable, e si applica attualmente ai numerici 0/1 o agli string true/false.
E' possibile passare alla colonna varie combinazioni dei suddetti attributi:
cognome as Cognome del richiedente accede all'attributo cognome di una anagrafica selezionata cognome@3 as Cognome accede all'attributo cognome di una anagrafica selezionata come quarto oggetto della select @2 as Numero di scarpe accede ad un oggetto semplice di (es: numerico) selezionato come terzo oggetto della select cognome@3 as Cognome,width=150 variante con larghezza colonna specificata cognome@3 as Cognome,width=150,sort=als.cognome variante con larghezza colonna specificata e order by als.cognome (als è l'alias di una tabella) cognome@3,width=150 variante senza descrizione (verrà usato cognome) e sola larghezza colonna specificata
...e via dicendo. Volendo accedere al valore del primo oggetto semplice senza specificare descrizione, larghezza e quant'altro, non è possibile inserire una stringa vuota, serve per lo meno il simbolo @ (equivalente a @0).
select
Permette di specificare quali dati fare leggere alla query. Essendo la query scritta in HQL non è possibile specificare cose del tipo "*" (anche perchè poi si avrebbero non poche difficolta' nel capire cosa viene letto se si volessero estrarre determinati dati), ma è necessario indicare chiaramente cosa si vuole caricare. E' possibile specificare una classe java mappata sul database (esempio: An1DACAnagrafeUnica che è mappato sulla tabella an1_anagrafe_unica) oppure i singoli campi di una classe (esempio: cognome e nome dell'anagrafica unica). Nel primo caso la query torna 1 (uno) singolo oggetto complesso contenente tutti i dati della tabella (cognome, nome ecc...) nel secondo caso la query torna tanti oggetti semplici.
E' possibile anche mischiare oggetti semplici e complessi nella SELECT, in funzione delle necessità. Ad ogni modo è importante capire che ogni oggetto indicato nella SELECT ha un indice progressivo: il primo ha indice 0, il secondo ha indice 1 e via dicendo. Se il primo oggetto è un oggetto complesso, questo avrà indice 0 ed una moltitudine di attributi (cognome, nome ecc...) tutti appartenenti all'oggetto con indice 0.
from
Indica la sorgente dei dati. E' possibile definire join con le regole di HQL.
where
Indica la condizione di filtraggio dei dati. Segue le regole di HQL.
group_by
Raggruppamento secondo le regole di HQL.
having
Having secondo le regole di HQL.
order_by
Ordinamento secondo le regole di HQL.
selection_type
Indica alla tabella le possibilità di selezione offerte all'utente.
- SINGLE: permette di selezionare una sola riga
- SINGLE_INTERVAL: permette di selezionare più righe ma in un blocco unico
- MULTIPLE_INTERVAL: permette di selezionare blocchi disgiunti o singole righe sparse
cell_count
Permette di estrarre i valori dalle celle della tabella. Si noti che un singolo oggetto complesso (come una anagrafica) può essere utilizzato per alimentare più colonne della tabella. Lavorando a "celle" si perde il concetto di oggetto sottostante (l'anagrafica) e ci si focalizza sul dato semplice contenuto nelle singole celle (in forma testuale).
Specificando il numero dei dati che si vogliono estrarre nel parametro cell_count compaiono successivamente nuovi parametri di input chiamati progressivamente cell_1_index, cell_2_index ecc... Similmente compaiono i parametri di output cell_1_text, cell_2_text ecc...
Nei campi cell_NN_index è possibile specificare l'indice della colonna dalla quale si vuole estrarre il testo. Il valore e' disponibile nel parametro di output cell_NN_text.
Esempio
Si specifica la query:
select a, u from An1DACAnagrafeUnica a, UtrDACUtentiuoli u where a.dataFin is null and u.pkid = a.idUtenteUpd order by a.cognome, a.nome
Questa query estrae tutte le anagrafiche uniche correnti assieme all'utente che le ha inserite oppure modificate l'ultima volta.
definendo le colonne:
cognome as Cognome nome as Nome descrizione@1 as Utente
si indica alla tabella che vogliamo vedere l'attributo cognome e nome del primo oggetto (@0 è implicito) e la descrizione dell'utente (che è l'oggetto con indice 1)
Volendo estrarre cognome e nome si puo' definire
cell_count = 2 cell_1_index = 0 cell_2_index = 1
In questo modo viene estratto un array di stringhe dalla colonna 0 contenente tutti i cognomi, ed un array di stringhe dalla colonna 1 contenente tutti i nomi. Si noti che pur essendo due colonne distinte, queste afferiscono sempre all'oggetto con indice 0.
row_data_count
Inizialmente potrebbe trarre in confusione in quanto assomiglia al concetto di cell_count. In realta' questo parametro permette di lavorare sui dati letti dalla select e non su quelli messi a video tramite le colonne (non sempre c'è equivalenza).
Anche in questo caso specificando un numero di dati da estrarre compariranno nuovi parametri di input row_data_1_index, row_data_2_index ecc... Inoltre compariranno anche dei campi di output row_1_long, row_1_double, row_1_date, row_1_string e via dicendo per tutti gli indici che si sono selezionati. Questi campi permettono di estrarre il sottostante dato letto dalla query effettuando una conversione automatica in funzione del campo che si utilizza per l'output. Non tutti i dati letti dal database sono convertibili in tutti i tipi elencati, soprattutto se si leggono oggetti complessi.
Esempio
Usando la query dell'esempio precedente
select a, u from An1DACAnagrafeUnica a, UtrDACUtentiuoli u where a.dataFin is null and u.pkid = a.idUtenteUpd order by a.cognome, a.nome
supponiamo di voler estrarre il pkid dell'anagrafica selezionata. Possiamo procedere in due modi:
- definire una colonna pkid, magari con larghezza 0 per nasconderla all'utente e poi estrarre il valore cella tramite cell_count.
- utilizzare row_data_count (ad esempio impostandolo ad 1), specificando nell'indice che compare l'indice dell'oggetto anagrafica (nell'esempio 0). Il sistema non è in grado di estrarre oggetti complessi in quanto il meccanismo di comunicazione sottostante volutamente non li gestisce. Ma nel caso in cui si selezioni un oggetto complesso preso dal database, il sistema è abbastanza "smart" da estrarne il pkid.
- aggiungere alla select l'elemento a.pkid in terza posizione. Non specificare alcuna colonna che lo metta a video ed estrarlo con row_data_count=1 e row_data_1_index=2. In quest'ultimo caso si vede bene la differenza da cell_count che permette di lavorare solo con i dati che sono a video.
Attributi di base
Per una spiegazione dei rimanenti attributi riferirsi alla pagina Inserimento dati personalizzabile: Attributi base degli oggetti
Estrazione dei dati
Estrazione di array
Data la natura del componente, potenzialmente l'utente può selezionare più righe. Considerando che ogni colonna viene estratta su un attributo di workflow dedicato, in caso di selezione righe multiple i dati estratti saranno molteplici quindi deve essere usato un dato tipo array.
Se si è sicuri che l'utente può selezionare al più una riga è possibile utilizzare anche un attributo di tipo scalare. In questo caso workflow usa l'unica elemento selezionato per valorizzare lo scalare.
E' necessario porre attenzione nell'uso degli scalari perchè si potrebbero generare situazioni in cui entra in azione il meccanismo di conversione automatica tra array e scalari producendo errori oppure risultati non desiderati.
Uso di cell_count o row_count
Non ci sono vincoli nell'uso del primo o del secondo metodo. Dipende tutto dalle preferenze/esigenze di chi effettua la configurazione. Pur assomigliandosi molto permettono di risolvere tipi diversi di problemi. E' anche possibile mischiare l'uso di entrambi i sistemi, se necessario.