Differenze tra le versioni di "Inserimento dati personalizzabile: Tabella dati"

Da wiki.maggioli.it.
Jump to navigation Jump to search
imported>Root
(Creata pagina con "Questo oggetto permette di visualizzare i dati letti da una query sul database, presentandoli all'utente in forma tabellare. L'utente a sua volta può scegliere una o più rig...")
 
imported>Root
 
(9 versioni intermedie di uno stesso utente non sono mostrate)
Riga 1: Riga 1:
Questo oggetto permette di visualizzare i dati letti da una query sul database, presentandoli all'utente in forma tabellare. L'utente a sua volta può scegliere una o più righe. A questo punto è possibile estrarre i dati selezionati dall'utente ed usarli nelle successive fasi di elaborazione.
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 ==
=== design_time_query ===
Indica se la query deve popolare la tabella anche a design time (utile per debug della query). La query viene attivata quando sono stati specificati almeno la clausola <tt>SELECT</tt> e la clausola <tt>FROM</tt>. E' opportuno impostare il parametro ad <tt>ON</tt> solo quando si e' composta una query congruente in quanto una query incompleta genera molto probabilmente degli errori. Inoltre potrebbe essere scomodo lavorare con query attiva se questa è molto pesante. Il parametro e' utile solo con query che risultano coerenti anche a design time. Per query che fanno leva sul valore degli attributi a runtime molto probabilmente viene generato un errore.
* <tt>'''ON'''</tt>: La query si attiva a design time
* <tt>'''OFF'''</tt>: La query non è attiva a design time


=== columns ===
=== columns ===
Permette di definire i dati da visualizzare nella tabella. Se non specificato viene sottintesa una colonna che mostra il valore stringa del primo oggetto selezionato dalla query. Quindi se la query contiene una select di più oggetti, quelli successivi al primo non vengono visualizzati finchè non si definiscono le colonne opportune.
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. Ogni colonna definita produce ulteriori parametri di input/output (<tt>column_N_type</tt>, <tt>column_N_data</tt>, <tt>column_N_editable</tt>, <tt>column_N_selected_data</tt>, essendo <tt>N</tt> l'indice della colonna, con base <tt>1</tt>). Si veda successivamente per la spiegazione di tali parametri.


La definizione di ogni colonna segue una notazione nella forma:
La definizione di ogni colonna segue una notazione nella forma:


:::<tt>[attributo]@[indice] as [descrizione], width=[larghezza in pixel della colonna], sort=[cosa inserire nell'order by]</tt>
:::<tt>[descrizione], width=[larghezza in pixel della colonna], format=[come rappresentare il dato]</tt>
 
* <tt>'''attributo'''</tt>: il nome dell'attributo che si vuole estrarre dall'eventuale oggetto complesso letto dalla <tt>SELECT</tt>. Supponendo che nella <tt>FROM</tt> della query ci sia <tt>An1DACAnagrafeUnica</tt> (oggetto complesso contenente cognome, nome, ecc...) allora si può scrivere <tt>cognome</tt>. L'alias utilizzato nella query non deve essere usato in quanto non fa parte della struttura dell'oggetto letto. Se invece si vuole accedere ad un dato semplice (stringa, numero, data) letto dalla query, essendo questo non dotato di attributi è necessario non specificare alcun nome di attributo (quindi partire direttamente da <tt>@</tt>).
* <tt>'''indice'''</tt>: l'indice dell'oggetto (con base 0) letto dalla <tt>SELECT</tt> a cui ci si vuole riferire. Se la <tt>SELECT</tt> specifica, ad esempio:
 
select a, b
from An1DACAnagrafeUnica a, An1DACAnagrafeUnica b
where (...condizione di join...)


per accedere al cognome della prima anagrafica si scriverà <tt>cognome@0</tt>, per il cognome della seconda anagrafica <tt>cognome@1</tt> (ricordarsi che l'indice ha base zero!). Il default sottintende indice zero, quindi scrivere <tt>cognome@0</tt> oppure <tt>cognome</tt> ha lo stesso effetto.
* <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>'''sort'''</tt>: permette di specificare l'order by da applicare quando si ordina per la colonna.
* <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>. La differenza tra i due formati di checkbox, pur entrambi rappresentando correttamente il <tt>null</tt> quando non valorizzati, è che solo il checkbox nullabile nel ciclo di click passa nuovamente per il <tt>null</tt>.


In funzione del tipo di dato che si vuole estrarre e dell'aspetto che si vuole dare alla colonna sono possibili varie combinazioni dei suddetti attributi:  
Sono possibili 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"
| style="border-style:solid; border-width:1px" | <tt>cognome as Cognome del richiedente</tt> || style="border-style:solid; border-width:1px" | accede all'attributo cognome di una anagrafica selezionata
| style="border-style:solid; border-width:1px" | <tt>Cognome</tt> || style="border-style:solid; border-width:1px" | Definisce una colonna con la descrizione "<tt>Cognome</tt>" nell'header
|-
| style="border-style:solid; border-width:1px" | <tt>cognome@3 as Cognome</tt> || style="border-style:solid; border-width:1px" | accede all'attributo cognome di una anagrafica selezionata come quarto oggetto della select
|-
| style="border-style:solid; border-width:1px" | <tt>@2 as Numero di scarpe</tt> || style="border-style:solid; border-width:1px" | accede ad un oggetto semplice di (es: numerico) selezionato come terzo oggetto della select
|-
|-
| style="border-style:solid; border-width:1px" | <tt>cognome@3 as Cognome,width=150</tt> || style="border-style:solid; border-width:1px" | variante con larghezza colonna specificata  
| style="border-style:solid; border-width:1px" | <tt>Cognome,width=150</tt> || style="border-style:solid; border-width:1px" | variante con larghezza colonna specificata  
|-
|-
| style="border-style:solid; border-width:1px" | <tt>cognome@3 as Cognome,width=150,sort=als.cognome</tt> || style="border-style:solid; border-width:1px" | variante con larghezza colonna specificata e order by als.cognome (als è l'alias di una tabella)
| style="border-style:solid; border-width:1px" | <tt>Selezionato,width=150,format=checkbox</tt> || style="border-style:solid; border-width:1px" | Definisce una colonna con descrizione "<tt>Selezionato</tt>", con preferenza sulla larghezza e formattazione del dato a check box
|-
|-
| style="border-style:solid; border-width:1px" | <tt>cognome@3,width=150</tt> || style="border-style:solid; border-width:1px" | variante senza descrizione (verrà usato <tt>cognome</tt>) e sola larghezza colonna specificata
| style="border-style:solid; border-width:1px" | <tt>Selezionato,format=checkbox</tt> || style="border-style:solid; border-width:1px" | Come sopra senza la preferenza sulla larghezza
|}
|}


...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 <tt>@</tt> (equivalente a <tt>@0</tt>).
'''''Nota:''' Alternativamente al separatore virgola, è possibile utilizzare il separatore punto e virgola. L'algoritmo utilizzerà come separatore il primo che viene incontrato (non vengono usati in modo misto).''
 
=== select ===
Permette di specificare quali dati fare leggere alla query. Essendo la query scritta in HQL non è possibile specificare cose del tipo <tt>"*"</tt> (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: <tt>An1DACAnagrafeUnica</tt> che è mappato sulla tabella <tt>an1_anagrafe_unica</tt>) 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 <tt>SELECT</tt>, in funzione delle necessità. Ad ogni modo è importante capire che ogni oggetto indicato nella <tt>SELECT</tt> 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 ===
=== editable ===
Raggruppamento secondo le regole di HQL.
Permette di specificare se la tabella è editabile o meno da parte dell'utente. Quando impostato su <tt>EDITABLE</tt> compaiono i parametri aggiuntivi <tt>row_insert</tt>, <tt>row_delete</tt> e <tt>row_update</tt>.


=== having ===
=== row_insert, row_delete, row_update ===
Having secondo le regole di HQL.
Permettono di definire la possibilità di inserire, modificare o cancellare righe nella tabella.
 
=== order_by ===
Ordinamento secondo le regole di HQL.


=== selection_type ===
=== selection_type ===
Riga 73: Riga 41:
* <tt>'''MULTIPLE_INTERVAL'''</tt>: permette di selezionare blocchi disgiunti o singole righe sparse
* <tt>'''MULTIPLE_INTERVAL'''</tt>: permette di selezionare blocchi disgiunti o singole righe sparse


=== cell_count ===
=== valued_if ===
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).  
Permette di definire quando il controllo è da ritenersi valorizzato (utile per l'inserimento dati obbligatorio).
 
Specificando il numero dei dati che si vogliono estrarre nel parametro <tt>cell_count</tt> compaiono successivamente nuovi parametri di input chiamati progressivamente <tt>cell_1_index</tt>, <tt>cell_2_index</tt> ecc...
Similmente compaiono i parametri di output <tt>cell_1_text</tt>, <tt>cell_2_text</tt> ecc...
 
Nei campi <tt>cell_NN_index</tt> è possibile specificare l'indice della colonna dalla quale si vuole estrarre il testo. Il valore e' disponibile nel parametro di output <tt>cell_NN_text</tt>.
 
==== 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
* <tt>'''HAS_ROWS'''</tt>: basta che contenga almeno una riga
* <tt>'''ROW_SELECTED'''</tt>: basta che sia selezionata almeno una riga (il che implica la presenza di almeno una riga)


cell_count = 2
=== toolbar ===
cell_1_index = 0
Essendo una griglia potenzialmente editabile, è possibile definire la posizione della sua toolbar oppure è possibile rendere tale toolbar invisibile.
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.
* <tt>'''WEST'''</tt>: posizionata a sinistra
* <tt>'''NORTH'''</tt>: posizionata sopra
* <tt>'''EAST'''</tt>: posizionata a destra
* <tt>'''SOUTH'''</tt>: posizionata sotto
* <tt>'''HIDDEN'''</tt>: invisibile


=== row_data_count ===
=== sorting ===
Inizialmente potrebbe trarre in confusione in quanto assomiglia al concetto di <tt>cell_count</tt>. 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).  
Permette di definire se le righe della griglia sono ordinabili agendo sull'header di colonna.


Anche in questo caso specificando un numero di dati da estrarre compariranno nuovi parametri di input <tt>row_data_1_index</tt>, <tt>row_data_2_index</tt> ecc...
=== row_mode ===
Inoltre compariranno anche dei campi di output <tt>row_1_long</tt>, <tt>row_1_double</tt>, <tt>row_1_date</tt>, <tt>row_1_string</tt> 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.
Permette di attivare o meno i pulsanti della toolbar che abilitano l'utente a spostare la riga selezionata su o giù rispetto alle altre.


==== Esempio ====
=== column_N_type ===
Usando la query dell'esempio precedente
Per ogni colonna definita, permette di specificare il tipo di dato gestito dalla colonna stessa. Pur essendo possibile specificare solo tipi scalari, i dati di input/output devono essere del corrispettivo tipo array.


select a, u
=== column_N_editable ===
from An1DACAnagrafeUnica a, UtrDACUtentiuoli u
Permette di specificare se la colonna è modificabile o meno dall'utente.
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:
=== column_N_data ===
Questo parametro è presente in due varianti: input ed output. La variante input permette di specificare quale attributo utilizzare per valorizzare le celle della colonna mentre la variante output permette di specificare in quale attributo andare a copiare i valori della colonna.


* definire una colonna <tt>pkid</tt>, magari con larghezza <tt>0</tt> per nasconderla all'utente e poi estrarre il valore cella tramite <tt>cell_count</tt>.
=== column_N_selected_data ===
* utilizzare <tt>row_data_count</tt> (ad esempio impostandolo ad <tt>1</tt>), specificando nell'indice che compare l'indice dell'oggetto anagrafica (nell'esempio <tt>0</tt>). 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 <tt>pkid</tt>.
Simile alla variante output di <tt>column_N_data</tt> solo che produce in output dati presi solamente dalle celle selezionate, in ordine dall'alto in basso.
* aggiungere alla select l'elemento <tt>a.pkid</tt> in terza posizione. Non specificare alcuna colonna che lo metta a video ed estrarlo con <tt>row_data_count=1</tt> e <tt>row_data_1_index=2</tt>. In quest'ultimo caso si vede bene la differenza da <tt>cell_count</tt> che permette di lavorare solo con i dati che sono a video.


== Attributi di base ==
== Attributi di base ==
Per una spiegazione dei rimanenti attributi riferirsi alla pagina [[Inserimento dati personalizzabile: Attributi base degli oggetti]]
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 <tt>cell_count</tt> o <tt>row_count</tt> ===
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.

Versione attuale delle 08:35, 28 ago 2017

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. Ogni colonna definita produce ulteriori parametri di input/output (column_N_type, column_N_data, column_N_editable, column_N_selected_data, essendo N l'indice della colonna, con base 1). Si veda successivamente per la spiegazione di tali parametri.

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. La differenza tra i due formati di checkbox, pur entrambi rappresentando correttamente il null quando non valorizzati, è che solo il checkbox nullabile nel ciclo di click passa nuovamente per il null.

Sono possibili varie combinazioni dei suddetti attributi:

Cognome Definisce una colonna con la descrizione "Cognome" nell'header
Cognome,width=150 variante con larghezza colonna specificata
Selezionato,width=150,format=checkbox Definisce una colonna con descrizione "Selezionato", con preferenza sulla larghezza e formattazione del dato a check box
Selezionato,format=checkbox Come sopra senza la preferenza sulla larghezza

Nota: Alternativamente al separatore virgola, è possibile utilizzare il separatore punto e virgola. L'algoritmo utilizzerà come separatore il primo che viene incontrato (non vengono usati in modo misto).

editable

Permette di specificare se la tabella è editabile o meno da parte dell'utente. Quando impostato su EDITABLE compaiono i parametri aggiuntivi row_insert, row_delete e row_update.

row_insert, row_delete, row_update

Permettono di definire la possibilità di inserire, modificare o cancellare righe nella tabella.

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

valued_if

Permette di definire quando il controllo è da ritenersi valorizzato (utile per l'inserimento dati obbligatorio).

  • HAS_ROWS: basta che contenga almeno una riga
  • ROW_SELECTED: basta che sia selezionata almeno una riga (il che implica la presenza di almeno una riga)

toolbar

Essendo una griglia potenzialmente editabile, è possibile definire la posizione della sua toolbar oppure è possibile rendere tale toolbar invisibile.

  • WEST: posizionata a sinistra
  • NORTH: posizionata sopra
  • EAST: posizionata a destra
  • SOUTH: posizionata sotto
  • HIDDEN: invisibile

sorting

Permette di definire se le righe della griglia sono ordinabili agendo sull'header di colonna.

row_mode

Permette di attivare o meno i pulsanti della toolbar che abilitano l'utente a spostare la riga selezionata su o giù rispetto alle altre.

column_N_type

Per ogni colonna definita, permette di specificare il tipo di dato gestito dalla colonna stessa. Pur essendo possibile specificare solo tipi scalari, i dati di input/output devono essere del corrispettivo tipo array.

column_N_editable

Permette di specificare se la colonna è modificabile o meno dall'utente.

column_N_data

Questo parametro è presente in due varianti: input ed output. La variante input permette di specificare quale attributo utilizzare per valorizzare le celle della colonna mentre la variante output permette di specificare in quale attributo andare a copiare i valori della colonna.

column_N_selected_data

Simile alla variante output di column_N_data solo che produce in output dati presi solamente dalle celle selezionate, in ordine dall'alto in basso.

Attributi di base

Per una spiegazione dei rimanenti attributi riferirsi alla pagina Inserimento dati personalizzabile: Attributi base degli oggetti