Ecco perchè in questo articolo cercherò di spiegare nel dettaglio il funzionamento della funzione _Doclick generata in automatico da Domino nella transcodifica HTML delle pagine Web.
Sicuramente qualcuno di voi si sarà chiesto od avrà analizzato come Domino riesce ad interpretare nel WEB comandi @FORMULAS
come @command[FILESAVE] ...@command[COMPOSE...etc...
Questa parte spesso "core" di un'applicazione WEB non è documentata in nessun documento ufficiale di IBM e cercherò di darvi informazioni e spiegazioni più dettagliate possibili in merito ( devo dire anche grazie alla migrazione di un portale WEB interamente fatto in Domino nella release 4.6 del quale mi sono sono occupato della migrazione funzionale e grafica adattandolo a Domino R7.X...Ricordatevi che migrare
da una 4.6 a 7.X un'applicazione WEB non è una passeggiata od un semplice copy&paste ma ci sono moltissime cose che in 4.6 funzionavano in una certa maniera, mentre in R7 non vanno più... ).
Innanzitutto la spiegazione successiva è valida esclusivamente per quei database che hanno la seguente voce abilitata
"Web Access : Use Javascript when generating pages"
Con questa voce attivata Domino convertirà tutti gli elementi attivi di Domino (per elementi attivi intendo HOTSPOT, ACTION , INPUTBOX..in pratica tutti gli elementi web con cui interagisce l'utente )come elementi HTML con eventualmente del codice JS.
Quando l'utente WEB cliccherà su un bottone o su un immagine il Browser registrerà all'interno della pagine corrente quale elemento è stato invocato dall'utente ed invierà la pagina stessa al server Domino.ù
Quando il server Domino riceverà la pagina, avrà bisogno di capire quale elemento è stato invocato.
Per tenere traccia di tutto questo Domino genererà codice Javascript agganciato all'HTML degli elementi attivi in fase di costruzione della pagina. Nel momento dell'invio al server, Domino dovrà essere in grado di riconoscere quale elemento è stato invocato grazie ad un campo HTML nascosto generato automaticamente all'interno della pagina chiamato "__Click".
Consideriamo per esempio una semplicissima FORM al cui interno vi è sia un BOTTONE che un ACTION che eseguono il comando
@command[filesave] per eseguire il salvataggio della FORM corrente:
Aprendo la Form tramite il Browser WEB apparirà in questo modo:
Se proviamo ad visualizzare il codice HTML della pagina generata da domino noteremo quanto segue:
Come potrete notare ho evidenziato le seguenti parti di codice:
- nel primo Blocco rosso la routine Javascript generata in automatico da Domino
- nel secondo Blocco rosso il campo nascosto __Click che registra la posizione del bottone invocato (sempre nella routine JS _doclick)
- nel primo Blocco blu la generazione di codice per l'ACTION SALVA
- nel secondo Blocco blu la generazione del codice per il BOTTONE REGISTRA
La parte più interessante è quella di capire a cosa corrispondono i parametri passati alla funzione _doclick
Prendiamo per esempio la _doclick generata per l'action SALVA:
<a href="" onclick="return _doClick('C12572420036FE3A.3062e66c69808108c1257242003703ab/$V5ACTIONS/0.C4', this, null)" target="_self">SALVA</a>
IL primo parametro è quello che identifica con esattezza la posizione del bottone da invocare :
- C12572420036FE3A corrisponde alla replica ID del database
- 3062e66c69808108c1257242003703ab corrisponde alla UNID della Form
- $V5ACTIONS corrisponde al tipo di elemento della form ($ACTIONS o $BODY a seconda di dove si trova l'HOTSPOT ) a secondo di dove è posizionato l'elemento invocato ( nel nostro caso è nella action BAR)
- 0.C4 rappresenta la posizione dell'elemento all'interno dell'area (di default il primo elemento del Body du una form è sempre 0.10 )
Una volta capito tutto questo è possibile sfruttare questa funzione per eseguire molteplici cose ad esempio :
1. Validare i campi con Javascript e successivamente eseguire una _DOCLICK di un BOTTONE che ha formule di SALVATAGGIO o REFRESH
2. Centralizzare (per esempio come hanno fatto in quel progetto che ho migrato dalla 4.6) tutte i bottoni di salvatagio, refresh...etc... comunemente usati e richiamarmi tramite JS in diverse form
3. Etc...
Tenete presente che dal passaggio dalla R4/R5 a R6 i parametri passati alla _doclick sono aumentati (la prima parte che corrispondeva all'UNID del database non esisteva... ) ciò significa che in teoria ad oggi con la R7 sarebbe possibile creare una FORM di un particolare database di servizio con tutte le funzioni @formulas alla quale tutti i database esterni potrebbero agganciarsi per richiamare determinate funzioni.
Ovvio che tale soluzione va ragionata e cmq tenete a mente che questa tecnica della _doclick è legata al WEB attuale e con l'avvento del WEB 2.0 che evita i fastidiosi tempo di reload pagina verrà penso abbandonata.
Per qualsiasi chiarimento in merito rimango a vostra disposizione.
1 Commenti:
io ho fatto qualcosa di diverso... appena ho un attimo scrivo un post :-)