POPUP-UP legate a GESTORI
Template di riferimento EDTBPOPUP
!!!!! PARTIRE SEMPRE DALLA TEMPLATE: NON COPIATE DA ALTRE POP-UP !!!!!!!!!
Le Pop-up verranno gestite tramite WAM standard; Il layout da utilizzare è "ed_popup_layout_v2";
Devono avere questa WEB_MAP globale (prima di tutte le webroutine)
WEB_MAP FOR(*BOTH) FIELDS((£R_DMUSER *PRIVATE) (£WDM_SESS *PRIVATE) (£WDM_INFO *PRIVATE) (£WDM_INFO2 *PRIVATE) (£R_POPTIT *PRIVATE) (£R_FLDEXC *PRIVATE) (£R_FLDFROM *PRIVATE) (£PGPOPDCOD *PRIVATE) (£PGPOPACOD *PRIVATE) (£PGPOPDESC *PRIVATE) (£PGPOPFLT1 *PRIVATE) (£PGPOPFLT2 *PRIVATE))
I campi R_FLDEXC e R_FLDFROM non devono in aclun modo essere modificati
Il campo R_POPTIT deve essere inizializzato con una variable multilingua che identifica il nome dell'oggetto Es: "Stagione" "Nazione" ecc.
Provvederà il layput delle pop-up a concatenare il valore della variabile *MTDTEDRICERCA al titolo della finestra.
La Webroutine di ingresso si deve chiamare "RunPopup" e deve esserci una Webroutine "Close" che serve per il ritorno dei campi.
Nell'help della BEGIN_COM specificare sempre i campi passati nella WEB_MAP della WEBROUTINE 'Close'
Nella webroutine "RunPopup" deve essere scritto il codice per il caricamento della lista di ricerca e deve essere previsto in *output il campo da restituire.
La webroutine "Close" deve avere in *both lo stesso campo che la "RunPopup" ha in *output e deve avere in *output eventuali altri campi da restituire.
**** IMPORTANTE *****
NON AGGIUNGETE ASSOLUTAMENTE NESSUN CODICE PER GESTIRE L'ORDINAMENTO DELLA LISTA
(OVVERO COPIANDOLO DA ALTRE WAM)
***********************
Meccanismo per la restituzione dei campi
I campi possono ritornare dalla pop-up in quattro modi, tutti guidati dai parametri "field_name_to_exchange" e "field_name_from"
NOTA: l'Associazione viene sempre fatta per Nome
se "field_name_to_exchange" è uguale a *BLANK la pop-up cercherà di valorizzare TUTTI i campi presenti nella WAB_MAP della Webroutine "Close" all'interno della WAM sorgente
se "field_name_to_exchange" contiene il nome di un campo, la pop-up valorizzerà solo quel campo a patto che sia presente nella WEB_MAP della Webroutine "Close"
se "field_name_to_exchange" contiene il nome di un campo e "field_name_from" contiene il nome di un campo, la pop-up valorizzerà il primo campo con il valore del secondo a patto che esista nella WEB_MAP della Webroutine "Close"
se "field_name_to_exchange" contiene il valore fisso "*ARRAY", la Pop-up utilizzerà un meccanismo di valorizzazione spiegato più avanti in questo documento.
Nella WEB_MAP della WebRoutine "Close" è bene utilizzare i campi reference del Repository e cioè gli "R_nnnnnn"
Disegno del foglio XSL
Per la webroutine "RunPopup":
- impostare sia nella colonna del codice, sia nella colonna della descrizione la weblet "std_anchor" e configurarla nel modo seguente:
"currentrowhfield" ===> il nome del campo da restituire tra apici
"currentrownumval" ===> il nome del campo da restituire preceduto da $ (che indica la variabile XSL)
"on_click_wrname" ===> 'Close' fisso.
IMPORTANTE: ANCHE PER LA COLONNA "DESCRIZIONE" IMPOSTARE IL NOME DEL CAMPO DEL CODICE
Per la webroutine "Close":
- trascinare solamente la weblet "ed_popup_close":
COME UTILIZZARE UNA POP-UP NELLE WAM
All'interno della WAM utilizzatrice importare la weblet "ed_prompter"
e settarla nel modo seguente:
"prompter_wamname" ==> Il nome della WAM che gestisce la Pop-UP tra apici
"field_name_to_exchange" ==> Il nome del campo in cui inserire il valore di ritorno oppure "*ARRAY"
"field_name_from" ==> Il nome dal campo da cui prendere il valore
"pre_show_js" ==> Codice Javascript aggiuntivo per gestire la Pop-up
Metodo per passare dei campi alle Pop-up
1) prevedere tali campi in *INPUT nella webroutine "RunPopup" della WAM di ricerca
2) inserire questo codice nel foglio XSL:
Sostituire questa istruzione della weblets "ed_prompter":
<!-- <xsl:with-param name="pre_show_js" select="?" /> -->
Con queste:
Esempio1: devo passare il campo 'TIPOPARTE' con un valore fisso
<xsl:with-param name="pre_show_js">
<xsl:text>InsertHidden(document.LANSA,'TIPOPARTE','4');</xsl:text>
</xsl:with-param>
Esempio2: devo passare il campo 'TIPOPARTE' con il valore del campo 'ASKPARTE' inserito dall'utente
<xsl:with-param name="pre_show_js">
<xsl:text>InsertHidden(document.LANSA,'TIPOPARTE',document.LANSA.ASKPARTE.value);</xsl:text>
</xsl:with-param>
Esempio3: devo passare il campo 'TIPOPARTE' con il valore del campo 'ASKPARTE2' passato da programma
<xsl:with-param name="pre_show_js">
<xsl:text>InsertHidden(document.LANSA,'TIPOPARTE','</xsl:text>
<xsl:value-of select="key('field-value', 'ASKPARTE2')" />
<xsl:text>');</xsl:text>
</xsl:with-param>
Esempio4: devo passare il campo 'R_CDSTAG' con il valore del campo 'LOFLSTGE' inputato a mano nella lista
<xsl:with-param name="pre_show_js">
<xsl:text>InsertHidden(document.LANSA,'R_CDSTAG',document.getElementById('</xsl:text>
<xsl:value-of select="$LOFLSTGE/@id" /><xsl:text>').value);</xsl:text>
</xsl:with-param>
Esempio 5: devo passare il valore di un radio button creato con std_rad_button il cui nome è PGPARTE:
<xsl:with-param name="pre_show_js">
<xsl:text>InsertHidden(document.LANSA,'TIPOPARTE',EDGetInputElementValue('PGPARTE'));</xsl:text>
</xsl:with-param>
(vedi EDGetInputElementValue)
Esempio 6: devo passare il campo 'R_CDSTAG' con il valore del campo 'LOFLSTGE' valorizzato nella lista
<xsl:with-param name="pre_show_js">
<xsl:text>InsertHidden(document.LANSA,'R_CDSTAG','</xsl:text>
<xsl:value-of select="$LOFLSTGE" />
<xsl:text>');</xsl:text>
</xsl:with-param>
EDGetInputElementValue(nomecampo)
E possibile posizionare le Pop-up anche nelle liste: impostare il parametro "field_name_to_exchange" con la varaibile $<nomecampo>/@id senza apici. In questo modo il risultato verrà messo nella riga giusta
Nell'esempio sopra esposto la pop-up restituisce il campo "PGNGDA" (presente nella webroutine "Close" della Pop-up) nel rispettivo campo della lista.
Questa parte descrive il modo per far ritornare più campi dalla Pop-up:
Inserire questa "template" di codice subito sotto la <div> dei campi HIDDEN della WAM che utilizza la POP-UP
<script type="text/javascript">
<xsl:text disable-output-escaping="yes">//<![CDATA[</xsl:text>
function nnnnnnnnnnnnnn()
{
curForm = document.LANSA;
curForm.__CampiEXC = new Array();
curForm.__CampiEXC[0] = {src: "sssssssss", dest: "ddddddddd"};
curForm.__CampiEXC[1] = {src: "sssssssss", dest: "ddddddddd"};
curForm.__CampiEXC[2] = {src: "sssssssss", dest: "ddddddddd"};
}
<xsl:text disable-output-escaping="yes">//]]></xsl:text>
</script>
dove:
nnnnnnnnnnnn è il nome della funzione da richiamare es: __crea_campi_da oppure __crea_campi_a
ssssssss è il nome del campo sorgente (presente nella Pop-up) da cui prendere il valore
ddddddd è il nome del campo destinazione (prensente nella WAM) a cui assegnare il valore
per aggiungere più campi basta aggiungere altre righe IMPORTANTE è incrementare l'indice dell'array.
E' possibile creare funzioni differenti per la restituzione dei campi differenti in quanto la funzione viene richiamata
al bisogno.
Fatto questo impostare il parametro "pre_show_js" della weblet Pop-up con il nome della funzione appena definita
(Attenzione ad aggiungere le parentesi ed il punto e virgola)
il parametro "field_name_to_exchange" con il valore fisso "*ARRAY" (come testo delimitato da apici singoli)
in questo modo, prima di lanciare la Pop-up, viene definito l'array dei campi da scambiarsi tra la pop-up e la wam ed al ritorno
il valore "*ARRAY" del campo fa capira alla Pop-up che deve scorrere l'array ed associare i valori.
Se la Pop-up deve ricevere anche dei campi, impostare il parametro in questo modo:
<xsl:with-param name="pre_show_js">
<xsl:text>nnnnnnnnnnn();</xsl:text>
.......
</xsl:with-param>
dove nnnnnnn è il nome della funzione creata (importante le parentesi ed il punto e virgola) ed il resto lo si deve formattare come specificato
nel paragrafo precedente.
Decodifica codici - come gestire le descrizioni dalle pop di ricerca
Le pagine XSL dovranno prevedere le descrizioni nella WEB_MAP for(*OUTPUT) con attributo *OUTPUT per ciascun campo contenuto che necessita la decodifica.
La lettura delle descrizioni andranno preferibilmente implementate nelle EVTROUTINE £avFrameworkManager.uTerminate.
La weblet prompter è stata modificata in modo tale da poter restituire in automatico la decrizione del codice scelto.
Per attivare tale funzionalità bisogna attenersi alle seguenti regole:
- La WEBROUTINE "Close" della POP-UP deve prevedere il campo descrizione nella WEB_MAP *OUTPUT con attributo *HIDDEN
(assicurarsi che sia anche presente nella DIV hidden della pagina XSL)
- Nella weblet prompter specificare nel parametro "description_field_from" il nome del campo da cui reperire la descrizione (quello specificato al punto sopra).
- Nella pagina XSL del command o del filtro inserire la descrizione in una cella (<td>) a destra del prompter e NON nella stessa.
Questo perchè l'automatismo cerca la prima cella a destra di quella che contiene il prompter e sovrascrive il contenuto mettendoci la descrizione presa dalla POP-UP.
La classe da assegnare al TD della descrizione è ED_DESCR
Intercettare la chiusura della finestra ( senza aver selezionato un record )
Come per la gestione eventi delle popup è possibile far scaturire un evento se l'utente chiude una popup con la x senza aver selezionato alcun record. Sarà sufficiente come avviene per la gestione eventi normale inserire i dati ( wam , webroutine ,campo e valore ) nei nuovi campi aggiunti su ed_prompter in modo che venga scaturito l'evento e successivamente intercettato da lansa.