Entradas

Mostrando las entradas de 2019

GetLocation() y sus errores en producción.

Imagen
En GeneXus para hacer paramétrico el consumo de servicios web SOAP, se necesita usar la funcion GetLocation()  . Por ejemplo: &Location = GetLocation('LocationName') El 'LocationName', es un string que depende de: * Nombre de objeto External Object SOAP * Modulos en los cuales esta el external object. Por ejemplo, si tengo el external object &Calc basado en el EO  &Calculator y está en el modulo CALCULADORA, que a su vez esta en el modulo FUNCIONES, el nombre será FUNCIONES_CALCULADORA_Calculator Entonces en mi codigo voy a tener: &Location = GetLocation('FUNCIONES_CALCULADORA_Calculator') &Location.Host=DevuelveHost() ... &Resultado=&Calc.Add(10,20) Que problema tiene este código? El problema es que dicho código es demasiado frágil ante cambios de la KB. Si cambio el nombre del external object, o si cambio la modularizacion (nombre de modulo, muevo un modulo, etc) la función devuelve un &Location vacio

Proyectos de innovación de 2019 de Concepto.

Imagen
En CONCEPTO, el año 2019 fue un buen año para la innovación. Estamos trabajando en varios proyectos novedosos y que van a permitir mejorar la productividad de nuestros clientes. Algunos de los proyectos que realizamos: Incorporación de Blockchain en intercambio con Aduanas del Mercosur (Operador Económico Autorizado) Pilotos de Inteligencia Artificial (Redes Neuronales, procesamiento de lenguaje natural, clasificación de descripciones comerciales, geolocalización de compras por internet) Primeros Pasos en BOTs (tenemos un prototipo funcionando con Whatsapp y GeneXus) Migración a la ultima versión de GeneXus 16 de varias bases de conocimiento. Automatización de Build y Deploy con Jenkins. División de una KB grande en tres KB más modulares, con deploy independiente y automatizado. Proyecto de Business Intelligence con Pentaho Utilización de .NET Core en proyecto piloto Incorporación de modelo de datos de la OMA (Organización Mundial de Aduanas) en algunos mensajes del sistema

Receta: Como limpiar una KB GeneXus

Imagen
Ingredientes KB GeneXus madura (de mas de 2 años) GeneXus (Evo3 o Superior, si es 16, mucho mejor) KBDoctor ( http://marketplace.genexus.com/product.aspx?kbdoctor,en ) LSIExtensions ( http://marketplace.genexus.com/product.aspx?lsiextensiones,en ) VariableCleaner ( https://marketplace.genexus.com/product.aspx?variablescleanerbydvelop,en ) KBTools ( https://marketplace.genexus.com/product.aspx?kbtools,en ) Build all exitoso (sin errores) Preparación 1 - Crear un punto de retorno seguro.  Las tareas de limpieza pueden borrar mas cosas de las deseadas, por lo que es importante crear siempre un punto seguro de retorno, por si algo sale mal.  Lo recomendable es hacer un Export de toda la KB y sus propiedades con GeneXus.  Ademas del export, es bueno hacer un Versión congelada y ponerle el nombre "Antes de la limpieza".  View / Versions / (botón derecho) Freeze  2 - Revisar la KB y Comprimir la KB.  Salir de GeneXus y desde la linea de comandos, usar la

Estado de automatización del proceso de desarrollo con Genexus (II)

Imagen
En el artículo anterior   comentaba mi evaluación del estado de automatización de las diferentes etapas del desarrollo GeneXus. Un colega me preguntaba que se podía automatizar en la etapa de programación, donde lo que hay que hacer es "solo escribir código", lo cual es "poco automatizable".  Mi sensación que es un etapa donde hay muchísimo para automatizar, sobre todo en el refactoring de código.  Seria bueno, contar en forma nativa con las siguientes tareas automatizadas:  renombrar una variable y que la renombre en todo el código agregar un parametro a un objeto y agregarlo a las invocaciones a dicho objeto en el resto de la KB.  sacar un parámetro a un objeto y sacarlo de todas las llamadas.  cambiar todas las llamadas de forma call(objeto, parametrosIN, parametroOUT)  por    ParametroOUT=Objeto(parametrosIN) ordenar los eventos / subrutinas por su orden "natural" cuando escribo     objeto( que de la opción de copi

Estado de automatización del proceso de desarrollo con Genexus.

Imagen
En mi rol de dueño de una empresa de software, uno de los temas que me preocupa, es poder hacer proyectos grandes en forma competitiva. Es común tener que competir con empresas de otros países (que usan otras metodologías y herramientas) y debemos ser capaces de hacer un software mejor (o tan bueno como el de ellos) con menos recursos. Una de las formas que tenemos de ser mas competitivos, es automatizar lo automatizable de todo el proceso de desarrollo. Los proyectos grandes que realizamos los hacemos con Genexus, y eso me lleva cada tanto, evaluar que tan bien o mal estamos en determinadas etapas y tareas del proceso de desarrollo.  Las etapas y tareas pueden tener diferentes nombres y diferentes contenidos en diferentes empresas o metodologías, pero de cualquier forma, a mi me resulta útil ver el estado actual, su evolución en el tiempo y en que conviene focalizarse para tener mayores ganancias.  Veo la importancia de dicha tareas (varia un poco de proyecto en proyect