Entradas

Mostrando las entradas de 2020

Funcionalidades de GeneXus que vale la pena conocer: Properties Data Type

Imagen
  El   Properties   Data Type ( https://wiki.genexus.com/ commwiki/servlet/wiki?31606, Properties %20Data%20Type ) es un tipo de datos que permite manejar en memoria un conjunto de valores de clave y valor.  Tiene los métodos, Set, Clear, Get, Remove, ToJson, FromJson y Count.  Para recorrerlos todos, se puede hacer for & property  in &myProperties        msg(& property .Key)        msg(& property .Value)  endfor Es muy util en varios escenarios, por lo que conviene conocerlo.  Puede servir para hacer acumulados en memoria para guardar los filtros seleccionados por el usuario y muchos mas.  Algunos ejemplos de uso, se puede ver en: https://wiki.genexus.com/commwiki/servlet/wiki?37750,Consuming+JSON+with+GeneXus+Properties+Data+Type

Funcionalidades de GeneXus que vale la pena conocer: DATE Constants.

Imagen
Algunas veces en el código tenemos que poner una fecha como constante. Una alternativa a esta función, es usar el formato #yyyy-mm-dd# , como constante. Por ejemplo:   &InitialDate =# 2007 - 01 - 01 # &DateTime = #2020-01-01 10:00:00# Esta funcionalidad está desde hace varias versiones, pero por algún motivo, no se usa demasiado. He visto que usan ymdtod(2020,01,01) que para mi queda bastante mas confuso. Más información en el siguiente link: Date Constants

Caracteristicas de GeneXus que vale la pena conocer: GXServer Quality Assistant

 En GeneXus 17 Upgrade 2, se va a agregar una funcionalidad que permite mejorar la calidad de nuestro código: GXServer Quality Assistant.  Al momento de subir el código se analiza el mismo y a través de avanzados algoritmos de inteligencia artificial nos da un diagnóstico de la calidad del código que intentamos subir.  Algunos de los mensajes que pude probar: GQA001 - In that state, don't even think about uploading that object. GQA002 - Don't update that object. The code of the same can be improved.  GQA003 - The object you are uploading will have errors in the next 5 days.  GQA004 - We recommend that you monitor it intensively.  GQA005 -  Not much effort was put into programming this object. It is recommended that you put the batteries  GQA006 -  Do you think that with this object you are going to solve a problem? I do not think so.  GQA007 - Your contribution has not been the best, you can and should try harder.  GQA008 -  The quality of the object is worthy of praise  GQA009

Características de GeneXus que vale la pena conocer: Dynamic Transaction (UNION)

Imagen
Problema: Tengo una tabla de Operaciones, que tienen movimientos que son generados por otras operaciones, como pueden ser DUA, Líneas de Duas, Conocimientos, Lineas y se pone como Referencia en la tabla de operaciones.  Como hacer un "integridad referencial" desde una tabla a varias tablas?.  En la tabla de Operaciones, voy a tener unos atributos, LuciaRefTpo y LuciaRefID, que tiene el tipo y el identificado de la referencia.  Esto se puede crear como un  Dynamic   Transaction , que es una transaccion que se le y se hace el Data Provider asociada a la transacción.  Los atributos con que armo la referencia son los campos claves de las demas tablas.  Va a generar una vista en la base de datos, que hace la UNION de la concatenacion de la tablas.  Luego, puede usarse como una tabla normal, con integridad referencial que chequea contra todas las tablas, haciendo que no se puedan grabar Operaciones, que no tengan una referencia valida.  Y también se puede usar como lectura:  for ea

Caracteristicas de GeneXus que vale la pena conocer: Progressive Web Application (PWA)

Imagen
Con GeneXus se pueden hacer aplicaciones web progresivas o PWA. Son una buena opción para desarrollar aplicaciones WEB que se comporten como nativas. Son Responsive, permiten ser usadas aun sin conexión y acceden a varios de los periféricos de las computadoras o celulares.  Hay un buen video que explica que es una  PWA  y otro de como hacerlas con GeneXus.  Tambien hay informacion en el wiki de GeneXus https://wiki.genexus.com/commwiki/servlet/wiki?42601,How%20to%20create%20a%20PWA%20using%20GeneXus https://wiki.genexus.com/commwiki/servlet/wiki?42600,Toc%3AProgressive+Web+Applications+in+GeneXus

Características de Genexus que vale la pena conocer: DataSelectors con USING o IN

Imagen
Los   Data Selectors   con objetos GeneXus que permiten almacenar condiciones (WHERE) y formas de ordenar (ORDER BY) de forma que puedan ser reutilizados en varios objetos.  Tienen varias ventajas:  * El código queda mas fácil de leer y se escribe menos * Encapsulan conceptos, como podría ser DOCUMENTO_ACTIVO (que tuviera un ESTADO <> 'ANU') y podria usarse en todos los lugares donde solo se necesitan los DOCUMENTOS no anulados.  * Centralizan el código, por ejemplo, si se necesita cambiar el concepto de DOCUMENTO_ACTIVO, se cambia solo el data selector y todos los objetos que lo usan, van a ver reflejado el cambio en las condiciones.  Una opción poco conocida de los data selector es que permiten usarse con USING (con lo cual agregan sus condiciones lo que se tenga el for each) o con IN , con el cual se hace una subconsulta para resolver la consulta.  Por ejemplo, si tengo la tabla  Empresa *EmpresaID EmpresaActiva Defino un Data Selector EmpresasActivas con la condición

Características de GeneXus que vale la pena conocer: LocalDB

Imagen
En GeneXus 17 Upgrade 1 , una característica interesante para aquellos desarrolladores que trabajan con muchas bases de conocimiento en su maquina, es que pueden usar LocalDB.  LocalDB es una funcionalidad de SQL Server Express, que esta orientada a desarrolladores.  Que ventaja tiene esto?  Con GeneXus usando LocalDB, la base de datos va ser conectada cuando se abra la base de conocimientos GeneXus y desconectada (detach) luego que la base de conocimiento sea cerrada. Esto hace que el archivo de base de datos no va a estar bloqueado cada en forma permanente y esto va a hacer mucho mas fácil el borrado, movido o clonado de las KB y todo los directorios que usan.  Para quienes usen LocalDB, va a ser mucho mas fácil hacer utilitarios para el manejo de KB.  Además, se puede liberar memoria en las maquinas de desarrollo que hoy es utilizada por SQL Server en mantener las bases de datos conectadas. 

Características Genexus que vale la pena conocer: Custom Builds

Imagen
 Es una forma de hacer comandos dentro de GeneXus que pueda saltarse algunos pasos para hacer más rapido algunos procesos de desarrollo.  Sirve para automatizar algunas tareas repetitivas.  Por ejemplo, puedo hacer un  Custom   Build  para generar todos los SDT (si estoy en .NET).  Puedo usarlo para seleccionar todos los objetos que se contiene 'Cliente' en sus objetos y sólo se generan los SDT cuando ejecute el  Custom   Build .  Para crear y editarlo se hace Tools / Options /  Custom   Builds y si se puede elgir el Scope ( build  all, Rebuild All, Run with this only, etc) y se pueden habilitar varios pasos ( haciendo click en los tres puntitos ...) Aparecen en el menu contextual que se aparece con el boton derecho sobre el objeto:  Más información en:  https://wiki.genexus.com/ commwiki/servlet/wiki?43849, Options+-+ Custom + Build    Esto hay que hacerlo en cada instalación de GeneXus. 

Características GeneXus que conviene conocer: Create Selected Object

Imagen
  Si en el editor de texto, estoy en un objeto que NO EXISTE AUN, puedo crearlo facilmente, haciendo CLICK con el boton derecho del mouse y seleccionando Create Selected Object.  Esto me va a presentar un dialogo para elegir el tipo de objeto y donde lo quiero poner.  Va a tomar los parametros que tiene el codigo (con sus tipos de datos) y va a definir dicho objeto.  En el ejemplo:  Tenia en el codigo  &ExisteRecId = ExistRecID(CpRecId).  Va a crear un procedure, en el módulo PROYECTO, con la rule parm(in:&CpRecId              //Igual que CpRecId           out: &ExisteRecId );  //Boolean Es algo que esta bueno cuando estamos haciendo refactoring o simplificación de objetos.  Luego, hay que programar el codigo del objeto creado. 

Funcionalidades de GeneXus que vale la pena conocer - Exportar módulo cómo binario

Imagen
Cuando se tienen aplicaciones GeneXus complejas, es natural que se hagan varias KB para dividir el problema, y hacer mas fácil el mantenimiento de las mismas.  En GeneXus 15 (y mejoro en la 16) se agrego la funcionalidad de poder exponer un modulo como binario, de tal forma de poder pasar un modulo a otra KB de forma mas fácil que hasta ahora.  Suponiendo que tenemos una KB que expone objetos públicos procedures y business component. Se puede elegir un módulo, y empaquetarlo como binario. Se genera un archivo de extension OPC. Esto va a ser visto como un modulo y se verán solo los objetos públicos y sus parámetros, pero no los fuentes.  Estos modulos no necesitan ser especificadas, por lo que se hacer mucho mas rapido el build de una KB que use ese tipo de modulos.  Es una forma mas radical de dividir una KB en modulos, donde algunos de los modulos se tienen solo en binario y se desarrollan en otra KB.  Las KB quedan mas chicas y permiten acelerar el desarrollo y el build de aplicacion

Caracteristicas GeneXus que conviene conocer: Log de aplicaciones

Imagen
 Las aplicaciones GeneXus, usan  Log4Net , que es un biblioteca para el grabado y manejo de logs.  Los programas GeneXus se ocupan de grabar log clasificando si es un error, warning, fatal, debug, info y log4net se encarga de grabarlo en los lugares que corresponda y filtrarlos en forma jerárquica.  Tiene el concepto de jerarquía entre los mensajes 0. Off The OFF Level has the highest possible rank and is intended to turn off logging. This is the default value. 1. Fatal The FATAL level designates very severe error events that will presumably lead the application to abort. 2. Error The ERROR level designates error events that might still allow the application to continue running. 3. Warn The WARN level designates potentially harmful situations. 4. Info The INFO level designates informational messages that highlight the progress of the application at coarse-grained level. 5. Debug The DEBUG Level designates fine-grained informational events that are most useful to debug an application. 6

Funcionalidades GeneXus que vale la pena conocer - Exportar solo la estructura de transacciones

Imagen
Muchas veces es conveniente poder exportar una transacción, llevando solo la estructura de la misma (solo los atributos y su definición) Es lo que permite definir las tablas y formulas. Esto es posible desde el Upgrade 7 de GeneXus 16 con eligiendo la siguiente opción En que casos puede servir esto? En una KB aplicado un Pattern y quiero llevarla a otra KB que usa otro pattern de transacciones diferente.  Quiero compartir una tabla entre 2 KB y no necesito llevar reglas, forms, variables, etc. Tengo una transaccion compleja y quiero hacer otra mas sencilla que solo permita el ingreso de un conjunto reducido de campos.  Para la creacion de DataView o Business Component. Para compartir la estructura de tablas entre 2 KB haciendo un script que exporte y que importe solo las estructuras.  Tengo una conjunto de transacciones complejas y quiero cambiarlas pero sin cambiar la estructura de las tablas que utilizan. Una opcion es crear transacciones paralelas que tengan solo la estructura y que

Genexus 17 Beta - Dialogo NO SMOOTH deprecated..

Imagen
 Hice una prueba de convertir una KB de GX16 que tiene la propiedad Web Service Experience = "Previous Version Compatible" Cada vez que lo abro la KB sale el mensaje: ========== Build With This Only started ========== warning: The 'Web User Experience' property is configured to be 'PreviousVersionsCompatible'.  This execution mode is deprecated and in a future version its support will be removed.  The application should be converted to 'Smooth'. (Learn more) Que significa esto? Hay que empezar a hacer que todos los desarrollos nuevos sean con Smooth y es bueno que se hagan planes de migración de las KB existentes a esa forma de navegación en los objetos WEB. Las aplicacion con Smooth, tienen mejor performance, intercambian menos datos entre el cliente y el servidor y los usuarios tienen una experiencia de usuario mejorada.  Las mayor diferencia es que los eventos se disparan sobre todo en la actualizacion de web component, o en los botones (POST).  Con

Funcionalidades de GeneXus que conviene conocer: ChangeSet

Imagen
 Problema: Tengo un conjunto de objetos que modifique pero por algun motivo (el cambio no esta terminado, no se puede subir al server aun, la funcionalidad no puede entrar en produccion, tengo que trabajar en 2 solicitudes en paralelo, etc) no los puedo subir al server por unos dias.  ¿Como puedo hacer para que no se mezclen los cambios que ya tengo realizados, con otros con los que tambien tengo que cambiar?.  Solucion:  Se pueden usar  ChangeSet   https://wiki. genexus.com/commwiki/servlet/ wiki?31775, ChangeSets +in+ GeneXus+Server Esto es un grupo de objetos modificados, que se pueden agrupar antes de subir al server.  Y los objetos quedan agrupados En el ejemplo de arriba, tengo un objeto File que tiene un archivo de control de la propiedad CommitOnExit y otro conjunto de objetos, modificados porque mejoré la modularización del modulo WorkFlow. Claramente son dos cosas que no tienen ninguna relación y no quiero que se vayan en un mismo commit.  Por eso, cree 2  Change  Sets y agru

Funcionalidades de GeneXus que conviene conocer: ConfigurationManager external object

El external object  ConfigurationManager , viene nativo en el modulo GeneXus.  Que se puede hacer con esto? Es para poder recuperar un valor de una propiedad del  client.cfg,  web.config o CloudServices.config Por ejemplo, si queremos ver que formato de fecha se esa utilizando en el web.config, desde un programa, podemos hacer: if  ConfigurationManager .HasValue( "DateFormat")      Msg( ConfigurationManager . GetValue("DateFormat"),status) endif y la salida va a ser DMY pues en el web.config tengo la entrada     <add key="DateFormat" value="DMY" /> Mas informacion en el link  https://wiki.genexus.com/ commwiki/servlet/wiki?40085, ConfigurationManager +external+ object Los métodos tienen un segundo parámetro opcional, que permite leer de un archivo de configuración especifico, por si queremos crearnos nuestro propio archivo de configuración.  Es muy util para hacer objetos que dependan de características de los archivos de configuración.  Us

Funcionalidades de GeneXus que conviene conocer: Deployment Unit

Imagen
En GeneXus 16, se pueden definir objetos de tipo Deployment Units. Es una forma de definir un conjunto de objetos que van a ser empaquetados y luego instalados juntos. Por ejemplo, en una KB por un lado se instalan todos los Webforms y por otro todos los servicios y procesos batch, pues van en otro servidor o en otro directorio. En cada Deployment Unit se agregan todos los objetos main que quiero distribuir juntos, por ejemplo, si pongo servicios y proceso batch que quiero distribuir podria poner.   Tiene una lista de los procesos batch que quiero enviar a un directorio.  Se listan sólo los main y GeneXus calcula todo los objetos referenciados por esto y lleva todo lo necesario para que ejecute en forma correcta. .  Como se usan? Después se hace Build / Deploy Application y se elige que Deployment Unit se quiere desplegar y se genera un zip con todo lo necesario para instalar, con los archivos de configuración, con clave de encriptación,etc.  Para mi opinion, seria mucho mas claro que

Funcionalidades de GeneXus que conviene conocer: Exception_Handler

Imagen
Este es el primer post de un ciclo de algunas funcionalidades que han aparecido en las últimas versiones de GeneXus que por diversos motivos no están siendo muy usadas o no son muy conocidas.  Exception_Handler  es una regla que se introdujo en GeneXus 16 Upgrade 7, que permite capturar excepciones no controladas en nuestro código GeneXus.  ¿En que casos se puede usar? Cuando tengo codigo que puede tener una excepcion y necesito que el programa registre esa excepcion en el algun log/trace o quiero mandar una alerta o un mail que el programa canceló.  Ejemplo:  Tengo un procedure que hace para el ejemplo, una division entre 0.  El procedure que lo llama, tiene la regla:  y el codigo y el log de salida de la ejecución es: "D:\KBs\GX16\LUCIABPM\CSharpModel\web\bin\aejemplo_exception_handler.exe" Antes de Division entre 0 Type: System.DivideByZeroException Details: Attempted to divide by zero. Stack: at System.Decimal.FCallDivide(Decimal& d1, Decimal& d2) at

Usar GeneXus 17 para detectar errores

 Trabajo con una KB que esta en GeneXus 16 y no esta planificada su migración hasta 2022.  De cualquier forma, ayer se liberó GeneXus 17 y tiene varias ventajas y algunas se pueden aprovechar aunque no se haga una migración . Un error que es dificil de detectar en versiones anteriores de GeneXus es cuando un parametro de entrada en un objeto es modificado. En GeneXus 17 se agregaron las siguientes validaciones spc0022 Input parameter %1 cannot be assigned.   When trying to assign a variable/attribute defined as IN in the Parm() rule. . spc0233 Parameter %1 (%2 %3) submitting ''%4'' will not be assigned.   This warning message indicates that a certain output (or input/output) parameter will not be assigned when submitting an object. In other words, if you call an object  using the Submit method and you define in the Parm rule of the submitted object  an output parameter, it will not be assigned. . Queria corregir estos errores en GX16, por lo que hice una copia de

Desarrollo monolítico e instalación distribuida (o despliegue distribuido)

Imagen
 Desde hace varios años, se discute en nuestra industria, sobre que forma de desarrollar, instalar, usar y controlar nuestras aplicaciones es la mas adecuada. Hace años casi la unica forma de hacer aplicaciones era de una forma monolíticas, que se desarrollaban y se instalaban todas en una misma máquina. Este esquema es el que nos ha permitido hacer cosas muy interesantes y poderosas.  Aplicaciones Monolíticas Las aplicaciones monolíticas, tienen varias ventajas y varias desventajas, como todo en esta vida.  Por un lado, son las mas fáciles de programar, pues todo ocurre en una misma base de datos, las transacciones terminan bien, o si termina mal, se deshace todo. La consistencia de los datos esta casi garantizada si programamos con algún cuidado.  La instalación de una aplicación monolítica, es fácil, pues todo se instala en una misma maquina y generalmente se sustituye toda la aplicación. Cuando se va a hacer una instalación, se busca alguna ventana donde se prevea poca actividad de

Mi lista de deseos para GeneXus 17

Imagen
UPDATE: Agregue algunos pedidos que hicieron algunos compañeros del foro de Betatesting.  Esta es mi lista de deseos para GeneXus 17. La mayoría de las cosas no son nuevas y serian integrarlas o documentarlas para dejarlas mas usables.   GeneXus Setup Instalar GX desde un script.  Tener un instalador de GeneXus que se pueda ejecutar desde línea de comandos y poder instalar en diferentes directorios.  Instalar GX sin borrar la version anterior.  Dar la opción en el instalador de no borrar la version anterior de Genexus.  Poder instalar User Control / Extensiones / Patterns / Módulos a través de script y línea de comandos.  Esto facilita la instalación de equipos nuevos, para capacitación, instalación en la nube, etc.  Si se pudiera actualizar la version de los UC / Extensiones y Módulos que tengo instalados a través de script, también estaría muy bueno. GeneXus - Seguridad Sin permisos de administrador.  Poder ejecutar GeneXus sin permisos de administración del equipo.  GeneXus - Funcio