Weblet ed_lista_view_ajax
Ad ogni lista presente all'interno di una wam va applicata la weblet ed_lista_view_ajax: questa weblet integra una modalità di paginazione che non prevede il refresh dell'intera pagina.
I parametri sono i seguenti:
Regole principali
Creare due liste: una per la memorizzazione dei dati ed un'altra per la visualizzazione, entrambe con il parametro ENTRYS impostato con il valore *MAX
Inserire la lista da visualizzare all'interno della WEB_MAP FOR(*BOTH)
Creare all'interno della wam una nuova webroutine denominata HANDLEPAGELIST_XX (dove XX è un valore numerico progressivo che aumenta in base al numero di liste da visualizzare) utilizzando l'apposito template EDVFLWPAGA. Verrà generato il seguente codice base LANSA:
* ========================================
* WEBROUTINE PER GESTIONE PAGINAZIONE AJAX
* ========================================
WEBROUTINE NAME(HANDLEPAGELIST_XX)
WEB_MAP FOR(*INPUT) FIELDS(£R_DMUSER £WDM_SESS £WDM_INFO)
WEB_MAP FOR(*INPUT) FIELDS(£DMPAJPNXT £DMPAJPCUR £DMPAJPATH £DMPAJPITM £DMPAJNOMI)
£DMWAMHND.um_InitializeWAM2 TIPO("WAM") P_IDSESSIONE(£WDM_SESS) P_INFOSESSIONE(£WDM_INFO)
USE BUILTIN(UD_PAGELIST) WITH_ARGS(£NOMELIST2 £NOMELISTA £DMPAJPATH "5" £DMPAJPCUR £DMPAJPNXT £DMPAJPITM £DMPAJNOMI) TO_GET(£RETCODA)
* ==========================================================================
* SE NECESSARIO, LISTA £NOMELISTA RITORNA CARICATA E PUO' ESSERE PROCESSATA
* ==========================================================================
* SELECTLIST £NOMELISTA
*
* UPD_ENTRY IN_LIST(£NOMELISTA)
*
* ENDSELECT
ENDROUTINE
Aprire l'xsl della webroutine HANDLEPAGELIST_XX ed incollare la seguente struttura di base, modificando il nome della lista dove necessario, ed aggiungendo intestazione e corpo della lista:
<?xml version="1.0" encoding="UTF-8"?>
<!-- Web application : WAMPROVA Prova ed_lista_view_ajax -->
<!-- Web routine : HANDLEPAGELIST_01 -->
<!-- Timestamp : 2017-03-18T19:20:39+01:00 -->
<xsl:transform version="1.0" exclude-result-prefixes="lxml wd"
xmlns:lxml="http://www.lansa.com/2002/XML/Runtime-Data"
xmlns:wd="http://www.lansa.com/2002/XSL/Weblet-Design"
xmlns="http://www.w3.org/1999/xhtml"
xmlns:xsl="http://www.w3.org/1999/XSL/Transform">
<xsl:import href="std_keys.xsl" />
<xsl:import href="std_variables.xsl" />
<xsl:import href="std_varchar.xsl" />
<xsl:import href="vlf_layout.xsl" />
<xsl:output method="xml" omit-xml-declaration="yes" encoding="UTF-8"
indent="no" />
<xsl:template match="/">
<xsl:choose>
<xsl:when test="$lweb_design_mode">
<xsl:call-template name="layout" />
</xsl:when>
<xsl:otherwise>
<xsl:apply-templates select="/lxml:data/lxml:lists/lxml:list[@name='NOMELISTA']" />
</xsl:otherwise>
</xsl:choose>
</xsl:template>
<xsl:template match="/lxml:data">
<xsl:apply-templates select="/lxml:data/lxml:lists/lxml:list[@name='NOMELISTA']" />
</xsl:template>
<xsl:template match="/lxml:data/lxml:lists/lxml:list[@name='NOMELISTA']">
<xsl:variable name="thelist"
select="/lxml:data/lxml:lists/lxml:list[@name='NOMELISTA']" />
<input type="hidden" name="NOMELISTA.."
value="{count(lxml:list-entries/lxml:entry[1])}" />
<table id="NOMELISTA" class="edTableList">
<thead>
<!-- CONTENUTO INTESTAZIONE LISTA -->
</thead>
<tbody>
<xsl:for-each select="$thelist/lxml:list-entries/lxml:entry">
<!-- ELENCO XSL:VARIABLE DEI CAMPI DELLA LISTA -->
<tr>
<!-- CONTENUTO CORPO LISTA -->
</tr>
</xsl:for-each>
</tbody>
</table>
</xsl:template>
</xsl:transform>
Inserire il campo contenente il percorso per il salvataggio della lista all'interno della WEB_MAP FOR(*BOTH) come *HIDDEN (il campo verrà poi passato al parametro data_file_path). Inizializzare il campo con la seguente istruzione: £DMWAMHND.up_UserPathHandler.um_GetUserTmp( £ThisHandler.avLoggedonUser ) + *pathdelim + £DMWAMHND.up_IDUnivocoHandler.um_GeneraID + "_" + *component + "HANDLEPAGELIST_XX"
Salvare la lista nel file sopra detto tramite USE BUILTIN(UD_TRANSFORM_LIST) WITH_ARGS(LISTAFULL NOMEFILE '5') TO_GET(£RETCODA)
Inserire il campo per impostare il numero di righe per pagina all'interno della WEB_MAP FOR(*BOTH). In caso di un'unica lista utilizzare PGRGXPAG. Inizializzare il campo con il valore 50. Il campo va inserito anche nella <div> hidden.
Inserire il campo contenente il numero della pagina corrente all'interno della WEB_MAP FOR(*BOTH) come *HIDDEN (sia lato codice che lato XSL inserendolo nella div hidden). Il nome del campo verrà poi passato al parametro current_page_field_name. L'EDIT_CODE del campo deve essere 4. Inizializzare il campo con il valore 1.
Inserire il campo contenente il numero totale di record della lista all'interno della WEB_MAP FOR(*BOTH) come *HIDDEN (sia lato codice che lato XSL inserendolo nella div hidden). Il campo verrà poi passato al parametro tot_list_entries. Impostare il campo come contatore per la lista contenente tutti i record. L'EDIT_CODE del campo deve essere 4.
Trascinare la weblet ed_lista_view_ajax all'interno della wam principale, nel punto in cui si vuole visualizzare la lista
Impostare i parametri della weblet (sotto un esempio con i soli parametri obbligatori):
<xsl:call-template name="ed_lista_view_ajax">
<xsl:with-param name="list_name" select="'NOMELISTA'" />
<xsl:with-param name="handle_wamname" select="'WAMPROVA'" />
<xsl:with-param name="handle_wrname" select="'HANDLEPAGELIST_01'" />
<xsl:with-param name="current_page_field_name" select="'CURPAGE'" />
<xsl:with-param name="data_file_path" select="key('field-value', 'R_FILEPTH')" />
<xsl:with-param name="tot_list_entries" select="key('field-value', 'TOTENTRY')" />
</xsl:call-template>
La lista deve avere la seguente struttura:
<xsl:template match="/lxml:data/lxml:lists/lxml:list[@name='LISTAEC']">
<xsl:variable name="thelist"
select="/lxml:data/lxml:lists/lxml:list[@name='LISTAEC']" />
<input type="hidden" name="LISTAEC.."
value="{count(lxml:list-entries/lxml:entry[1])}" />
<table id="LISTAEC" class="edTableList">
<thead>
<tr>
<th>
<xsl:value-of select="key('variable', 'MTXTEDCAUSALE')" />
</th>
<th>
<xsl:value-of select="key('variable', 'MTXTED0002254')" />
</th>
<th>
<xsl:value-of select="key('variable', 'MTXTED0002255')" />
</th>
<th>
<xsl:value-of select="key('variable', 'MTXTEDP')" />
</th>
<th>
<xsl:value-of select="key('variable', 'MTXTCO_DAREAVERE')" />
</th>
<th>
<xsl:value-of select="key('variable', 'MTXTEDIMPORTO')" />
</th>
</tr>
</thead>
<tbody>
<xsl:for-each select="$thelist/lxml:list-entries/lxml:entry">
<xsl:variable name="CAUSALE" select="lxml:column[1]" />
<xsl:variable name="DATADOC" select="lxml:column[2]" />
<xsl:variable name="NUMDOC" select="lxml:column[3]" />
<xsl:variable name="FLAGPROV" select="lxml:column[4]" />
<xsl:variable name="FLAGSEGNO" select="lxml:column[5]" />
<xsl:variable name="IMPORTEUR" select="lxml:column[6]" />
<tr>
<td>
<input id="{$CAUSALE/@id}"
class="utext" size="35" name="{$CAUSALE/@id}"
value="{$CAUSALE}" />
</td>
<td>
<input id="{$DATADOC/@id}"
class="utext" size="10" name="{$DATADOC/@id}"
value="{$DATADOC}" />
</td>
<td>
<input id="{$NUMDOC/@id}"
class="number" size="7" name="{$NUMDOC/@id}"
value="{$NUMDOC}" />
</td>
<td>
<input id="{$FLAGPROV/@id}"
class="utext" size="3" name="{$FLAGPROV/@id}"
value="{$FLAGPROV}" />
</td>
<td>
<input id="{$FLAGSEGNO/@id}"
class="utext" size="3" name="{$FLAGSEGNO/@id}"
value="{$FLAGSEGNO}" />
</td>
<td>
<input id="{$IMPORTEUR/@id}"
class="utext" size="13" name="{$IMPORTEUR/@id}"
value="{$IMPORTEUR}" />
</td>
</tr>
</xsl:for-each>
</tbody>
</table>
</xsl:template>
Eliminare i parametri allow_sort, allow_col_resize ed il tag script
Eliminare il tag div con classe std_grid_wrapper ed il relativo xsl:if sottostante
Nel tag table sostituire la classe std_grid con la classe edTableList ed eliminare l'attributo class per il tag tr
Eliminare tutti gli attributi relativi ai tag th ed inserire all'interno di ognuno la sola descrizione della colonna
Eliminare tutti gli attributi relativi a tr e td all'interno del tag tbody ed i relativi xsl:attribute
Inserire tutti gli eventuali campi hidden della lista all'interno dell'ultimo td con classe edHidden