Cómo crear un MessageParser personalizado en SAPUI5

En la mayoría de las aplicaciones de SAPUI5, se utiliza el servicio Netweaver Gateway/HANA XSOData para conectar la aplicación con el backend. Esto implica el uso del modelo ODataModel del framework SAPUI5, el cual se encarga de tareas como el manejo de paginación, la conversión de objetos de filtro y la conversión de fechas, entre otras.

Una de las funcionalidades más importantes del ODataModel es el manejo de mensajes retornados por el servidor. Estos mensajes pueden ser de éxito, error o información, y son convertidos en objetos UI5 que pueden ser utilizados por la aplicación.

Sin embargo, ¿qué sucede cuando no se utiliza un servicio OData? ¿Qué ocurre cuando se utiliza un servicio HANA XS u otro servicio que no sigue el protocolo OData? En estos casos, el framework SAPUI5 no puede entender la respuesta del servidor, ya que no sigue un protocolo que SAPUI5 comprenda.

Para solucionar este problema, es necesario implementar un MessageParser personalizado utilizando la interfaz proporcionada por el framework SAPUI5. Esto nos permite escribir código para especificar cómo extraer los mensajes de la respuesta del servidor.

En este artículo, te guiaré a través del proceso de creación de un MessageParser personalizado utilizando un escenario de ejemplo. Veremos cómo definir el protocolo, crear el MessageParser personalizado y mostrar los mensajes en la interfaz de usuario.

Definición del protocolo

En nuestro ejemplo, hemos decidido no utilizar el protocolo OData, pero aún así necesitamos seguir algún protocolo. Vamos a inventar un protocolo y decidir que la respuesta del servidor siempre debe tener una estructura similar a la siguiente:

{
  "data": {...},
  "messages": [
    {
      "id": "1",
      "type": "error",
      "description": "Mensaje de error 1"
    },
    {
      "id": "2",
      "type": "success",
      "description": "Mensaje de éxito 1"
    },
    ...
  ]
}

Según nuestro protocolo, la respuesta del servidor debe ser un objeto JSON con un nodo llamado “data” y un nodo separado llamado “messages”, que debe ser un array de objetos que representan los mensajes.

Creación del MessageParser personalizado

Una vez que hemos definido el protocolo, podemos escribir nuestra propia implementación del MessageParser. Este método parse() se llama desde nuestro modelo personalizado y recibe la respuesta del servidor como argumento. Dado que sabemos que la respuesta tendrá un nodo llamado “messages”, recorremos este nodo y creamos instancias de objetos Message de SAPUI5. Una vez que tenemos un array de instancias de Message, disparamos el evento messageChange para que el MessageManager mantenga su MessageModel actualizado.

Creación de un modelo personalizado

Llamamos al método parse() de nuestro propio MessageParser desde el “Message Processor”, que es la entidad que realiza la solicitud de red para obtener los datos. Una vez que nuestro método obtiene los datos del servidor, pasa la respuesta al método parse() del MessageParser para extraer los mensajes. Luego, actualiza sus propias estructuras internas para contener los datos reales que el servidor ha devuelto. Estos datos pueden ser enlazados a los controles de la interfaz de usuario mediante la vinculación de datos.

Controlador

En el controlador de la vista, activamos el método read() de nuestro modelo personalizado para simular una operación de red que recupera un objeto JSON del servidor. Se espera que el método coloque los datos recibidos en la ruta “/Customers”, a la cual se enlaza el control sap.m.List de nuestra vista. Además de activar la lectura, creamos una instancia de la clase MessageManager de SAPUI5. Una vez que registramos nuestro modelo personalizado como “el procesador de mensajes” en esta instancia de MessageManager, esta reaccionará a cualquier evento messageChange que nuestro parser dispare en el modelo.

Mostrar mensajes en la interfaz de usuario

Con todo lo que hemos visto hasta ahora, ahora tenemos un MessageManager que contiene un MessageModel, que a su vez contiene todos los mensajes que hemos recibido del servidor. Ahora podemos utilizar un control adecuado que pueda ser enlazado al MessageModel a través de un ListBinding. El framework SAPUI5 proporciona un control específico para mostrar mensajes, el sap.m.MessagePopover. Este control nos permite mostrar los mensajes en una ventana emergente en la interfaz de usuario.

En resumen, hemos aprendido cómo crear un MessageParser personalizado en SAPUI5 para manejar mensajes cuando se utilizan protocolos distintos a OData en nuestros proyectos. Esta solución es escalable y fácil de mantener, incluso en proyectos con protocolos complejos.

Espero que hayas disfrutado de este artículo. Puedes encontrar el código fuente de un ejemplo funcional en el siguiente enlace: https://github.com/pritin-tyagaraj/ui5-message-parser. Tus comentarios son bienvenidos en la sección de comentarios a continuación.

Te puede interesar