Está en la página 1de 7

Events Framework (Como Disminuir el Impacto de las Personalizaciones)

Una de las grandes desventajas de los procesos de Customizacin de los aplicativos PEOPLESOFT es que se modifica el cdigo estndar que viene con la aplicacin, lo cual deriva en un aumento considerable de la complejidad de los procesos de actualizacin del aplicativo, llegando hasta al punto de que las empresas optan por eliminarlos de su estrategia debido al costo que estos implicaran. Otra desventaja es que en algunos casos la modificacin del cdigo estndar entregado por Oracle en dentro de sus aplicativos PEOPLESOFT lleva a la perdida de la garanta. Una vez en la que estuve involucrado en un proceso de implantacin de Oracle eBusiness, me enter de la existencia de algunas herramientas que hacen el proceso de customizacin de las aplicaciones de Oracle e-Business totalmente independiente del estndar, a continuacin las enuncio (No se desesperen despus de algunos renglones ms entraremos en materia con PEOPLESOFT):

Oracle Alert: Esta utilidad permite crear acciones a partir eventos que se ejecuten contra la base de datos (Actualizaciones, inserts, deletes etc). En qu se diferencia esto de crear un trigger en la base de datos? En que Oracle cancela la garanta de sus productos cuando uno utiliza triggers en la base de datos. Adicionalmente toda la administracin y el desarrollo de estos comportamientos se puede realizar directamente a travs del aplicativo (Resulta que para esta caracterstica PEOPLESOFT tiene su par). Flexfields: Est caracterstica permite a e-Business personalizar sus objetos del negocio sin la necesidad de modificar el estndar, por ejemplo si quieres agregar un nuevo campo a un proveedor, es solo configurar un flexfield y listo, no tienes que hacer ningn desarrollo (Lo ms cercano que he encontrado en people es la pgina de personalizacin del componente de informacin de proveedores). Personalizaciones: Cada Form de Oracle Ebusiness tiene una opcin de personalizacin, esta opcin permite modificar la interaccin entre el usuario y el aplicativo, agregando mensajes, clculo de campos, errores, etc. (Nada parecido he visto en peoplesoft) Luego de ver y utilizar estas herramientas busque dentro de PEOPLESOFT algunos equivalentes y encontr un Equivalente al Oracle Alert y es el Events and Notifications Framework. En esta entrada a nosotros nos atae la parte de Events. Segn el peoplebook Events es una caracterstica que permite definir, implementar y ejecutar lgica del negocio para eventos del negocio (un Evento del Negocio es por ejemplo la creacin de un comprobante).

Para que nos puede servir a nosotros est utilidad (No desesperen, ms adelante les mostrare un ejemplo de la utilizacin): Podemos independizar el cdigo que nosotros creamos del cdigo estndar que viene con PEOPLESOFT. Algunas ventajas de este proceso seran: o Esto disminuir el esfuerzo de los futuros upgrades. o Volver nuestro cdigo transportable: cada vez que he hecho una customizacin en los proyectos la he perdido debido a lo difcil que se hace mudarla a las nuevas implementaciones debido a que incluye modificaciones a objetos estndar, y estos cambian de versin a versin etc. Con el Events Framework el cdigo se encuentra en Applications Packages independientes que se pueden mover sin necesidad de transportar objetos estndar

Mltiples comportamientos para un mismo evento del negocio:

o Podemos crear diferentes cdigos o diferentes versiones del mismo cdigo que se ejecuta para cada evento del negocio: por ejemplo creamos un cdigo que al crear un cliente enve una notificacin al administrador de clientes de la empresa; adems otro cdigo que llame a un servicio web para crear el cliente en otro repositorio o Podemos administrar que cdigos queremos que se ejecuten dependiendo de las necesidades de cada cliente: resulta que nuestro primer cliente desea que se llame el servicio web y que enve la notificacin, el segundo cliente solo quiere llamar al servicio web y el tercer cliente quiere el comportamiento estndar, solo con activar o desactivar el cdigo se pueden obtener estos 3 comportamientos.

El Events Framework permite monitorear y mantener detalladamente los eventos generados. o Se puede dejar un rastro de la ejecucin de cada evento con informacin de su ejecucin. o Si un evento falla se puede reiniciar sin afectar el proceso estndar, por ejemplo si el llamado al web service que se hace al crear un cliente falla porque el servidor destino no estaba disponible en el momento, podemos relanzar el evento desde el monitor cuando el servidor est disponible. Bueno ahora si manos a la obra, vamos a realizar un ejemplo de cmo generar, ejecutar, administrar y monitorear un Evento dentro de nuestro aplicativo PEOPLESOFT. El evento que vamos a manipular va a ser la creacin de un nuevo cliente dentro de PEOPLESOFT. Al momento de la creacin de un cliente vamos a simular la creacin del mismo cliente en 2 aplicativos externos a PEOPLESOFT. Esto podramos hacerlo llamando 2 servicios web, uno para cada aplicativo que necesitemos, pero en este caso, con el fin de no salirnos del tema y de simplificar nuestro ejemplo lo aremos insertando la informacin del cliente en un registro para

cada

uno

de

los

supuestos

aplicativos.

El Primer paso es crear el evento que vamos a manipular en nuestro ejemplo: para eso vamos a Inicio Componentes de Empresa Eventos y Notificaciones Entorno de Eventos Registro de Eventos y aadimos un valor (Por Ejemplo NUEVO_CLIENTE). Evento NUEVO_CLIENTE Descr Creacin de Clientes Descripcin Se dispara al momento de crear un nuevo cliente en el aplicativo. Conexin Activada Verdadero (Esto activa el log de los eventos)

El segundo paso es crear los Gestores (El cdigo que queremos que se ejecute al momento de crear un cliente). Un gestor es un Aplication Class, el cual se puede encontrar dentro de cualquier application package, pero debe incluirse dentro de un Subpackage llamado Handlers. A continuacin podemos ver un ejemplo de cmo debe quedar la estructura:

Cada application Class que vayamos a usar como gestor de nuestro evento debe tener un un mtodo llamado ProcessEvent que recibir como parmetro un objeto de tipo EOEN_EVENT_MANAGER:Base:baseEvent. Nuestra Application Class debe quedar de la siguiente forma:
import EOEN_EVENT_MANAGER:Base:baseEvent; import EOEN_EVENT_MANAGER:Base:Types:ExceptionType; class GestorEvent1 /** Dummy Constructor. */ method GestorEvent1(); /** Process Event. */ method ProcessEvent(&inEvent As EOEN_EVENT_MANAGER:Base:baseEvent); private method Trace(&inHeader As string, &inDetail As string); instance EOEN_EVENT_MANAGER:Base:baseEvent &myEvent; end-class; method GestorEvent1 end-method; method ProcessEvent /+ &inEvent as EOEN_EVENT_MANAGER:Base:baseEvent +/ Local Record &recContext, &recAplicacion1; /* the following lines are required only if you want to pass detail information about Errors, Warnings or other messages back to the Event Framework */

Local EOEN_EVENT_MANAGER:Base:Types:ExceptionType EOEN_EVENT_MANAGER:Base:Types:ExceptionType(); &myEvent = &inEvent; If Not &inEvent.HasContextRecord Then &myExceptionType.MESSAGE_SET_NBR = 18137; &myExceptionType.MESSAGE_NBR = 6509; &myExceptionType.MSG_SEVERITY = "E"; &myExceptionType.MESSAGE_TEXT = MsgGetText(18137, &inEvent.EventNode); &myExceptionType.EXPLAIN_TEXT = ""; &inEvent.HandlerStatus.AddException(&myExceptionType); Else try &recContext = &inEvent.ContextRecord;

&myExceptionType

create

6509,

"no

message

found",

&inEvent.EventID,

&myExceptionType.MESSAGE_SET_NBR = 0; &myExceptionType.MESSAGE_NBR = 0; &myExceptionType.MSG_SEVERITY = "M"; &myExceptionType.MESSAGE_TEXT = MsgGetText(0, 0, "SE ha insertado el cliente: %1", &recContext.CUST_ID.Value); &myExceptionType.EXPLAIN_TEXT = ""; &inEvent.HandlerStatus.AddException(&myExceptionType); &recAplicacion1 = CreateRecord(Record.PE_APP1_TBL); &recContext.CopyFieldsTo(&recAplicacion1); &recAplicacion1.Insert(); %This.Trace("ProcessEvent", "Se insert el registro para el cliente: " | &recContext.CUSTID.Value); catch Exception &ex &myExceptionType.MESSAGE_SET_NBR = 0; &myExceptionType.MESSAGE_NBR = 0; &myExceptionType.MSG_SEVERITY = "E"; &myExceptionType.MESSAGE_TEXT = MsgGetText(0, 0, "Al intentar insertar el cliente %1 se genero la excepcin %2", &recContext.CUST_ID.Value, &ex.ToString()); &myExceptionType.EXPLAIN_TEXT = ""; &inEvent.HandlerStatus.AddException(&myExceptionType); end-try End-If; end-method; method Trace /+ &inHeader as String, +/ /+ &inDetail as String +/ If &myEvent.HandlerTraceEnabled Then &myEvent.HandlerStatus.AddTraceEntry(&inHeader, &inDetail); End-If; end-method;

En el mtodo ProcessEvent escribimos el cdigo que deseamos que se ejecute al momento de llamar el Evento. El Objeto &inEvent de tipo baseEvent tiene una propiedad llamada ContextRecord que contiene el registro para el cual se est generando el evento. En nuestro ejemplo el ContextRecord se referir al registro CUSTOMER que se est insertando dentro de nuestra base de datos.

Para poder realizar registros en el log, tanto de mensajes como de errores (Al registrar errores el Events Framework nos permitir relanzar los eventos), el parmetro &inEvent posee el mtodo AddExceptions que recibe como parmetro un objeto de tipo EOEN_EVENT_MANAGER:Base:Types:ExceptionType. Con

este mtodo podemos agregar mensajes de severidad E (errores), M (mensajes) y W (Advertencias). Si agregamos algn mensaje de tipo E el Event Framework automticamente marcar el evento como finalizado con error. La otra caracterstica que posee el Event Framerwork es la activacin del trace del proceso, para eso creamos el mtodo Trace dentro de nuestro gestor.

El segundo gestor va a ser exactamente igual, lo nico que vamos a cambiar es el registro en el que vamos a insertar la informacin.

Ahora tenemos que agregar los gestores al Evento que creamos previamente, en la mismo componente que se encuentra en la ruta a Inicio Componentes de Empresa Eventos y Notificaciones Entorno de Eventos Registro de Eventos buscamos el Evento NUEVO_CLIENTE y le agregamos los gestores para que quede de la siguiente forma:

Activamos para los gestores el registro de todos los mensajes para que no solo incluya los errores en el log sino todos los mensajes que vamos a generar. Ahora vamos a hacer el llamado de nuestro evento, para esos debemos ir al registro CUSTOMER, ah es donde debemos registrar el llamado a nuestro evento. Vamos al campo setid y al evento SavePostChange y agregamos el siguiente cdigo:
import EOEN_MVC:EOEN_MODEL:EOENInterface; Local EOEN_MVC:EOEN_MODEL:EOENInterface &myEvent; Local Record &recContext; If GetRow().IsNew Then &myEvent = create EOEN_MVC:EOEN_MODEL:EOENInterface("", 0); &recContext = GetRecord(); &myEvent.AddContextRecord(&recContext); &myEvent.RaiseEvent("NUEVO_CLIENTE"); End-If;

Y listo, con lo anterior ya nuestro sistema empieza a generar eventos cada vez que creemos un nuevo cliente. Adems el evento va a quedar registrado en el Monitor de Eventos que se encuentra en Inicio Componentes de Empresa Eventos y Notificaciones Entorno de Eventos - Monitor de Eventos. El monitor se ver de la siguiente forma cada vez que alguien ejecute el evento:

Si damos clic en gestores podemos ver el estado de nuestro evento.

Como se puede ver uno de nuestros gestores finaliz en error, esto sucedi porque inserte la siguiente lnea antes de llamar el insert del record. Esta es una de las mayores ventajas que veo de este framework, ya que si nos equivocamos a la hora de escribir el gestor, y en algn momento se genera una excepcin dentro del ste, tenemos la capacidad de ejecutar nuevamente el gestor (Opcin Reejecutar) luego de corregir el cdigo.
insert throw CreateException(0, 0, "El servicio no se encuentra disponible en el momento");

Eliminamos la lnea de cdigo que se agreg para generar el error y reejecutamos el gestor. Luego podemos ver que ya se finaliz correctamente la ejecucin. Todo esto sin la necesidad de detener los procesos de los usuarios.

Bueno algunas consideraciones finales: El integration Broker debe estar activo para poder utilizar este framework. Se debe verificar que la cola EOEN_MSG_CHNL y las operaciones de servicio asociadas se encuentren activas y en ejecucin

También podría gustarte