Prima di creare il proprio sito è preferibile leggere la documentazione:Prima di iniziare.
Il token blocco effettua le lettura e la visualizzazione dell'entità che gli è assegnata mediante parametrizzazione:
1. Legge la o le entità nel database X3 tramite la chiamata di un'interfaccia (web service) di tipo 'Accesso dati',
2. Effettua un'iterazione sulle entità ottenute per costruire dinamicamente le righe di un riquadro.
Il token blocco è inserito nella pagina HTML utilizzando la seguente sintassi:
<table>
<!adx="MyBlock">
<tr>
<td adx="aBLKELMTRANK"></td>
<td adx="ITEMREF"></td>
</tr>
<!adx="MyBlock">
</table>
Il motore XTEND procede nel modo seguente per elaborare i blocchi:
Questa fase è eseguita una sola volta, al momento del caricamento della pagina HTML:
Questa fase è eseguita ad ogni visualizzazione della pagina HTML:
1. Inizializzazione dei blocchi
2. Iterazione su tutte le entità ottenute
Nell'esempio precedente, se la selezione restituisce 3 articoli con codice PUZ001, PUZ002 e PUZ003, il risultato ottenuto sarà un riquadro di tre righe:
1 | PUZ001 | |
2 | PUZ002 | |
3 | PUZ003 |
L'HTML generato è il seguente:
Si noti che l'HTML 'figlio' del token blocco è stato ripetuto 3 volte e ricalcolato ogni volta tenendo conto del nuovo contesto di dati (riga corrente).
<table>
<tr>
<td>1</td>
<td>PUZ001</td>
</tr>
<tr>
<td>2</td>
<td>PUZ002</td>
</tr>
<tr>
<td>3</td>
<td>PUZ003</td>
</tr>
</table>
Oltre al fatto di visualizzare dei riquadri di dati, il token blocco gestisce la modifica dinamica dei criteri di selezione e di ordinamento.
La parametrizzazione del blocco definisce i criteri di default, ed è possibile autorizzare o meno la modifica di tali criteri mediante un link dinamico.
E' il token link dinamico, per il quale si possono anche definire dei parametri di selezione e di ordinamento, che può modificare i criteri del blocco.
Soltanto i criteri di selezione e di ordinamento del blocco principale della pagina (alias AMAIN) possono essere modificati da quelli dei link dimanici.
Si possono definire diversi blocchi per pagina, ma uno solo (il blocco principale) potrà avere dei criteri di selezione ed ordinamento modificabili dall'utente.
Esistono tre tipi di modifica dei criteri di un blocco mediante un link dinamico:
Queste tre opzioni permettono di gestire la maggiorparte delle situazioni che si presentano nelle pagine web.
La scheda token blocco permette di parametrizzare i criteri di selezione e di ordinamento del blocco.
Sono i criteri di default ad essere applicati alla prima visualizzazione della pagina che contiene il blocco.
Il token blocco propone due parametri 'Selezione modificabile' e 'Ordinamento modificabile' che indicano se i criteri di selezione e/o di ordinamento possono essere modificati da un link dinamico.
Questi parametri si applicano solamente se il blocco è stato definito come blocco principale nella scheda della pagina web che lo visualizza.
Per visualizzare un blocco con più celle per riga si utilizza il token speciale ASTAMP per delimitare la cella.
Il server XTEND ripeterà tante volte il codice HTML compreso tra i due tag ASTAMP quante sono le celle nella riga.
<table>
<!-Iterazione sulle righe del blocco-->
<!adx="MYBLOCK">
<tr>
<!-Codice ripetuto tante volte quante sono le celle per riga-->
<!adx="ASTAMP">
<!--Per alternare il colore delle celle-->
<td adx="ALINESTYLE:xattr=Class">
<!--Codice HTML di una cella-->
<b>Cognome</b><p adx="NAME"></p>
<b>Nome</b><p adx="FIRSTNAME"></p>
</td>
<!adx="ASTAMP">
</tr>
<!adx="MYBLOCK">
</table>
L'esempio qui di seguito mostra come alimentare le celle vuote quando il numero di record non è un multiplo del numero di celle per riga.
Si utilizza il blocco condizionatoADISPSTAMPEMPTY per delimitare l'HTML dedicato alle celle vuote.
<table>
<!-Iterazione sulle righe del blocco-->
<!adx="MYBLOCK">
<tr>
<!adx="ASTAMP">
<td adx="ALINESTYLE:xattr=Class">
<!adx="ADISPSTAMPEMPTY">
<!--Cella vuota alimentata a blank-->
<!adx="ADISPSTAMPEMPTY">
<!adx="ADISPSTAMPEMPTY:xnot">
<!--Codice HTML di una cella non vuota-->
<b>Cognome</b><p adx="NAME"></p>
<b>Nome</b><p adx="FIRSTNAME"></p>
<!adx="ADISPSTAMPEMPTY">
</td>
<!adx="ASTAMP">
</tr>
<!adx="MYBLOCK">
</table>
Le azioni ABLKFIRSTPAGE, ABLKNEXTPAGE, ABLKPREVPAGE, ABLKLASTPAGE permettono di gestire la paginazione nei blocchi.
I token ADLKFIRSTPAGE, ADLKNEXTPAGE, ADLKPREVPAGE, ADLKLASTPAGE possono essere utilizzati per il blocco principale della pagina.
I campi aBLKNBELMTS e APAGEPOS visualizzano il numero totale di record e la posizione della pagina rispetto al numero totale di pagine.
I blocchi condizionati AHIDEMAINFIRSTPAGE e AHIDEMAINLASTPAGE gestiscono visualizzazione/mascheramento dei bottoni di paginazione per le prime e le ultime pagine.
Sintassi
Blocco.ADLK*
Esempio:
Paginazione con gestione della visualizzazione ad inizio e fine paginazione.
<table width="100%">
<tr>
<td align="left" width="20%">
<!--Hide FirstPage and Previous actions if current page is the first page-->
<!adx="aHideMainFirstPage">
<!---->
<a href="" adx="AMAIN.aDlkFirstPage">Prima</a>
<a href="" adx="AMAIN.aDlkPrevPage">Precedente</a>
<!adx="aHideMainFirstPage">
</td>
<!--Displays page information-->
<td align="center" width="60%">
Pagina : <span adx="AMAIN.aPagePos"></span> -
Numero di elementi: <span adx="AMAIN.aBlkNbElmts"></span>
</td>
<td align="right" width="20%">
<!--Hide LastPage and Next actions if current page is the last page-->
<!adx="aHideMainLastPage">
<a href="" adx="AMAIN.aDlkNextPage">Successiva</a>
<a href="" adx="AMAIN.aDlkLastPage">Ultima</a>
<!adx="aHideMainLastPage">
</td>
</tr>
</table>
I link dinamici ADLKSELECT e ADLKUNSELECT (azione ABLKSELECT e ABLKUNSELECT) permettono di selezionare/deselezionare una riga di un blocco.
Utilizzo
Inserire i token ADLKSELECT e ADLKUNSELECT in una delle celle della riga sia in un tag <a> sia in un tag <input type='button'>.
Il campo ABLKSELECTEDLINE contiene il range (da 1 a N) della riga selezionata.
Esempio:
Il blocco ABLKCOUNTRIES visualizza i paesi nel sito ASAMPLE con selezione della riga per visualizzare il dettaglio Valuta/Lingua del paese.
Un clic sulla prima cella (CRY) seleziona la riga.
<!adx="ABLKCOUNTRIES:xselect=false">
<tr>
<td><a adx="ADLKSELECT"><span adx="CRY"></span></a></td>
<td adx="CRYDES"></td>
<td adx="CUR"></td>
<td adx="LAN"></td>
</tr>
<!adx="ABLKCOUNTRIES">
<!--Visualizzazione del N° di riga selezionata-->
<span adx='ABLKCOUNTRIES.ABLKSELECTEDLINE'></span>
Il parametro HTML 'xSelect=true' permette di selezionare la prima riga di default.
Se questo parametro non è presente, o se il suo valore è uguale a 'false', il blocco non ha, di default, nessuna riga selezionata.
Quando un blocco ha una riga selezionata, si possono indirizzare i campi di questa riga mediante la sintassi Blocco.Campo.
I valori dei campi della riga selezionata possono essere visualizzati o utilizzati come criteri in un blocco, un link dinamico o un blocco condizionato.
Il blocco condizionato AHIDEMAINSELECT gestisce la visualizzazione/mascheramento di un campo di HTML in funzione del fatto che il blocco principale abbia o meno una riga selezionata (vedere la pagina paese del sito ASAMPLE).
L'azione ABLKRESTOREMAINCTX permette di ritornare ad una pagina elenco partendo da una pagina dettaglio senza perdere né la paginazione né la riga selezionata del blocco principale.
Il link dimanico qui di seguito permette di ritornare alla pagina FORMQUERYRES con ripristino del contesto del blocco principale.
<input type="button" value="Ritorno elenco" adx="DlkFrmQueryBack" class="xtendButton" >
La sintassi che segue permette di indirizzare direttamente i dati di una riga di un blocco:
<!--Prima riga-->
<span adx="MYBLOCK(first).MYFIELD"></span>]<br>
<!--Ultima riga-->
<span adx="MYBLOCK(last).MYFIELD"></span>]<br>
<!--Nesima riga-->
<span adx="MYBLOCK(N).MYFIELD"></span>]<br>
La sintassi che segue permette di valorizzare una variabile JavaScript con la rappresentazione JSON di un blocco o di una riga di un blocco:
<script>
// Dati JSON di un blocco
var wMyBlock_JSON=<!adx="MYBLOCK(*)"><!adx="MYBLOCK(*)">;
var wMyBlock_JSON=<!adx="MYBLOCK(*)"><!adx="MYBLOCK(*):xinclude=FIELD1,FIELD2">;
var wMyBlock_JSON=<!adx="MYBLOCK(*)"><!adx="MYBLOCK(*):xexclude=FIELD1,FIELD2">;
// Dati JSON di una riga
var wMyLine_JSON=<!adx="MYBLOCK(2)"><!adx="MYBLOCK(2)">;
var wMyLine_JSON=<!adx="MYBLOCK(2):xinclude=FIELD1,FIELD2"><!adx="MYBLOCK(2)">;
var wMyLine_JSON=<!adx="MYBLOCK(2):xexclude=FIELD1,FIELD2"><!adx="MYBLOCK(2)">;
</script>
La variabile JSON di un blocco è un riquadro (Array) di righe:
<script>
var wMyBlock = [{riga 1},{riga 2},...];
var wMyBlock = [{"STATO":1,"STATO_DESCR":"Da elaborare","PREZZO":81.35,"COD2":"30-112"},
{"STATO":2,"STATO_DESCR":"Elaborato","PREZZO":117.9,"COD2":"31-02"},
{"STATO":1,"STATO_DESCR":"Da elaborare","PREZZO":606.15,"COD2":"32-034"}];
</script>
La variabile JSON di una riga è un oggetto che contiene dei campi :
<script>
var wMyLine ={"CAMPO1":"Valore1","CAMPO2":"Valore2"...};
var wMyLine = {"STATO":1,"STATO_DESCR":"Da elaborare","PREZZO":606.15,"COD2":"32-034"}
</script>
Per un campo il parametro xjson genera un oggetto JSON {"NomeCampo:"Valore"}. Senza parametro xjson la variabile JavaScript viene valorizzata con il valore del campo.
<script>
// Dati JSON di un campo
var wMyField_JSON=<!adx="MYFIELD:xjson"><!adx="MYFIELD">;
//XTEND genera
var wMyField_JSON={"MYFIELD":"Valore"};
// Valore di un campo
var wMyField_JSON=<!adx="MYFIELD"><!adx="MYFIELD">;
//XTEND genera
var wMyField_JSON="Valore";
</script>
Codice | Parametro | Effetto |
xselect | True/False | Seleziona la prima riga di default |
Codice | Tipo | Descrizione |
ABLKELMTIDX | Intero | Indice di un elemento in un blocco (O->ABLKNBELMTS-1) |
ABLKELMTRANK | Intero | Range di un elemento in un blocco (1->ABLKNBELMTS) |
ABLKLINEIDX | Intero | Indice di una riga in un blocco (O->ABLKNBLINES-1) |
ABLKLINERANK | Intero | Range di una riga in un blocco (O->ABLKNBLINES) |
ABLKNBELMTS | Intero | Numero di elementi (record) totale della query di un blocco |
ABLKNBLINES | Intero | Range della riga selezionata di un blocco tramite l'azione ABLKSELECT |
ABLKSELECTEDLINE | Intero | Numero di righe di un blocco |
APAGENB | Intero | Numero di pagine di un blocco |
APAGENUM | Intero | Range della pagina corrente di un blocco |
APAGEPOS | Intero | APAGEPOS/APAGENUM |
Codice | Descrizione |
ACONST | Contiene tutti i campi di tipo costante |
ACURRENT | Contesto di dati corrente (top) nella sequenza di dati XTEND |
AHTMLFORM | Form HTML |
AHTTPCOOKIE | Cookies HTTP |
AMAIN | Blocco principale di una pagina definito nei parametri della pagina |
APBG | Blocco sfondo di una pagina definito nei parametri della pagina |
AMESS | Messaggi utente |
AREFERENCE | Quando si scrive BlocRiferimento.TokenLink il blocco BlocRiferimento è chiamato 'blocco di riferimento' ; |
ASESSION | Contiene i dati della sessione utente |
AUSERCRIT | Contiene i criteri utenti (parametro HTML xcrit) |
AUSERINF | Contiene i dati utente restituiti dal login |
AUSERVAR | Contiene le variabili utente create dalle funzioni JavaSCript xtdSetUserVar/xtdRemoveUserVar |
Campi
I seguenti campi sono presenti in questo folder :
| Codice del token blocco. |
| Sito Web corrente. |
|   |
Chiudi
Presentazione
Parametri generali del blocco.
Chiudi
Campi
I seguenti campi sono presenti in questo folder :
Caratteristiche
|
|
|
|
| Indica le entità che verranno create a partire dal risultato della consultazione. |
| Interfaccia di tipo 'Accesso dati' che verrà richiamata. |
| Tipo di interfaccia 'Accesso dati' che verrà richiamata. |
Chiudi
Presentazione
Parametrizzazione della selezione associata al blocco.
Chiudi
Campi
I seguenti campi sono presenti in questo folder :
Caratteristiche
| Nessuna: selezione di tutti i record. Consultazione: applicazione dei criteri di selezione del blocco. Ultimo link cliccato: applicazione dei criteri di selezione del link dinamico cliccato per accedere alla pagina che contiene il blocco. |
| No: la query SQL associata al blocco non può essere modificata da quella di un link dinamico. Si: la query può essere modificata da quella associata ad un link dinamico.
|
| Scelta dell'ottimizzazione proposta dall'interfaccia. Nessuna: Nessuna ottimizzazione Nessun blob: l'interfaccia non restituisce i campi di tipo blob Nessun clob: l'interfaccia non restituisce i campi di tipo clob Nessun clob né blob: l'interfaccia non restituisce i campi di tipo blob e clob |
Sintesi selezione
| Consultazione del blocco in formato testo |
Riquadro Criteri di selezione
| Operatore logico di concatenamento delle operazioni. |
| Parentesi aperte. |
| Campo dell'entità il cui valore è il primo operando dell'operazione. |
| Operatore di confronto. |
|
|
| Si inserisce qui il valore del parametro. Questo viene inserito a seconda dei casi come numero,data o codice alfanumerico. Quando il parametro è di tipo menù locale, si può a piacere inserire l'inizio della descrizione, o il valore numerico corrispondente al range della descrizione nell'elenco. Quando il codice è controllato da una tabella allegata, si può utilizzare un tasto di selezione per sceglierlo. |
| Codice del blocco per l'origine 'Token campo'. |
|   |
| Codice del campo per l'origine 'Token campo'. |
| Parentesi chiuse. |
|
|
|   |
Entità
| Indica le entità che verranno create a partire dal risultato della consultazione. |
| Interfaccia di tipo 'Accesso dati' che verrà richiamata. |
| Tipo di interfaccia 'Accesso dati' che verrà richiamata. |
Chiudi
Campi
I seguenti campi sono presenti in questo folder :
Caratteristiche
| Selezionare un tipo di ordinamento:
|
|
|
Riquadro Ord
| Nome del campo per l'origine 'Token campo'. |
| Ordinamento Ascendente/Discendente. |
Chiudi
Campi
I seguenti campi sono presenti in questo folder :
Dati ottenuti dal blocco
| Indica ciò che deve essere visualizzato dove si trova il blocco nella pagina HTML se la selezione è vuota:
|
Riquadro Stile per riga
|
Riquadro Param. Accesso sottoprogramma
| Codice del parametro sottoprogramma. |
|
|
|
|
| Codice del blocco per l'origine 'Token campo'. |
|   |
| Codice del campo per l'origine 'Token campo'. |
Chiudi
Di default, le seguenti stampe sono associate alla funzione :
PRTSCR : Stampa Videata
Ma ciò lo si può modificare tramite parametrizzazione.
Questo bottone permette di copiare un token blocco. |