Release Notes Versión 8.0 2 Índice Índice ............................................................................................................................................................. 3 Novedades de la versión 8.0 ......................................................................................................................... 5 Mayor usabilidad en la aplicación generada ................................................................................................ 6 Búsqueda Universal .................................................................................................................................. 6 Mayor potencia en el WebPanelDesigner .................................................................................................. 14 Manejo de SDT en Web Panel Designer ................................................................................................. 14 Mejoras en la personalización de la interfaz de usuario ............................................................................ 19 Nuevas opciones de themes: .................................................................................................................. 19 Mejoras en configuración de Layouts ..................................................................................................... 20 Posibilidad de deshabilitar el seteo de Master Page en Web Panel Designer y Patterns ...................... 21 Mejoras de usabilidad en el desarrollo ....................................................................................................... 23 Comandos Enable / Disable K2BTools Dynamic Pattern Application ..................................................... 23 Comando “Force K2BTools Patterns Application” .................................................................................. 23 Mensajes de advertencia al detectar partes fuera del default ............................................................... 24 Mensajes de advertencia para ausencia de invocación a stack en Master Pages .................................. 24 Opción para mantener regla Parm de la transacción dentro de un slot fixed........................................ 25 Personalización de ubicación de parte Designer .................................................................................... 26 Otras mejoras.............................................................................................................................................. 27 Visualización de descripciones en reportes Excel y PDF ......................................................................... 27 Selección de columnas en runtime para Exports .................................................................................... 27 Deshabilitación global de Back to Work With ........................................................................................ 27 Posibilidad de agregar código en nodos Action ...................................................................................... 28 Propiedad para deshabilitar grids sortables ........................................................................................... 29 3 Propiedad “Enable datepicker” en patterns ........................................................................................... 29 Propiedades Height y Width en Embedded Pages ................................................................................. 30 Nuevas subrutinas de usuario para Add y Remove en Multiple Selections ........................................... 30 Errores corregidos ....................................................................................................................................... 32 Patterns ................................................................................................................................................... 32 Web Panel Designer ................................................................................................................................ 32 Instalación ................................................................................................................................................... 33 Instalación en GeneXus Server ............................................................................................................... 33 Anexo I – Actualización de reportes Excel. ................................................................................................. 34 Anexo II – Incorporación del buscador universal. ....................................................................................... 34 4 Novedades de la versión 8.0 Entre las nuevas funcionalidades incorporadas en K2BTools 8.0 se destaca el aprovechamiento de la funcionalidad Full Text Search de GeneXus, mediante la posibilidad de incorporar de forma sencilla un buscador universal en las aplicaciones generadas por K2BTools, agregando un nuevo punto de acceso a la aplicación. Dentro del WebPanelDesigner se sigue aumentando la flexibilidad, haciendo más sencilla la integración con servicios, mediante la posibilidad de poder incorporar SDT´s directamente en pantalla. Por otro lado seguimos apuntando a mejorar la usabilidad de la herramienta. Para esto hemos implementado un acceso directo a la funcionalidad de GeneXus dynamic pattern update para poder habilitar y deshabilitar de forma rápida la actualización automática de instancias de patterns. Además ahora se emiten warnings cuando se detectan situaciones anormales en la KB y se brinda una acción que aplica todas las instancias del patrón. Seguimos trabajando en tener una mayor facilidad en la personalización de la interfaz de usuario. En este caso basados en el tema K2BModern proveemos otros nuevos temas, además de brindar mayor flexibilidad al desarrollador. En estas release notes hemos dividido las funcionalidades nuevas en cinco categorías: Mayor usabilidad en la aplicación generada: Aquí se muestra cómo hacer uso de la funcionalidad de FullTextSearch para poder tener un buscador universal en la aplicación generada. Mayor potencia en WebPanelDesigner: Aquí se presenta la posibilidad de agregar SDTs en pantalla directamente desde el WebPanelDesigner, para hacer más sencillo interactuar con servicios que devuelven o reciben datos en forma de un SDT. Mejoras en la personalización de la interfaz de usuario: En esta sección se muestran las nuevas opciones de interfaz que provee K2BTools. Mejoras de usabilidad en el desarrollo: Aquí se listan las mejoras que se hicieron en esta versión para hacerle más fácil al desarrollador usar K2BTools Otras mejoras: En esta sección se muestran varias mejoras que se incluyen también en esta versión. Para el pasaje de versión de una KB con la 7.1 a la 8.0, se sugiere seguir el Anexo I. 5 Mayor usabilidad en la aplicación generada Búsqueda Universal En la versión 8.0 se K2BTools se agregó la posibilidad de incorporar fácilmente Full-Text Search en los sistemas generados. Usando esta funcionalidad, se puede brindar al usuario una interfaz más fluida y más agradable para hacer búsquedas. Visión funcional El resultado final de incorporar esta funcionalidad es la inclusión de la opción de búsqueda en la aplicación generada, con el comportamiento que se describe a continuación Consultas En la Master Page de la aplicación, aparece un campo para ingresar el criterio de búsqueda. Ilustración 1 - Campo de búsqueda en la Master Page Luego de completar este campo, se redirige al usuario a una página con el resultado de su búsqueda: Ilustración 2 - Resultados de búsqueda 6 Pueden usarse las opciones en la parte superior para ver los resultados de un tipo particular: Los clientes, las ciudades, etc. Ilustración 3 - Vista de clientes de los resultados obtenidos Este mecanismo de búsqueda acepta consultas complejas. Por ejemplo, es posible indicar términos como “*@example.com”, que retornará (en este caso) todos los clientes con dirección de email en el dominio “example.com”. Ilustración 4 - Resultado de buscar "*@example.com" El motor también acepta expresiones booleanas, como “NOT Perez AND Gerente”, que retornará las entradas que tengan la palabra Gerente pero no la Palabra Perez, en este caso: Ilustración 5 - Resultado de buscar "NOT Perez AND Gerente" Las consultas aceptadas están documentadas en la página del wiki GeneXus sobre esta funcionalidad. Controles de seguridad Las siguientes consideraciones son hechas al momento de ejecutar la búsqueda: 7 1. Para que el usuario pueda realizar búsquedas deberá tener permisos a realizar la actividad de usuario: K2BToolsSearchResult. Si se usa la integración con el GAM el permiso será K2BToolsSerachResult_Execute 2. Al momento de mostrar los tabs para filtrar los resultados de búsqueda, se toman en cuenta los permisos del usuario conectado, usando la API de seguridad de K2BTools. 3. Cuando se realiza la búsqueda, se usa esta misma API para verificar que el usuario tenga acceso a los objetos encontrados. Formato del resultado Cada uno de los resultados tiene los elementos definidos a continuación. Ilustración 6 - Composición de resultado de búsqueda Ingreso a resultados Cuando se presiona en el título de un resultado, se dirige al usuario al Entity Manager Correspondiente. Ilustración 7 - Redirección a "Entity Manager" Administración Es posible administrar el motor de búsqueda en el panel K2BToolsIndexAdmin, donde se habilita la opción de volver a regenerar los índices utilizando la operación reindex-all. 8 Para poder acceder a la administración, el usuario deberá tener permisos para realizar la actividad de usuario K2BToolsIndexAdmin, o en caso de usar la integración con GAM tener el permiso habilitado de K2BToolsIndexAdmin_Execute. Cambios en patterns Para implementar esta funcionalidad, fue necesario incorporar nuevas propiedades a la instancia de patterns. Estas propiedades afectan únicamente la generación de los diálogos de búsqueda. Los cambios están acotados al pattern K2BEntityServices. Las propiedades agregadas fueron: En el nodo raíz de la instancia Ilustración 8 - Propiedad "Entity Image" En este nodo se agregó la propiedad “Entity Image”. El contenido de esta imagen debería representar de forma genérica a los elementos de la entidad correspondiente. Es usado en algunos casos como icono para el resultado de la búsqueda si el registro a mostrar no tiene una imagen asociada. En el nodo Transaction En este nodo se especifican las propiedades que definirán si la entidad puede ser buscada mediante el buscador universal, y, en caso de poderse, cómo son mostrados los resultados. Ilustración 9 - Nuevas propiedades en nodo Transaction A continuación se describen estas propiedades y su uso. Searchable 9 Esta propiedad determina si las instancias de esta transacción serán incluidas en el motor de búsqueda o no. Su valor es copiado a la propiedad “Searchable” de la transacción GeneXus. Como una transacción sólo puede ser incluida en el motor de búsqueda si es Business Component, esta propiedad se muestra solo en este caso. Si el valor de la propiedad es “False”, se deshabilita la generación de los diálogos de búsqueda para la transacción. Por esta razón, se ocultan también todos los campos asociados a esta búsqueda. Search Result Title Esta propiedad indica cuál es el título que debe mostrarse en el resultado de búsqueda. El valor default es el Description Attribute de la transacción en caso de existir. Search Result Displayed Image Esta propiedad determina si se usará un atributo imagen de la transacción (definido en la siguiente propiedad) como imagen para los resultados de esta entidad, o se usará la imagen correspondiente a la entidad (definida en el nodo raíz de la instancia). Los valores posibles para esta propiedad son: Object Only: Se usará siempre el atributo del objeto que se está visualizando. Entity Only: Se usará siempre la imagen correspondiente a la instancia. Prefer Object: Se usará el atributo del objeto siempre que contenga un valor válido, y la imagen correspondiente a la entidad en cualquier otro caso. Search Result Image Attribute Esta propiedad determina cuál es el atributo que será mostrado como imagen del resultado de búsqueda. El uso de esta propiedad está condicionado al valor de la propiedad “Search Result Displayed Image”. El valor default es el Image Attribute de la transacción en caso de existir. Show BC Preview as Result Description y Search Result Description La propiedad “Show BC as Result Description” indica si debe usarse un preview del BC como descripción del resultado o no. En caso de usarse, se aprovecha la funcionalidad de highlighting presente en GeneXus. Ilustración 10 - Highlighting en resultados 10 En caso de no usarse, la descripción se toma del atributo indicado en la propiedad “Search Result Description”. Esta posibilidad permite definir descripciones basadas en el valor de un atributo de la transacción. Puede usarse también para crear descripciones elaboradas usando atributos fórmula. Ilustración 11 - Uso de "Search Result Description" Objetos generados por K2BTools Para cada instancia del patrón Entity Services que tiene la propiedad “Searchable” en “True”, K2BTools genera los siguientes objetos: GetSearchData<TrnName>: obtiene el contenido a mostrar para un resultado de búsqueda determinado, asumiendo que el tipo del resultado se corresponde con la transacción a la que pertenece la instancia del patrón. SearchViewer<TrnName>: redirige al usuario al EntityManager correspondiente a la transacción. Es asignado como “Search Viewer” de la transacción padre de la instancia. Su generación es necesaria porque esta propiedad acepta objetos que tienen una regla Parm que recibe sólo la PK de la transacción. Objetos básicos La implementación de la búsqueda puede ser modificada por el desarrollador GeneXus, tanto para modificar la apariencia de las interfaces como para agregar controles u optimizaciones y extensiones particulares al escenario que se esté resolviendo. Ilustración 12 - Objetos básicos de search Los objetos involucrados en esta solución cumplen con las siguientes funciones: 11 1. K2BGetSearchableEntities: Retorna la lista de entidades que están incluidas dentro del índice de búsqueda. 2. K2BGetSearchableEntitiesCustomImplementation: Permite al desarrollador GeneXus extender la lista de entidades incluidas dentro del índice de búsqueda. 3. K2BGetSearchDataCustomImplementation: Permite al desarrollador GeneXus extender la extracción de datos desde un resultado de búsqueda para resultados que no se corresponden a ninguna transacción generada con K2BTools. Este procedimiento es útil en caso de que el desarrollador use el motor para indexar documentos fuera de las transacciones de la KB. 4. K2BGetSearchResultFromData: Este objeto no debería ser modificado por el desarrollador, ya que es mantenido automáticamente por K2BTools. Este procedimiento se encarga de determinar el contenido a ser mostrado de un resultado a partir de lo retornado por el motor. 5. K2BHeaderModernSearch: Es el header para el theme K2BModern que incluye el campo de búsqueda. Puede ser alterado para adaptar el header al theme corporativo de la KB. 6. K2BToolsSearchResult: Es el SDT usado para mantener en memoria los resultados a mostrar. 7. K2BTabbedViewForLayoutModernSearch: Contiene la implementación necesaria para separar en tabs por entidad los resultados de búsqueda. 8. K2BToolsGetSearchResults: Obtiene los resultados a mostrar en la interfaz de usuario. Puede ser extendido para agregar controles de seguridad u otras funcionalidades. 9. K2BToolsIndexAdmin: Es un Web Panel de muestra que permite al administrador del sistema forzar la regeneración del índice dentro del motor. 10. K2BToolsSearchResult: Es la interfaz principal para mostrar los resultados de búsqueda. Puede ser modificada por el usuario para adaptar la interfaz o agregar más opciones. 11. K2BToolsSearchResultEntityWC: Es la interfaz que despliega los resultados para cada entidad. Puede ser modificada por el usuario para adaptar la interfaz o agregar más opciones. 12. SearchableTransactions: Usado por el procedimiento “K2BGetSearchableEntities” para enviar la lista de entidades auditables. Impacto en configuración de Entity Services Se agregaron nuevas propiedades al objeto de configuración del patrón K2BEntityServices. Estas propiedades son las descriptas a continuación. Ilustración 13 - Propiedad "Searchable" en configuración de Entity Services En el nodo “Transaction”, se incluye la propiedad “Searchable”. El valor de esta propiedad es el tomado como default por la propiedad de mismo nombre en la instancia del Patrón. Puede usarse esta propiedad para habilitar o deshabilitar globalmente la inclusión de transacciones en el índice. 12 Ilustración 14 - Propiedades "Search Viewer" y "Search Get Data Procedure" En el nodo “Objects” se incluyen dos nuevas propiedades: “Search Viewer” y “Search Get Data Procedure”. Estas propiedades pueden usarse para cambiar el nombre de los objetos generados. Extensibilidad Es posible agregar resultados a esta interfaz de búsqueda que no estén dentro de transacciones GeneXus. Para hacer esto, es necesario usar el mecanismo detallado en la documentación de GeneXus correspondiente. Además de realizar estos pasos, es necesario actualizar los procedimientos “K2BGetSearchableEntitiesCustomImplementation” y “K2BGetSearchDataCustomImplementation”. En estos procedimientos es necesario agregar la lógica para: K2BGetSearchableEntitiesCustomImplementation: Incorporar la nueva entidad a la lista de entidades habilitadas para el usuario. Esto la incorporará a la vista de resultados globales, y agregará un nuevo tab para la entidad. La incorporación o no debe considerar los permisos del usuario autenticado en el sistema. K2BGetSearchDataCustomImplementation: Obtener la información a desplegar en pantalla para un resultado particular. Concretamente, deben completarse los parámetros de salida para indicar título, descripción, e imagen. 13 Mayor potencia en el WebPanelDesigner Manejo de SDT en Web Panel Designer En la versión 8.0 se incorporó en Web Panel Designer la posibilidad de mostrar variables definidas a partir de SDT’s. Esto sirve tanto para crear secciones planas de atributos como para crear grillas con el contenido de un subnivel colección del SDT. Creación manual Para este fin se creó un nuevo nodo, el nodo SDT Variable, que está disponible dentro de nodos Attribute o dentro del contenido de grids normales o free style. Además, se agregaron propiedades a los nodos Attributes, Grid, y Free Style Grid, para indicar el SDT que contienen. Los nodos Attributes, Grid, y Free Style Grid tienen ahora dos nuevas propiedades: “Based On SDT” y “Based On SDTLevel”. Estas propiedades permiten especificar el SDT que será usado dentro del nodo, y el nivel del SDT al que se corresponde el nodo. Ilustración 15 - Nuevas propiedades en nodos Attributes, Grid, y Free Style Grid La definición de un SDT puede contener varios niveles. Por esta razón, es posible tener varios nodos Attributes, Grid, o Free Style Grid asociados a un mismo SDT. Por ejemplo si consideramos el siguiente SDT: Ilustración 16 - SDT de ejemplo La siguiente estructura de Web Panel Designer es válida: 14 Ilustración 17 - Estructura SDT en Web Panel Designer La anidación puede continuar tantos niveles como sea necesario. No es obligatorio contemplar todos los niveles del SDT en la definición del Web Panel (pueden ignorarse algunos de estos niveles, siempre que no sean niveles intermedios del SDT). La regla a seguir en estos casos es incluir siempre un nodo Grid o Free Style Grid para cada nivel colección, y un nodo Attributes para cada nivel que no es colección. La elección entre usar un nodo Free Style Grid o Grid es libre, con la limitación natural de que no es posible usar un Grid si se desea incluir subniveles del nivel actual dentro del Web Panel. En el nodo asociado a la variable del SDT, se deberá indicar en la propiedad Field el campo del SDT que se estará visualizando. Para el SDT del ejemplo, podemos ver correspondiente a las variables dentro del freestylegrid: Ilustración 18 - Estructura de una variable basada en un SDT El campo CityId referencia al campo CityId, dentro del SDT CountryCityCusomterSDT, nivel City. Creación automática Para facilitar la creación de estructuras basadas en SDT dentro de Web Panels creados con Web Panel Designer, se agregó una nueva acción “Add SDT”. 15 Ilustración 19 - Acción Add SDT Esta acción está disponible en los nodos: WebForm, Attributes, Free Style Section, Group, Line Separator, Multiple Selection y Tab (los mismos nodos donde en versiones anteriores está disponible la acción “Add Grid From Transaction”). Cuando se ejecuta esta acción, se presenta al desarrollador un diálogo como el que se muestra a continuación. Ilustración 20 - Diálogo de selección de SDT Luego de que el desarrollador selecciona el SDT que quiere agregar en pantalla, se agrega la definición del SDT al nodo correspondiente siguiendo la siguiente heurística: Por cada miembro del SDT, se agrega un nodo SDT Variable. Por cada nivel no colección, se agrega un nodo Attributes con el contenido del nivel. Por cada nivel colección que no contiene sub niveles, se agrega un nodo Grid. Por cada nivel colección que contiene sub niveles, se agrega un nodo Free Style Grid. La siguiente imagen muestra el resultado de ejecutar la acción a partir del SDT origen. 16 Ilustración 21 - Resultado de ejecutar "Add SDT" De forma análoga a lo que sucede con las acciones “Add Grid From …”, el resultado de esta acción es modificable por el desarrollador. El desarrollador puede, si quiere, eliminar atributos o inclusive niveles completos. Carga del SDT Siempre que se agrega un SDT en pantalla, se genera una subrutina de usuario llamada “U_LoadSDT”. Esta subrutina es la encargada de cargar los valores correspondientes del SDT, usando el mecanismo que el desarrollador crea más conveniente. El momento de ejecución de esta subrutina depende de la definición del nodo correspondiente a la raíz del SDT en el Designer. Si este nodo es un nodo Attributes, la subrutina es invocada en el evento Refresh. Si es un nodo Grid o Free Style Grid, esta subrutina puede ejecutarse en más momentos. Por más información, ver la sección “Nuevas propiedades en grillas”. Nuevas propiedades en grillas Cuando se cargan grillas desde un SDT, existen dos opciones: Que el procedimiento de carga del SDT maneje la paginación, o que el procedimiento retorne todos los valores, y sobre este conjunto el Designer implemente su paginación. La primera opción tiene como principal ventaja que puede evitar costos de carga del SDT, ya que el desarrollador tiene la libertad necesaria para cargar en cada momento únicamente los ítems visibles en la página actual. Para hacer esto, el desarrollador debe considerar la variable “&CurrentPage_{GridName}” y el valor de la propiedad “Page” dentro del nodo. 17 La segunda opción tiene como principal ventaja el hecho de que la programación queda más simple, ya que el desarrollador carga una única vez el SDT a mostrar, y Web Panel Designer generará código para pasar entre las páginas correspondientes (en caso de existir). Para poder seleccionar entre estas dos opciones, los nodos Grid y Free Style Grid incluyen la propiedad “Get SDT On Grid Paging”. Ilustración 22 - Propiedad “Get SDT On Grid Paging” Cuando esta propiedad está con su valor en “True”, el SDT será recargado cada vez que el usuario final cambie de página en la grilla. En este caso, la subrutina “U_LoadSDT” será invocada en cada cambio de página. El desarrollador debe contemplar la posición del usuario en la grilla para hacer la carga en la subrutina. En el caso contrario, cuando el valor de la propiedad es “False”, la subrutina será invocada una única vez en el evento Refresh, y no será invocada en ningún otro momento por el Designer. En este caso, el desarrollador no debe contemplar la posición del usuario en la página al momento de cargar el SDT. Notas: Esta propiedad es mostrada sólo en grillas que no se corresponden con subniveles de un SDT mayor. En grillas que se corresponden a sub niveles dentro de una estructura mayor, la paginación puede hacerse solamente en la grilla correspondiente al primer nivel del SDT (si la raíz del SDT no es una colección, no es posible realizar paginado en las grillas generadas). En grillas que se corresponden a sub niveles la propiedad “Page” no es mostrada, y su valor se asume igual a cero, es decir, se muestran todos los elementos del nivel. 18 Mejoras en la personalización de la interfaz de usuario Nuevas opciones de themes: En la versión 7.1 de K2BTools se introdujo el nuevo theme “K2BModern”. Continuando con la evolución de K2BTools en este sentido, en K2BTools 8.0 se incluyen tres variantes de este theme, para que el desarrollador pueda elegir la que más se acerca al resultado deseado. Las opciones de theme incorporadas a la versión 8.0 son las siguientes. K2BModernBlue K2BModernBordeaux K2BModernGrey K2BModern Ilustración 23 - Opciones de theme versión 8.0 Para cambiar el theme seleccionado, seguir estas instrucciones: 1. Cambiar el valor de la propiedad “Theme” de la versión de la KB. 2. Cambiar el valor de la propiedad “Theme” de (las) Master Page(s) de la aplicación. 3. Cambiar el valor de la propiedad “Theme” de las configuraciones de Web Panel Designer y ejecutar la funcionalidad Update All WebPanels 4. Cambiar el valor de la propiedad “Web Theme” de las configuraciones generales de los patrones K2BTools. 5. Ejecutar un “Rebuild All” en GeneXus. 19 Mejoras en configuración de Layouts A partir de la versión 8.0 de K2BTools, se flexibilizó la elección de objetos de Layout en los patrones Entity Services y Prompt, y también en el Web Panel Designer. Además, se mejoró la integración con las Master Pages de la KB para simplificar el uso del patrón. Los cambios en esta área apuntan a flexibilizar la generación de objetos. Los cambios se detallan en las próximas secciones. Elección de layouts a nivel de instancia en K2BEntity Services y K2BPrompt Se agregó nuevas propiedades a las instancias de estos patrones, que permiten al desarrollador seleccionar el Layout que se desea usar en esa instancia particular cuando se genera el objeto. Ilustración 24 - Nuevas propiedades en patrones K2BEntityServices y K2BPrompt Estas propiedades son útiles en escenarios donde existen varios puntos de acceso al sistema, y se desea que un conjunto específico de web panels tenga una visualización diferente a la default del sistema. Ilustración 25 - Configuración de Layouts default para K2BEntityServices Los valores default de estas propiedades se toman desde la configuración del patrón correspondiente. Para usar un nuevo Layout, es necesario agregar el nodo correspondiente bajo el nodo Layout dentro de la configuración del patrón correspondiente. Se recomienda hacer esto copiando un nodo existente y alterando las propiedades necesarias (generalmente, la propiedad “Layout Object”). Elección de layout a nivel de Web Panel en Web Panel Designer Ilustración 26 - Propiedad "Layout Object" en nodod Web Form 20 Se agregó una nueva propiedad en el nodo Web Form (raíz de la especificación de un Web Panel creado con Web Panel Designer) llamada “Layout Object”. Ilustración 27 - Propiedad "Layout Object" en configuración de Web Panel Designer Esta propiedad especifica el objeto de layout que debe usarse en la generación del Web Panel. El valor por defecto de esta propiedad se toma de la propiedad con el mismo nombre del objeto de configuración de Web Panel Designer. Posibilidad de deshabilitar el seteo de Master Page en Web Panel Designer y Patterns Existen escenarios en los cuales es deseable poder setear una master page diferente según el ambiente para el cuál se está generando. Por esta razón, se agregó la posibilidad de que la master page pueda ser tomada del environment. Para poder habilitar este comportamiento se agrega una propiedad para que los patrones y el webpaneldesigner no seteen la master page sino que tomen la por defecto. Las propiedades agregadas son: Propiedad “Set MasterPage” en configuración de Web Panel Designer: Afecta la generación de objetos creados usando Web Panel Designer. Ilustración 28 - Propiedad "Set Object Theme" en configuración de Web Panel Designer Propiedad “Set MasterPage” WorkWithRulesLayouts: Afecta la generación de objetos Work With del patrón Entity Services. Ilustración 29 - Propiedad "Set Object Theme" en WorkWithRulesLayouts 21 Propiedad “Set MasterPage” EntityManagerRulesLayouts: Afecta la generación de objetos EntityManager del patrón Entity Services. Ilustración 30 - Propiedad "Set Object Theme" en EntityManagerRulesLayouts Propiedad “Set Object Theme” PromptLayout: Afecta la generación de objetos del patrón Prompt. Ilustración 31 - Propiedad "Set Object Theme" en PromptLayout 22 Mejoras de usabilidad en el desarrollo En la versión 8.0 de K2BTools se mejoró la interacción del desarrollador con los patrones para simplificar su uso y para hacer más sencillo el diagnóstico de errores comunes. Comandos Enable / Disable K2BTools Dynamic Pattern Application En KB’s grandes muchas veces es necesario desactivar la actualización dinámica de los patrones (incluyendo los patrones de K2BTools) para disminuir los tiempos del proceso de build. Es posible lograr esto usando las propiedades de la versión que se muestran a continuación: Ilustración 32 - Desactivación de actualización automática de patrones En la versión 8.0, decidimos incorporar funciones para simplificar el uso de estas propiedades. Usando estas funciones es posible habilitar/deshabilitar la aplicación automática de los patrones en el proceso de Build. Ilustración 33 - Opciones Enable/Disable K2BTools Usando esta funcionalidad el desarrollador GeneXus puede administrar la actualización automática de una forma más simple y eficaz. Comando “Force K2BTools Patterns Application” En algunos casos es necesario que todas las instancias de patterns sean aplicadas en el próximo build. Esto puede ocurrir, por ejemplo, cuando se modifica el objeto de settings de un Pattern, o algún objeto de Layout. Ilustración 34 - Comando "Force K2BTools Pattern Application" Usando este comando, se indica al motor de Patterns que todas las instancias deben ser aplicadas en el próximo build. De esta forma, cuando se ejecute el próximo build de la KB, todas las 23 modificaciones que se hayan hecho en las configuraciones de los patrones serán impactadas en los objetos generados. IMPORTANTE: Este comando es independiente a los mecanismos descriptos en la sección anterior. Por lo tanto, la aplicación forzosa de los patrones ocurrirá incluso cuando la actualización dinámica de los patrones esté desactivada. Mensajes de advertencia al detectar partes fuera del default Una de las fuentes de errores más comunes en el uso de Patterns es la desvinculación accidental del default para algunas partes de los objetos generados por el patrón. Cuando esto sucede, los cambios hechos en la instancia del patrón no se ven reflejados en los objetos generados. Para ayudar en el diagnóstico de esta situación, en la versión 8.0 se agregó la generación de mensajes de advertencia durante el proceso de aplicación del pattern. Ilustración 35 - Mensaje de advertencia para partes modificadas por el usuario Para solucionar este problema, es necesario abrir el objeto involucrado y ejecutar la acción “Apply Default (All Parts)” dentro del manú “Edit” de GeneXus. Ilustración 36 - Acción Apply Default Alternativamente, puede ingresarse a la parte que fue modificada y ejecutar la acción Apply Default (<Nombre_Parte>). Usando estas acciones, se vinculará nuevamente la/las partes modificadas a su default generado por el pattern. Mensajes de advertencia para ausencia de invocación a stack en Master Pages En el inicio de proyectos desarrollados con K2BTools al adaptar las interfaces generadas a lo requerido por el cliente es frecuente que se creen nuevas Master Pages para los objetos de la KB. Esto puede implicar un problema menor en casos donde la nueva Master Page no invoca directa o indirectamente al procedimiento “K2BStackManagement”. Este procedimiento es quien se encarga de mantener el stack de objetos llamados dentro de la KB, y es usado desde varios lugares. En particular, este stack es usado para retornar al objeto llamador al finalizar una acción dentro de una transacción. 24 Ilustración 37 - Warning ausencia de invocación a stack en Master Page Este problema es una fuente común de errores. Por esta razón se agregó un mensaje de advertencia cuando el pattern detecta que alguna de las Master Pages usadas en los objetos generados por el pattern no contiene en su árbol de llamadas al objeto “K2BStackManagement”. Opción para mantener regla Parm de la transacción dentro de un slot fixed A partir de esta versión, se incorpora una propiedad en el nodo “Transaction” dentro de las configuraciones del patrón K2BEntityServices, con nombre “Generate Fixed Slot For Parm”. Ilustración 38 - Propiedad "Generate Fixed Slot For Parm" Cuando el valor de esta propiedad es “True”, la regla Parm se generará dentro de un slot fixed en la transacción. Esto implica que la regla será actualizada por el pattern siempre que sea necesario. En particular, la Parm será modificada siempre que haya alguna modificación dentro de la PK de la transacción a la que pertenece la instancia del pattern. Ilustración 39 - Regla Parm en slot fixed El valor “False” provee la opción de mantener compatibilidad hacia atrás: La regla se generará en un slot no fixed, y por lo tanto podrá ser modificada por el usuario. 25 Ilustración 40 - Regla Parm en slot no fixed En caso de Activar la generación en slots fixed, en la próxima aplicación del pattern las reglas Parm serán colocadas dentro de un slot fixed y los cambios que se hubieran hecho dentro del Slot se perderán. En KB’s creadas con versiones anteriores de K2BTools, esta propiedad se mantendrá en “False” para facilitar el proceso de conversión. En caso de no tener reglas parms modificadas, se recomienda que el desarrollador cambie el valor de esta propiedad. Personalización de ubicación de parte Designer En esta versión se permite al desarrollador personalizar la posición donde se quiere mostrar la parte del Designer al abrir un Web Panel existente o crear uno nuevo. Para hacer esto, se incluyó en la configuración de Web Panel Designer una propiedad llamada “Form Designer Part Position”. Ilustración 41 - Propiedad "Form Designer Part Position" Los posibles valores para esta propiedad son: 1. First: Mantiene el comportamiento actual de Web Panel Desginer, la parte es la primera mostrada en el Web Panel (a la izquierda del Web Panel). 2. Last: La parte es la última mostrada en el Web Panel (a la izquierda del Web Panel). 3. First If Active: La parte es la primera mostrada en al abrir web panels con Web Panel Designer activado, y es la última mostrada en cualquier otro caso. Esta propiedad puede ser útil en escenarios de migración, donde la mayoría de los Web Panels todavía no usan la parte Designer. El cambio de esta propiedad no afecta los web panels que están abiertos. Es necesario cerrarlos y volverlos a abrir. 26 Otras mejoras Visualización de descripciones en reportes Excel y PDF En la versión 8.0, cuando la propiedad “Show enumerated domain description” en el nodo report está activada, se consideran (además de los casos contemplados en versiones anteriores), los siguientes casos: 1. Columnas de reportes Excel que están basadas en dominios o en atributos basados en dominios. 2. Filtros en reportes Excel con Control Info Dynamic Combo o Dynamic List Box. 3. Filtros en reportes PDF con Control Info Dynamic Combo Box y Dynamic List Box o basados en dominios enumerados. Selección de columnas en runtime para Exports En esta versión, se extiende la funcionalidad de selección de columnas en runtime. Ahora, las columnas que fueron seleccionadas por el usuario para ser visualizadas en el Work With son también las que se exportan en los reportes Excel. Deshabilitación global de Back to Work With En versiones anteriores de K2BTools, es posible deshabilitar la generación del enlace llamado “Back To Work With” usando la propiedad “Back To Work With” del nodo “Entity Manager” de una instancia del patrón Entity Services. Ilustración 42 - Propiedad "Back To Work With" en nodos "Entity Manager" Usando esta propiedad es posible deshabilitar la generación del enlace para esa instancia. En la versión 8.0, el valor default de esta propiedad pasa a tomarse de la configuración del patrón K2BEntityServices, en la propiedad “Enable Back To Work With Links” del nodo “Template”. Ilustración 43 - Propiedad "Enable Back To Work With" 27 El valor default para esta propiedad es “True”, de forma de mantener la compatibilidad con versiones anteriores. Al modificarse esta propiedad, se actualiza el valor default de las propiedades “Back To Work With” de los nodos “Entity Manager”. Esto implica que: 1. En instancias existentes, si la propiedad “Back To Work With” nunca fue modificada por el desarrollador (su valor no aparece resaltado en negrita), la propiedad pasará a tener el mismo valor que la propiedad “Enable Back To Work With Links”. 2. En instancias existentes, si la propiedad “Back To Work With” fue modificada intencionalmente por el desarrollador (su valor aparece resaltado en negrita), el valor de la propiedad no será modificado. 3. En nuevas instancias, se considerará siempre el valor seleccionado en la propiedad “Enable Back To Work With Links” salvo que el desarrollador indique explícitamente lo contrario. Posibilidad de agregar código en nodos Action Para aumentar la usabilidad de las acciones dentro de los patrones, se agregó en estos nodos la posibilidad de agregar código que será incorporado antes y después de la invocación al objeto especificado en la acción. El resultado de agregar una acción similar a la anterior es el siguiente: Notas: 1. Esta opción está disponible sólo para acciones fuera de la grilla (cuya propiedad “Layout” tiene valor diferente a “Ingrid”) y que tienen un gxobject asociado. 2. Este código será ejecutado siempre que se cumplan los chequeos de seguridad. 3. Esta funcionalidad convive con el mecanismo de adición de eventos ya existente en los patterns. Usuarios de versiones anteriores pueden mantener su solución actual, y migrar progresivamente según resulte conveniente. El orden con el que se genera el código para la acción es: a. Código “Begin Code” de nodo Event asociado a la acción (si existe) b. Código de inicio de seguridad. c. Código “Begin Code” de nodo Action 28 d. e. f. g. Invocación a objeto GeneXus definido en nodo action. Código “End Code” de nodo Action. Código de fin de seguridad.(ENDIF) Código “End Code” de nodo Event asociado a la acción (si existe) Propiedad para deshabilitar grids sortables Las grillas GeneXus tienen en su definición la propiedad “Sortable”. En versiones de K2BTools anteriores a la versión 8.0, las grillas eran generadas con la propiedad “Sortable” activada. Cuando una grilla tiene la propiedad “Sortable” activada, se permite al usuario ordenar los valores presentes en la grilla cliqueando el título de la columna por la que se quiere ordenar. Sin embargo, cuando se usa una grilla con paginado, es importante notar que el orden se realiza sobre los ítems que están visibles en la página mostrada en la grilla, no se recarga el contenido desde la base de datos. En algunos casos esto no es deseable, ya que frecuentemente los usuarios usaban la funcionalidad asumiendo que el orden se realizaba sobre todos los registros, con comportamientos inesperados. Ilustración 44 - Propiedad "Activate Sortable Property" en Web Panel Designer Por esta razón, a partir de la versión 8.0 de K2BTools es posible decidir en la configuración de Web Panel Designer y Patterns si las grillas deben ser creadas con la propiedad sortable o no. Estas propiedades son la propiedad “Activate Sortable Property” en la configuración de Web Panel Designer, y “Activate Sortable Grids” en la configuración general de los patrones K2BTools. Ilustración 45 - Propiedad "Activate Sortable Grids" Propiedad “Enable datepicker” en patterns A partir de la versión 8.0, las variables en pantalla incluyen la propiedad “Date Picker”. Esta propiedad está disponible sólo para variables de tipo Date o DateTime. Esta propiedad está disponible en: 29 1. Variables en filtros de objetos Work With, Sub Work With y Prompt. 2. Variables en secciones de atributos planos en objetos generados por Entity Services o Prompt. 3. Atributos en instancias de TrnForm. Ilustración 46 - Ejemplo de propiedad "Date Picker" Se generará el Datepicker correspondiente a la variable sólo si el valor de la propiedad es “True”. El valor default para esta propiedad se determina de la siguiente forma: 1. Si la transacción asociada a la instancia del patrón tiene la propiedad “Enable Datepicker” en “Yes” o “No”, entonces el valor default será “True” o “False” respectivamente. 2. En cualquier otro caso, el valor default será “True”. Por este motivo, en escenarios de migración sólo es necesario revisar los casos de transacciones donde la propiedad “Enable Datepicker” sea distinta a “Yes” o “No”. Propiedades Height y Width en Embedded Pages Ilustración 47 - Propiedades "Height" y "Width" en EmbeddedPages A partir de la versión 8.0, los nodos “Embedded Page” en instancias de Web Panel Designer incluyen las propiedades “Height” y “Width”. Usando estas propiedades es posible modificar las propiedades con el mismo nombre en el Embedded Page generado. Nuevas subrutinas de usuario para Add y Remove en Multiple Selections En la generación de nodos Multiple Selection se agregaron dos nuevas subrutinas de usuario, correspondientes a los eventos “Add” y “Remove” (cuando se agregan o se quitan elementos de la colección de elementos seleccionados). La invocación a estas nuevas subrutinas se hace como se muestra en la siguiente imagen (se ilustra el caso para “Add”). Es importante notar que la invocación se realiza luego de agregar el/los ítems a la colección de ítems seleccionados, por lo que es correcto asumir que la colección está actualizada al momento de implementar la subrutina de usuario correspondiente. 30 Ilustración 48 - Invocación a subrutina "U_AddMultipleSelection" Estas subrutinas pueden ser usadas en varios escenarios diferentes. Algunos posibles usos son: Persistencia del conjunto seleccionado a medida que se realizan los cambios. Actualización de una sección de resumen a medida que se ingresan los datos. Por ejemplo, actualizar un mensaje indicando la cantidad de ítems seleccionados). 31 Errores corregidos Patterns Visibilidad del botón de search: Se corrige problema que hacía que en determinados escenarios el botón de search no apareciera en pantalla aun cuando el desarrollador había indicado que aparezca. Esto sucedía tanto en el patrón K2BEntityServices como en el K2BPrompt. Error en inclusión de acciones en K2BTrnForm: No era posible agregar acciones como hijos del nodo FreeStyleGrid y TrnForm. Error en generación de procedimientos K2BListPrograms y K2BActivityList Muchas veces sucedía que estos procedimientos quedaban muy grandes y ocurría un error de compilación en el código generado. Se hicieron cambios para evitar que esto suceda. Uso de propiedad Required en TrnForm: Se soluciona el problema de que se tenía required en true en el trnform y luego se pasaba a false, no se borraba el slot required. Error en Load Grid State en Pattern Prompt: Si se tiene un prompt con algún filtro con savesate en false, el código generado por K2BTools era incorrecto, haciendo que no se salvara el estado de los filtros. Uso de mensajes correctos en filtros Combo Box En controles Dynamic Combo Box dentro de secciones de filtros, si el valor empty es aceptado, se estaba colocando el valor empty ítem text . En esta versión se pasa a colocar el GX_AllItems de GeneXus. Errores en reportes Excel En los reportes Excel para los atributos de tipo character se agrega trimend para evitar que se exporten espacios en blanco que vienen desde la base de datos. También se corrige la visualización correcta de los atributos time, donde cada vez que se mostraba uno de estos campos aparecía un -1 en lugar del texto correspondiente a la hora. Web Panel Designer Errores en grillas con Data Provider Se corrige el error que provocaba cuando se tiene una grilla con dataprovider y paginado, pero se coloca 0 al valor de la propiedad page el webpaneldesigner no definía la variable hasnextpage correspondiente a la grilla. Error en grillas con scroll Cuando se tenía una grilla con scroll, el designer no seteaba de forma correcta el height y el width. 32 Instalación Importante: Para hacer uso de esta versión deberá actualizar las licencias de K2BTools a la versión 8.0. Para versiones anteriores de K2BTools es posible utilizar la licencia de la versión 8.0. Pasos previos: 1. Si ya tenía la versión anterior de K2BTools recomendamos siempre respaldar las KBs utilizadas antes de pasar de versión (crear un XPZ o congelar la versión de la KB) Instalación: 1. Ejecutar el instalador de K2BTools 8.0 2. Seleccionar como ruta el directorio de instalación de GeneXus. 3. Actualizar licencias de K2BTools según lo indicado en el siguiente documento(http://www.k2btools.com/files/como-actualizar-las-licencias?es) 4. Abrir GeneXus. 5. Si crea una KB desde cero, ya está listo para usar la versión. 6. En caso de estar usando una versión anterior a. Si está en una versión anterior a la 7.1, adicionar a estos pasos los de la release notes 7.0. b. Seguir los pasos del Anexo I – Actualización de reportes Excel c. En caso de querer incorporar la funcionalidad de Universal Search seguir el Anexo II. Instalación en GeneXus Server Para instalar K2BTools en GeneXus Server ejecutar el instalador y seleccionar como ruta “<GeneXusServer>\VDir\BinGenexus”, donde <GeneXusServer> es la ruta donde fue instalado GeneXus Server. 33 Anexo I – Actualización de reportes Excel. Se realizaron modificaciones en la manera en que se utilizan los reportes Excel. Para esto se pasa a tomar en cuenta el valor de la propiedad Temp Media Directory para almacenar temporalmente estos archivos. Para que los reportes Excel se puedan visualizar el directorio deberá existir. Se recomienda por razones de seguridad setear un directorio que no esté dentro del servidor de aplicaciones. Anexo II – Incorporación del buscador universal. Si se está haciendo uso de la master page K2BWWMasterPageModern, ya se incorporará automáticamente la posibilidad de usar este buscador siempre y cuando se tenga dentro del patrón K2BEntityServices alguna transacción con la propiedad Searchable en true. En caso de no hacer uso de esta master page, se puede editar la master page utilizada y usar como header el K2BHeaderModernSearch. En caso de querer usar su propio header haga los siguientes cambios: Defina dos variables SearchCriteria y SearchCriteriaSession basados en el tipo de datos K2BSearchCriteria. Copie en el webform desde el HeaderK2BModernSearch la sección de control name SearchContainer. Incorpore en su webpanel en los eventos el código de K2BModernSearch que se encuentra en: o Evento Refresh o Evento &SearchCriteria.IsValid o Event ‘DoSearch’ 34