Function Imports en SAP Gateway

Cuando desarrollas servicios OData en SAP, a menudo necesitas hacer algo que no es crear, leer, actualizar o borrar un registro. Por ejemplo: aprobar un pedido, calcular el total de ventas o enviar un correo. Para esos casos, OData tiene una herramienta llamada Function Import.

¿Qué es un Function Import?

Un Function Import sirve para ejecutar acciones o consultas especiales. Es una operación de servicio personalizada dentro de un servicio OData que va más allá de las operaciones CRUD estándar (Create, Read, Update, Delete). Se invoca mediante los métodos HTTP GET o POST, cubriendo aquellas necesidades que no pueden mapearse a las operaciones CRUD tradicionales.

Todos los Function Imports de un servicio OData se implementan en un único método: EXECUTE_ACTION de la clase DPC_EXT (Data Provider Class Extension).

Este método tiene tres parámetros clave:

ParámetroTipoDescripción¿Qué contiene?
iv_action_nameSTRINGNombre del Function Import que se ha llamadoEl nombre que le diste en SEGW
it_parameterTYPE /IWBEP/T_MGW_NAME_VALUE_PAIRLista de parámetros de entradaLos valores que envia la app frontend (UI5/Fiori)
er_dataDATADatos de salida (referencia)Los registros que devolverás al frontend

¿Para qué sirve un Function Import? (Cuándo usarlo)

Las operaciones CRUD estándar son ideales para gestionar entidades, pero fallan cuando la lógica es más compleja, tiene efectos secundarios o no se ajusta a un simple «crear, leer, actualizar, borrar». Los Function Imports están diseñados precisamente para llenar este vacío.

Casos de uso típicos

Caso de usoEjemploMétodo HTTP
Acciones de negocioAprobar, Rechazar, Cancelar, ReservarPOST
Cálculos complejosCalcular total de ventas de un año, obtener promedio de preciosGET
Procesamiento masivoCerrar lote de facturas, procesar nóminas masivasPOST
Operaciones con efectos secundariosEnviar email, generar PDF, llamar a un BAPI/RFCPOST
Llamadas a sistemas externosConsultar stock en sistema legacy, validar dirección externaGET o POST
Consultas que no encajan en una entidadVerificar disponibilidad de vuelos, comprobar estado de un pedidoGET

Cuándo NO usar Function Imports (y qué hacer en su lugar)

La documentación oficial de SAP es clara: si la operación que quieres realizar puede invocarse mediante una operación CRUD estándar, no deberías crear un Function Import.

SituaciónIncorrectoCorrecto
Crear un registroFunction Import CreateCustomerPOST /CustomerSet
Leer por claveFunction Import GetCustomerByIdGET /CustomerSet('1000')
ActualizarFunction Import UpdateCustomerPATCH /CustomerSet('1000')
BorrarFunction Import DeleteCustomerDELETE /CustomerSet('1000')
Listar con filtrosFunction Import SearchCustomersGET /CustomerSet?$filter=Name eq 'Juan'

Si te encuentras creando Function Imports con nombres como CreateX, ReadX, GetX, ChangeX, UpdateX, o DeleteX, es una clara señal de que el tipo de entidad X debería ser parte de tu modelo de datos estándar.

El principiorio de diseño clave

«Usa entidades para CRUD, usa Function Imports para acciones.»

  • Las entidades representan «cosas» que pueden ser creadas, leídas, actualizadas o eliminadas.
  • Los Function Imports representan «acciones» que se ejecutan.

Si quieres ver cuándo elegir entre una Entidad y un Function Import, te recomiendo leer este artículo: Diferencia entre Function Import y Entity en OData

Parámetros de un Function Import

Al crear un Function Import en SEGW, defines sus parámetros de entrada (Import) y su tipo de retorno (Return Type).

Parámetros de entrada: Propiedades de un parámetro Import

En la herramienta Service Builder, al definir un parámetro de importación, puedes añadir sus propiedades y especificar:

  • Name: Nombre del parámetro (ej. CustomerId)
  • Data Element: Elemento de datos DDIC para heredar tipo y etiquetas automáticamente
  • EDM Core Type: Tipo de datos OData (ej. Edm.String, Edm.Int32, Edm.DateTime)

Tipos de retorno (Return Type)

Al crear un Function Import, debes especificar qué tipo de datos devuelve:

Tipo de retornoDescripción¿Cuándo usarlo?
Complex TypeDevuelve una estructura con varios campos (sin clave)Cuando la salida es un conjunto de datos sin identidad propia
Entity TypeDevuelve una entidad completa (con clave)Cuando la salida es una entidad existente
No ReturnLa operación no devuelve datosOperaciones que solo producen efectos secundarios (aprobar, enviar email)

Buenas prácticas

  • Usa Function Import solo para lo que no es CRUD. Si la operación puede realizarse con POST, GET, PUT o DELETE estándar, no uses Function Import.
  • Elige el método HTTP adecuado. GET: Para operaciones de solo lectura, sin efectos secundarios (ej. cálculos, consultas). POST: Para operaciones que modifican datos o tienen efectos secundarios (ej. aprobar, cancelar, enviar emails)
  • Nombra tus Function Imports como verbos de negocio. Ej: ApproveOrder, CancelInvoice.
  • Devuelve información útil en la respuesta. Incluye mensajes de éxito/error, IDs generados, o cualquier dato relevante para el cliente.
  • Gestiona errores correctamente. Usa excepciones de negocio: para errores controlados, RAISE EXCEPTION TYPE /iwbep/cx_mgw_busi_exception.
  • Documenta la interfaz. Añade descripciones claras en la documentación del servicio explicando qué hace cada Function Import, qué parámetros espera y qué devuelve.
  • Valida los parámetros obligatorios.

Los Function Imports son una herramienta esencial en el desarrollo de servicios OData en SAP Gateway cuando las operaciones CRUD estándar no son suficientes.