Ejemplo de UDF útiles

Después de ver cómo hacer tratamiento de mensajes usando los cambios explícitos de contexto y las funciones de nodo proporcionadas por SAP PI en los apartados anteriores, vamos a profundizar en el tratamiento de los contextos mediante funciones definidas por el usuario para casos más complicados. Este apartado incluye un ejemplo de UDF para quitar duplicados dentro de un contexto, así como algunas indicaciones para otras funciones que pueden resultar útiles cuando estamos tratando contextos en la cola en PI, como la supresión de contextos o agrupación de registros por contexto.

Quitar duplicados dentro de un contexto

En este primer ejemplo, queremos eliminar duplicados en el campo fecha dentro de un mismo contexto. No podemos usar la función removeContexts() para ordenar los registros y quitar duplicados, puesto que necesitamos hacerlo dentro de cada contexto por separado. Por lo tanto, crearemos una función propia (UDF) para hacerlo.

Lo que queremos, en la salida de la función, es tener el mismo número de contextos, pero eliminar las filas duplicadas.

Para esto, el parámetro de entrada a la función será la lista de fechas en formato string y la salida, la lista de resultados, manteniendo los cambios de contexto de la lista inicial, pero sin los valores duplicados.

Recordemos que para tratar los datos a nivel de contexto debemos elegir All Values of a Context como tipo de ejecución al crear la función.

El código de la función será el siguiente, haciendo un bucle dentro de los contextos y añadiendo únicamente los valores únicos, descartando los duplicados, pero sin modificar los contextos existentes.

El resultado será una reducción del número de valores en la cola, manteniendo los cambios de contexto (marcados en gris en la cola).

Eliminar y añadir cambios de contexto

En la cola de los mapeos los valores de cambio y supresión de contextos son constantes. Se puede acceder a ellos usando: ResultList.SUPPRESS y ResultList.CC en una UDF.

Si queremos realizar acciones para los cambios de contexto o contextos eliminados por otra función de tratamiento, solo tendremos que filtrar por estos valores y añadir a continuación el código según nuestras necesidades (eliminar cambios de contexto según una condición o añadir nuevos contextos previamente eliminados, por ejemplo).

public void remove(String[] input, ResultList result, Container container) {

        for (int i = 0; i < input.length; i++) {

               if (input[i].equals(ResultList.CC)) {

                       // código para los cambios de contexto

               } else if (input[i].equals(ResultList.SUPPRESS)) {

                       // código para contextos eliminados

               }

        }

}

De la misma manera, podemos usar el código addValue(ResultList.CC) cuando queramos introducir un cambio de contexto dadas ciertas condiciones de entrada, por ejemplo, después de valores duplicados, tras un cambio de valor para separar listas o a partir de un valor constante dado en la entrada.

Agrupar registros

A veces, se hace necesario agrupar registros de manera diferente al contexto original del mensaje de entrada. En este ejemplo tenemos los usuarios de tres empleados y el correspondiente al responsable que tienen asignado. Necesitamos mapear estos empleados a una estructura de salida en la que los tres empleados se agrupen en un solo contexto bajo el nombre de su responsable de departamento.

Hará falta una UDF que elimine los contextos y agrupe los usuarios bajo un mismo contexto para la estructura formSubject, a la vez que se mapea la formSender como contexto principal con el responsable.

Con este tercer artículo terminamos la serie de tratamiento de contextos en el mapeo gráfico de SAP PI. No dudes en contactar con el equipo de UX/I para aclarar cualquier duda.