Las funciones de los servicios oData permiten ser redefinidas para lograr funcionalidades que, de otro modo, no serían posibles. En esta serie de artículos veremos cómo hacer uso de las redefiniciones para tratar ficheros tanto desde el Cliente SAP Gateway como desde una aplicación SAPUI5.
Servicio oData
Para comenzar, en el servicio oData creamos una entidad (tras crear previamente su correspondiente tabla de base de datos y estructura) para almacenar los datos de los ficheros. Se tienen las siguientes propiedades:
A continuación, nos aseguramos de dejar marcado el tipo “Media” en la entidad e implementamos las funciones GetEntity y GetEntitySet.
Redefinición de funciones
Para lograr el tratamiento de ficheros vamos a redefinir varias funciones.
Al crearse un servicio oData, SAP genera automáticamente cuatro clases:
- ZCL_NOMBRE_ODATA_DPC (Data Provider Class)
- ZCL_NOMBRE_ODATA_MPC (Model Provider Class)
- ZCL_NOMBRE_ODATA_DPC_EXT
- ZCL_NOMBRE_ODATA_MPC_EXT
Cada vez que, desde la transacción SEGW, se genera el servicio oData, las clases DPC y MPC se crean de nuevo. Por ello, la redefinición se realiza en las clases de extensión _EXT, ya que, si se hiciese en las otras, se borraría lo que hemos implementado en cuanto activemos el servicio.
La clase MPC contiene los metadatos del servicio, es decir, trata sobre las entidades y sus propiedades.
La clase DPC contiene la implementación del servicio, es decir, aquí se encuentran, por ejemplo, los métodos GetEntity, Update, Create… También se emplea para implementar los Function Import.
Una vez conocidos los conceptos generales sobre estas clases, podemos comenzar con las redefiniciones necesarias para el tratamiento de ficheros.
Primero, en la transacción SE80 buscamos la clase MPC_EXT de nuestro oData y redefinimos el método DEFINE.
Indicamos el nombre de nuestra entidad (Fichero) y el nombre de la propiedad que almacena su contenido (Content).
Activamos los cambios y accedemos a la clase DPC_EXT, donde redefinimos el método /IWBEP/IF_MGW_APPL_SRV_RUNTIME~GET_STREAM, gracias al cual podremos descargar ficheros.
Por último, redefinimos el método /IWBEP/IF_MGW_APPL_SRV_RUNTIME~CREATE_STREAM, gracias al cual podremos subir ficheros.
No te pierdas el próximo artículo sobre tratamiento de ficheros, veremos qué representan los parámetros slug y mimetype mediante ejemplos tanto en el Cliente SAP Gateway como en una aplicación Fiori.
Hola gracias por tu ayuda.
Es increible la forma en la que explicas.
gracias a tu ejemplo, he podido implementar el metodo.
Pero ahora me encuentro en una situacion donde necesito recivir y enviar tablas.
He leído sobre un metodo create_deep_entity.
desafortunada mente este metodo solo me permite enviar tablas pero no recivirlas para mostrarlas.
¿sabe de algun metodo que pueda usar?
Agradezco mucho su ayuda.
woo Es increible como esta explicado, muy buen articulo. Felicidades!!!no es muy comun encontrar este tipo de contenido explicado de esta forma, realmente un aplauso. Y muchas gracias fue de mucha ayuda. ¿Donde puedo encontrar la continuacion de este articulo? Me gustaria saber como obtener una lista de archivos guardados en la tabla para visualizacion desde UI5
Muchas gracias Alexis, nos alegra que te haya resultado útil el artículo. La segunda parte la puedes consultar en el siguiente enlace: «https://orekait.com/blog/redefinicion-funciones-odata-tratamiento-ficheros-2/»¡Un saludo!