Algunas veces se necesita sastifacer algunos requerimientos, ciertas funcionalidades  que no están contempladas por las funciones propias de PI. Para esto es necesario crear funciones propias , dichas funciones se desarrollan como te comentaba antes bajo el lenguaje JAVA.
A continuacion en el siguiente grafico podrás ver las característiscas al crear una función dentro del message mapping.
Simple Function
Bien vamos a crear un ejercicio simple, vamos a reemplazar una funcion estándar por una UDF, para esto de acuerdo al post anterior sobre message mapping  vamos a crear una funcion que reemplaze el requerimiento Nro 6 , que translade los valores del Título por valores de género.
Pues como ves en el gráfico esta es una funcion simple pues retorna un valor. Es una función de tipo simple del cual  (translate_Genero)
Ahora si deseas utilizar funciones ya creadas anteriormente por ti, simplemente compila tu clase en java y creas un .jar , luego importas dicho archivo (Mapping Objects- Import Archive) y lo cargas, y lo puedes utilizar como indica en el siguiente gráfico.

Funciones Avanzadas
En este tipo de funciones se puede trabajar con mas de un valor , dicho valores vienen en un arreglo.
En el gráfico a continuación veremos la diferencia en definir una funcion por contexto o en cola(queue).

Estas son las diferencias entre los tipos de funciones.
|     |        Funciones Simples  |        Funciones Avanzadas  |   
|     Parámetros de Entrada  |        String, …, Container  |        String[], …, ResultList, Container  |   
|     Values de Retorno  |        Devuelve un String  |        Deveuelve Result. addValue(String);  |   
|     Procesamiento  |        Función   que es llamada por  cada ocurrencia del   elemento.  |        Función   que es llamada por cada contexto o por cola . Los valores son almacenados en   un array de cadenas.  |   
A continuación mostrare los métodos utilizados en las funciones avanzadas.
|     Métodos  |        Description  |   
|     void addValue(String)  |        Método   que agrega un valor al array de retorno.  |   
|     void addContextChange()  |        Método   que agrega un cambio de contexto al array de retorno  |   
|     void addSuppress()  |        Método   que agrega un valor de Supress  |   
|     void clear()  |        Permite limpiar los valores del arreglo  |   
|     ResultList.CC (context change)  |        Método   que te permite comprobar si el valor de entrada es un cambio de contexto  |   
|     ResultList.SUPPRESS  (suppressed value)  |        Método   que te permite verificar si el valor de entrada es valor suppress.  |   

