jueves, 22 de febrero de 2007

GeneXus Extensions: Realizar una acción al eliminar un objeto

Está disponible para bajar del sitio de Available extensions (en el wiki de GeneXus), una extensión de nombre RemoveFilesOnDelete, que permite eliminar todos los archivos asociados a un determinado objeto de la KB, en el momento en que este se borra.

Pero, ¿cómo saber cuando un objeto se borra? Voy a explicar como desarrollar esta extensión.

Lo primero que debemos hacer es crear un nuevo proyecto de Visual Studio de tipo GeneXus Package (para que aparezca en la lista hay que tener instalado el SDK). Cuando se selecciona esta opción, se muestra un wizard, en el cual debemos desmarcar la opción para crear un nuevo tipo de objeto, que no es lo que queremos hacer en esta oportunidad.

Una vez creado el proyecto, tenemos un archivo de nombew Package.cs, que tiene la implementación básica. En ese archivo, dentro del método Initialize, debemos agregar la siguiente línea

EventsService.Events.Participate(this);

Lo que hace esto es suscribir al objeto Package (mediante la referencia "this") para que sea notificado cuando se produce algún evento. Es necesario incluir el namespace Artech.Architecture.Common.Events mediante la directiva using para poder utilizar la clase EventsService.

Ahora lo que debemos hacer es programar la lógica par capturar específicamente el evento que nos interesa, en este caso, va a ser AfterDeleteKBObject. Esto lo hacemos también en la clase Package, creando un método como sigue:

[EventSubscription(ArchitectureEvents.AfterDeleteKBObject)]
public void OnAfterDeleteKBObject(object sender, KBObjectEventArgs args)
{
}

La clase EventSubscriptionAttribute se encuentra dentro del namespace Microsoft.Practices.CompositeUI.EventBroker, por lo que también debemos agregarlo.

Dentro de este método, es donde debemos programar la acción que querramos realizar cuando se borra un objeto. La información del objeto borrado se encuentra en la variable args.

Este ejemplo sirve también para suscribirse a otra clase de eventos, ya que en la clase ArchitectureEvents tenemos eventos que se disparan luego de abrir o cerrar una KB, luego de un copy model, antes de después de guardar o borrar un objeto, etc.

Blogged with Flock

4 comentarios:

  1. Hola. Soy nueva en esto del genexus y te agradecería que me pongas en contacto con un tutorial que me permita aprender desde lo más básico, desde cero. De antemano te agradezco.
    mailto:mjormy_1@yahoo.es

    ResponderEliminar
  2. Hola Marcos. Buscando informacion de las extensiones de Genexus acabo de encontrar esta publicacion, que aproposito, muy buen aporte. Sabras como crear extensiones para las nuevas versiones de Genexus que existen hoy? (Evo2, Evo3, etc). Te agradezco de antemano.

    ResponderEliminar
  3. José, la verdad es que hace mucho que no hago extensiones para GeneXus... Creo que la forma de hacerlas para las nuevas versiones es igual que para GeneXus X. Existe el SDK de GeneXus que puedes descargar desde el Download Center y ahí deberías tener todo lo que necesitas. También hay un foro de "extensions" donde seguramente te puedan ayudar, o si tienes una pregunta espcífica puedes preguntar en Stack Overflow.

    ResponderEliminar
  4. Gracias por responder Marcos. Buscare en el foro que me sugieres a ver que encuentro. Excelente dia.

    ResponderEliminar