Unofficial Content
  • This documentation is valid for:

English version

Cómo incluir PageCount information en Pattern Work With

La idea central de este documento es explicar cómo se puede modificar un pattern existente (agregando o cambiando una funcionalidad específica) para adaptarlo a las necesidades del cliente. En este ejemplo mostraremos la manera de agregar un bloque de texto debajo de la grilla generada por el Work With Pattern, para mostrar la información del Page Count.

PageCountInformationFinalResult

Después de leer la documentación sobre patterns, llegamos a la conclusión de que este tipo de cambio visual puede ser realizado modificando el template correspondiente (archivo dkt).

Qué se necesita para implementar esta nueva funcionalidad?

1 - Un bloque de texto para mostrar la leyenda "Page m of n"
2 - Asignar el valor correspondiente a m y a n

Empezando...

Como ya sabemos, al aplicar el Pattern Work With, se genera un Selection Form. En el mismo aparecen filtros y una grilla con los registros de la transacción sobre la cual aplicamos el Pattern. Es debajo de esa grilla que deseamos agregar el bloque de texto para mostrar la información correspondiente al PageCount.

PageCountInformationDefaultGrid

Nota: Se modificó el dominio Page para mostrar 5 registros por página (el valor por defecto es 10).

PageCountInformationModifiedDomain

La parte técnica...

Como mencionamos anteriormente, dicho cambio debe ser realizado en el template encargado de generar toda la información de los work with, grids y prompts, en este caso GridTemplate.dkt.

Mientras editamos el archivo GridTemplate.dkt (ubicado en C:\<Program Files>\ARTech\Patterns11\Patterns\WorkWith), encontraremos lo siguiente en la línea 238:

<%= HtmlToKmw.TextBlock("TitleText", General.NodeDescription(node), GlobalWorkWithConfig.Config.Theme("Subtitle")) %>

Ahí vemos como el bloque de texto fue agregado. Es importante recordar que los Patterns cuentan con un archivo de Ayuda llamado Documentation.chm. Dicho archivo está ubicado en C:\<Programs Files>\ARTech\Patterns11\Tools. Si abrimos ese archivo y buscamos ?textblock?, encontraremos la información correspondiente a dicho método.

PageCountInformationTextBlockMethodHelp

Ahora sabemos que los parámetros que pueden ser asignados al bloque de texto son: nombre, valor y clase.

Además, las 2 líneas previas nos pueden resultar conocidas:

<%= HtmlToKmw.OpenTag("TR") %> //nueva fila        
 <%= HtmlToKmw.OpenTag("TD") %> //nueva celda

A su vez, las siguientes líneas deben ser agregadas para cerrar esas etiquetas:

<%= HtmlToKmw.CloseTag("TR") %>
 <%= HtmlToKmw.CloseTag("TD") %>

Esto ayudará para crear nuestro propio bloque de texto. Ahora que sabemos como agregar un bloque de texto, sólo nos falta saber el lugar donde se está "dibujando" la grilla en el template, para que podamos agregarle una línea debajo de la misma e incluir nuestro bloque de texto en la nueva línea.

Si miramos la línea 350 del template encontraremos algo como esto:

<%= HtmlToKmw.OpenTag("TR") %> // nueva línea
    <%= HtmlToKmw.BeginTableCell("", 2) %> //nueva celda
Qué son esos parámetros ? Miremos la documentación... 

PageCountInformationBeginTableCellMethodHelp

Bien, ahora sabemos que podemos setear la alineación y también la propiedad colspan de la nueva celda.
Miremos la línea 352...
  

<%= HtmlToKmw.BeginGrid(...) //la grilla está siendo agregada!
// código para agregar la información de la grilla

De nuevo, miremos la línea 391...

      <%= HtmlToKmw.EndGrid() %> //fin de la grilla
   <%= HtmlToKmw.CloseTag("TD") %> //cierra la celda
<%= HtmlToKmw.CloseTag("TR") %> //cierra la fila

Todo para indicar que aquí podríamos agregar una nueva fila ya que la misma estará justo debajo de la grilla, eso es lo que necesitamos.

Entonces, probemos agregar una nueva fila para nuestro textblock. Para esto, necesitamos agregar las siguientes líneas al archivo GridTemplate.dkt.
 

<%= HtmlToKmw.OpenTag("TR") %> // nueva línea
     <%= HtmlToKmw.BeginTableCell("center", 2) %> // queremos que la información esté centrada y colspan = 2, lo mismo que usa la grilla
         <%= HtmlToKmw.TextBlock("PageCountInformation", "PageCountInformation" , GlobalWorkWithConfig.Config.Theme("Subtitle")) %> // NUESTRO TEXTBLOCK
     <%= HtmlToKmw.CloseTag("TD") %>
<%= HtmlToKmw.CloseTag("TR") %>
Probemos...

PageCountInformationTextBlockBelowGrid

Bien! Nuestro textblock se ve perfecto! pero aún no muestra la información que necesitamos. Dado que dicha información se obtiene en tiempo de ejecución, necesitamos agregar el código correspondiente a un evento o sub-rutina. En otras palabras, necesitamos encontrar un evento o ub-rutina para agregar algó así: TextBlock.Caption = "Page " + &CurrentPage + " of " + str(gridName.PageCount)

Notas:

a) &CurrentPage ya está definida en el dkt porque la misma se usa para la paginación.
                  // Variables for paging.
                  ...
                 vars.AddCommon("CurrentPage", "Current Page", DataType.Numeric, 4, 0); //ahora también sabemos como agregar una variable!!!

b) sólo necesitamos saber cómo referenciar a la grilla correspondiente para poder usar su método PageCount.
Para esto, veamos los eventos y sub-rutinas generadas en el web panel Work With. Como podemos observar, hay un evento Start, Refresh y sub-rutinas para manejar las distintas funcionalidades del web panel y de sus componentes. Si miramos particularmente el evento Refresh observaremos que en el mismo se llama a la sub-rutina 'FixCurrentPage', esta sub-rutina usa la variable &CurrentPage y también el método Grid1.PageCount, todo parece indicar que aquí sería el lugar indicado para agregar nuestra asignación.

Ya casi finalizamos, volvamos a nuestro archivo GridTemplate.dkt para buscar la sub-rutina 'FixCurrentPage' y de esa forma agregar nuestro código al final de la misma.

Comienza en la línea 611... 

Sub 'FixCurrentPage'
    If <%= gridName %>.PageCount = 0
       &CurrentPage = 0
    Else
       If &CurrentPage > <%= gridName %>.PageCount
          &CurrentPage = <%= gridName %>.PageCount
       Else
          If &CurrentPage < 1
             &CurrentPage = 1
          EndIf
       EndIf
    EndIf
    PageCountInformation.Caption =  "Page " + &CurrentPage.ToString() + " of " + str(<%= gridName %>.PageCount) //nuestra asignación
EndSub
Vamos a re-aplicar el pattern para ver si funciona....

PageCountInformationFinalResult

Eso es todo. Ahora estamos mostrando Page 1 of 3 justo debajo de la grilla!!!

Cosmética : Vamos a agregar nuestro textblock dentro de una nueva tabla, para de esa forma poder asignarle una clase del tema que estamos usando y darle un mejor look and feel.

<%-- PageCount Information --%>
    <%= HtmlToKmw.OpenTag("TR") %>
        <%= HtmlToKmw.BeginTableCell("", 2) %>
            <%= HtmlToKmw.BeginTable("TablePageCount", "TableBottom", 0, 0, "none", 0) %>
                <%= HtmlToKmw.OpenTag("TR") %>
                    <%= HtmlToKmw.BeginTableCell("center", 2) %>
                        <%= HtmlToKmw.TextBlock("PageCountInformation", "PageCountInformation" , GlobalWorkWithConfig.Config.Theme("Subtitle")) %>
                    <%= HtmlToKmw.CloseTag("TD") %>
                <%= HtmlToKmw.CloseTag("TR") %>
            <%= HtmlToKmw.EndTable() %>
        <%= HtmlToKmw.CloseTag("TD") %>
<%= HtmlToKmw.CloseTag("TR") %>

Resultado final...

PageCountInformationFinal2

Click here to download the modified GridTemplate.dkt file

Last update: February 2024 | © GeneXus. All rights reserved. GeneXus Powered by Globant