AWE – Paso a Paso

AWE – Pasos para configurar un circuito simple desde cero

Introducción

Antes de comenzar con los pasos debemos identificar los elementos que se deben configurar. La siguiente imagen va a ayudar a darnos una idea de esto.

//AWE – Paso a paso – Componentes – ESP

En principio tenemos una solicitud, que es la que va a transitar por el circuito de aprobación. La solicitud tiene un solicitante, operador que la crea y envía para ser aprobada desde un componente específico del sistema (componente disparador). La solicitud se relaciona a una transacción que tiene su información resguardada en un componente y tabla del sistema que llamaremos tabla cabecera. Existe una tabla de referencia cruzada que une la información de la solicitud con la transacción y el proceso/circuito de aprobación. El circuito de aprobación está organizado en fases, rutas y pasos, cada uno disparado por un evento (como ser solicitar aprobación, aprobar, rechazar) y de acuerdo a un criterio previamente establecido. Ante estos eventos se disparan, de ser así configurado, una notificación. Dentro de cada paso se define una lista de usuario donde se identifican a los aprobadores. Los aprobadores darán su veredicto (aprobar o rechazar) también desde un componente específico (componente aprobador) en el sistema, contando con la posibilidad de disponer de un monitor de proceso que muestra el estado completo de la solicitud. Por último en el caso de que pase un límite de tiempo determinado sin que el aprobador tome alguna acción, puede definirse un escalamiento para que un aprobador superior tome la responsabilidad sobre la solicitud.

Tomamos un minuto para pensar en lo expuesto (…) .

A continuación los pasos a seguir para configurar desde cero un circuito:

Paso 0 – Identificar la transacción, componente disparador, componente aprobador
Paso 1 – Crear la tabla de referencia cruzada
Paso 2 – Definir el manejador de eventos
Paso 3 – Registrar la transacción
Paso 4 – Configurar la transacción
Paso 5 – Definir el circuito
Paso 6 – Accionar el disparo, rechazo y aprobación

Paso 0 – Identificar la transacción, componente disparador, componente aprobador

El paso 0 consta de identificar cual es la transacción principal que define nuestro circuito. Lo llamamos paso cero porque no requiere ninguna configuración ni modificación técnica, solo sentarse a pensar como va a ser la solicitud.

Ya sea que exista de manera estándar o no en PeopleSoft debemos identificar técnicamente cual es la tabla que define unívocamente a la transacción. Esta tabla debe contener el mayor nivel de agregación de información sobre la transacción.

Adicionalmente la transacción puede tener un detalle a nivel de líneas de transacción. El circuito de aprobación podrá ser definido a nivel de línea o a nivel de cabecera. En esta revisión veremos solo el nivel de cabecera, pero se darán cuenta que a nivel de línea no implica una complicación mayor.

A continuación debemos definir o identificar desde que componente se enviará la solicitud, como así también desde que componente se aprobará o rechazará la misma. De estos componentes es importante obtener el nombre del menú, componente y página que se utilizan.

La tabla cabecera, el componente disparador y el componente aprobador serán utilizados en los siguientes pasos.

Paso 1 – Crear la tabla de referencia cruzada

El primer paso que involucra una tarea técnica es la creación de la tabla XREF (o tabla de referencia cruzada). Esta tabla contendrá la información de la solicitud, y guardará referencia a la transacción.

La tabla física (debe ser creada como tal) de referencia cruzada debe seguir una estructura ya predefinida:

  • Se debe incluir en la primera posición el sub-record EOAW_XREF_SBR.
  • Se deben incluir a continuación todos los campos claves que identifican unívocamente a la transacción (son los campos claves la tabla cabecera). Estos campos no pueden ser marcados como clave primaria ni como clave de búsqueda.
  • No se debe incluir ningún otro campo adicional que no sean los ya mencionados.
  • Por convención el nombre de la tabla debe terminar con el posfijo XREF.

A continuación se muestran como ejemplo una tabla de transacción existente en PeopleSoft Recursos Humanos, que es la de Ofertas de Trabajo del módulo de Reclutamiento:

//AWE – Paso a paso – Tabla Cabecera – ESP

Y así se vería la tabla de referencia cruzada de la Solicitud de Ofertas de Trabajo:

//AWE – Paso a paso – Tabla XREF – ESP

Paso 2 – Definir el manejador de eventos

El manejador de eventos se encarga de realizar una acción ante un evento del circuito. Por ejemplo si al momento de aprobar queremos resguardar algún dato como la fecha y hora de aprobación, o el usuario que efectivamente aprobó, necesitaremos un manejador.

Existe un manejador de eventos estandar, que no realiza ninguna acción, y es la clase de paquete de aplicación llamada EOAW_CORE:ApprovalEventHandler. En esta clase se definen todos los eventos que se pueden configurar en el circuito. Lo que debemos hacer si necesitamos un tratamiento especial para alguno de ellos es crear una nueva clase que extienda de EOAW_CORE:ApprovalEventHandler, y sobreescribir los métodos que necesitemos cambiar.

A continuación se dejan dos ejemplos para tener en cuenta si se requiere:

import EOAW_CORE:ApprovalEventHandler;
import EOAW_CORE:ENGINE:UserStepInst;
import EOAW_CORE:ENGINE:AppInst;

class MiClaseEventHandler extends EOAW_CORE:ApprovalEventHandler
   method MiClaseEventHandler ();
   method OnHeaderDeny(&userinst As EOAW_CORE:ENGINE:UserStepInst);
   method OnHeaderApprove(&appinst As EOAW_CORE:ENGINE:AppInst);
end-class;

method MiClaseEventHandler 
   %Super = create EOAW_CORE:ApprovalEventHandler();
end-method;

method OnHeaderApprove
  /+ &appinst as EOAW_CORE:ENGINE:AppInst +/
  Local Record &rec_XRef = &appinst.rec;    

  Local Record &MyHdrRec = CreateRecord(Record.CABECERA);
  &rec_Xref.CopyFieldsTo(&MyHdrRec);
  &MyHdrRec.SelectByKey();

  &MyHdrRec.LASTUPDDTTM.Value = %DateTime;
  &MyHdrRec.STATUS.Value = “A”;
  &MyHdrRec.Update();

end-method;

method OnHeaderDeny
  /+ &userinst as EOAW_CORE:ENGINE:UserStepInst +/
  Local Record &rec_XRef = &userinst.step.path.stage.appInst.rec;

  Local Record &MyHdrRec = CreateRecord(Record.CABECERA);
  &rec_Xref.CopyFieldsTo(&MyHdrRec);
  &MyHdrRec.SelectByKey();

  &MyHdrRec.LASTUPDDTTM.Value = %DateTime;
  &MyHdrRec.STATUS.Value = “D”;
  &MyHdrRec.Update();

end-method;

Nótese que todos los métodos reciben como parámetro, de alguna manera, la tabla de referencia cruzada. Con ella podremos obtener fácilmente cualquier dato relacionado a la transacción. Y si se investiga un poco más dentro de las clases de AWE, podremos obtener cualquier información relacionada al circuito y a su estado actual.

Paso 3 – Registrar la transacción

A continuación es necesario definir la transacción de aprobación dentro del módulo de AWE en PeopleSoft. Para ello nos dirigimos al componente Registro de Transacción. La ubicación de este componente, y de todos los que se verán para definir el circuito dependen de la base en que se esté trabajando, por este motivo en cada paso les mostraré la ruta para cada base.

Finanzas: Menú Principal > Componentes de Empresa > Aprobaciones > Aprobaciones > Registro de Transacción

Recursos Humanos: Menú Principal > Definir HRMS > Definiciones Comunes > Aprobaciones > Registro de Transacción

En este componente es donde se identifica que transacción y que solicitud van a ser representadas por un Proceso de Workflow determinado, y bajo que condiciones generales.

//AWE – Paso a paso – Registro de Transacción – ESP

En este punto es importante completar los campos marcados en la imagen anterior:

1.ID Proceso: Identifica al circuito, es un literal que será utilizado como clave.
2.Val RefCrzd: Se completará con el nombre de la tabla de referencia cruzada.
3.Activar Notificaciones: Define si se activan o no las notificaciones por Email, Lista de Trabajo o Push (notificación por webservice).
4.Nombre Menú: Nombre del Menú del Componente Aprobador.
5.Cpte Aprobación: Nombre del Componente Aprobador.
6.ID Paquete Raíz: Nombre del paquete de aplicación que contiene la clase de manejador de eventos. En caso de no haber creado uno, se deberá completar con el estándar.
7.Ruta Clase: Nombre de la clase manejadora de eventos. En caso de no haber creado uno, se deberá completar con el estándar.
8.Nivel: Define si la solicitud se realizará a nivel de Línea o Cabecera.
9.Registro (Tabla): Nombre de la tabla cabecera transaccional.
10.ID Etiqueta Campo: Etiqueta de cada campo clave de la transacción.

Paso 4 – Configurar la transacción

En el paso 4 se procede a configurar la transacción con el fin de indicar cuáles serán los eventos que manejará el circuito de aprobación como así también las notificaciones y listas de trabajo. Es aquí donde se define el comportamiento que tendrá el circuito en relación a la transacción. Para ello se accede al componente de Configurar Transacción por medio de las siguientes rutas:

Finanzas: Menú Principal > Componentes de Empresa > Aprobaciones > Aprobaciones > Notif Trns Entorno Aprobación

Recursos Humanos: Menú Principal > Definir HRMS > Definiciones Comunes > Aprobaciones > Notif Trns Entorno Aprobación

//AWE – Paso a paso – Configurar Transacción – ESP

A continuación se explica que información se completa en cada campo:

1.Usuarios Aprob: Es el nombre de la vista que se utilizará para mostrar la información relacionada a los aprobadores. Es una vista que contiene como clave única el campo OPRID. Utilizaremos en general la vista PSOPRDEFN_VW.
2.Evento: Es el nombre del evento que se configura. Por lo general vamos a definir 3 eventos a saber ‘Ruta para Aprobación’, ‘En Rechazo Final’, y ‘En Aprobación Final’.
3.Nivel: Identifica si el evento corresponde a nivel de línea o cabecera.
4.Participante: Indica a quien se le enviará la notificación.
5.Canal: Indica por que medio se le notificará: lista de trabajo, email o ambos.
Los temas relacionados a las notificaciones serán detallados en otra nota.

Paso 5 – Definir el circuito

Este es el momento donde se define y configura el circuito de aprobación. Tenemos definida la transacción y sus tablas, la solicitud y sus tablas, el comportamiento de la solicitud y transacción, resta definir cómo será el camino que toma cada solicitud.

En este punto es importante entender como funcionan y cual es la relación entre las Fases, Rutas y Pasos.

//AWE – Paso a paso – Circuito Componentes – ESP

Fase: Es un agrupador de mayor nivel. La fase define el estado de la aprobación, debiendo aprobarse las distintas fases para que la solicitud se considere aprobada. Impone un orden secuencia entra las fases, por lo cual se debe cumplir que una fase se encuentre aprobada para pasar a la siguiente.

Ruta: Es el camino que va a tomar la solicitud dentro de una fase. Se ejecutan en paralelo dentro de la Fase en que se definan. Para que se ejecute la ruta, se debe cumplir con ciertos criterios a definir.

Paso: Es el paso quien define la instancia de aprobación. De definirse más de un paso para una Ruta se ejecutarán de manera secuencial. El paso se ejecuta siempre y cuando se cumpla con los criterios definidos. Es el paso quién, por medio de la Lista de Usuarios, define quienes serán los operadores que deben aprobar en esa instancia (el paso) la solicitud.

Esta configuración se realiza desde el componente Definición Proceso Aprobación.

Finanzas: Menú Principal > Componentes de Empresa > Aprobaciones > Aprobaciones > Definición Proceso Aprobación

Recursos Humanos: Menú Principal > Definir HRMS > Definiciones Comunes > Aprobaciones > Definición Proceso Aprobación

//AWE – Paso a paso – Definición de Proceso de Aprobacion – ESP

A continuación se explica que información se completa en cada campo:

1.ID Definición: Dado que para un proceso se pueden definir distintos circuitos, se utiliza esta campo para identificar los mismos. Por lo general se puede utilizar un distinto circuito por cada SETID.
2.Criterios Definición: Define si el Circuito, Ruta o Paso será ejecutado. De no tener una condición seleccionaremos Siempre Verdadero. De tener una condición se evaluará de acuerdo a los datos de la solicitud.
3.Rol Administrador: Define el rol a quien le llegarán las notificaciones en caso de no encontrar usuarios dentro de las listas de usuarios definidas.
4.Nº Fase: Es el número de Fase que que define el orden secuencial de ejecución de las mismas.
5.Nivel: Define si la Fase se ejecuta a nivel de línea o cabecera.
6.Origen: Define si los usuarios que se definen en el paso son identificados estática o dinámicamente. La diferencia entre estática o dinámica, es que el segundo incorpora el concepto de Autorización de Aprobación para definir dinámicamente al aprobador. Para el caso de esta guía utilizaremos el origen estático.
7.Lista Usuarios Aprobador: Define la lista de usuarios del paso. La lista de usuarios define los usuarios que aprobarán ese paso.

Los temas relacionados a la Lista de Usuarios serán detallados en otra nota, como así también los Criterios, Tiempo Límite y demás detalles de la configuración.

Paso 6 – Accionar el disparo, rechazo y aprobación

El último paso es insertar el PeopleCode correspondiente al disparo de la solicitud, el rechazo y aprobación. El código debe ejecutarse siempre en el evento SavePostChange a nivel de Registro o Componente (también podría utilizarse desde un Application Engine o bien desde un Handler de mensajería).

Para disparar o iniciar el circuito de la solicitud necesitamos incluir el siguiente código en el componente disparador definido en el punto 0.

Import EOAW_CORE:*;

Local String &sIdProceso = "IDPROCESO";
Local String &sIdDefinicion ="IDDEFINICION";

Local Record &recHdr = getRecord(record.REGISTROCABECERA);

Local EOAW_CORE:LaunchManager &mLaunchMgr = create EOAW_CORE:LaunchManager(&sIdProceso, &recHdr, %UserId);

&mLaunchMgr.definition = &sIdDefinicion;

If &mLaunchMgr.hasAppDef Then
  If (&mLaunchMgr.submitEnabled) Then
    &mLaunchMgr.DoSubmit();
  Else
    If (&mLaunchMgr.resubmitEnabled) Then
      &mLaunchMgr.DoResubmit();
    End-If;
  End-If;
End-If;

Algunos valores a considerar:

&sApprobalProcessId: Es el nombre del proceso que se definió en la configuración de los pasos 3, 4 y 5.
&recHdr: es la variable que tiene en buffer el registro cabecera (o línea según corresponda) de la transacción que se va a relacionar con la solicitud. Si no se encuentra en el buffer, deberá hacerse un CreateRecord y un SelectByKey (o SelectByKeyEffdt).
&mLaunchMgr.definition: Esta sentencia puede o no utilizarse para indicar cual definición del circuito será ejecutado. Si no se completa nada, se calculará la definición a partir del criterio que se cumpla para todos los existentes, tomando el primero de mayor prioridad que cumpla el mismo criterio.

Para aprobar o rechazar utilizaremos el siguiente código en el evento SavePostChange del componente de aprobación:

Import EOAW_CORE:*;
Component String &strAccion;

Local String &sIdProceso = "IDPROCESO";
Local Record &recHdr = getRecord(record.REGISTROCABECERA);

Local EOAW_CORE:ApprovalManager &mApprovalMgr = create EOAW_CORE:ApprovalManager(&sIdProceso , &recHdr, %UserId);

&mApprovalMgr.AddComments(%UserId, &recHdr, "Comentarios");

Evaluate &strAccion
  When "A"
    &mApprovalMgr.DoApprove(&recHdr);
    Break;
  When "D"
    &mApprovalMgr.DoDeny(&recHdr);
    Break;
End-evaluate;

Nótese que la variable de componente &sAccion debe ser modificada en los eventos FieldChange de los botones a utilizar para Aprobar y Rechazar.

Component String &strAccion;
&strAccion = "A";
If (Not GetRow().IsChanged) Then
  SetComponentChanged();
End-if;

DoSave();

Adicionalmente estos eventos deberán llamar a la funcion DoSave(), a fin de que se ejecute el guardado del componente. Generalmente deberá agregar código a nivel del componente para grisar determinados campos o mismo los botones de aprobar y rechazar, dependiendo del estado de la aprobación.

Agregados estos códigos en los componentes, podemos pasar probar el circuito de aprobación.

Para finalizar no quiero dejar de citar el blog de Jim’s PeopleSoft Journal, en donde se puede ver el capítulo que el autor le dedicó a AWE (ha sido fuente de inspiración en más de una oportunidad).

Contenido

Compartir en facebook
Compartir en twitter
Compartir en linkedin
Carrito de compra