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ámetro | Tipo | Descripción | ¿Qué contiene? |
|---|---|---|---|
iv_action_name | STRING | Nombre del Function Import que se ha llamado | El nombre que le diste en SEGW |
it_parameter | TYPE /IWBEP/T_MGW_NAME_VALUE_PAIR | Lista de parámetros de entrada | Los valores que envia la app frontend (UI5/Fiori) |
er_data | DATA | Datos 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 uso | Ejemplo | Método HTTP |
|---|---|---|
| Acciones de negocio | Aprobar, Rechazar, Cancelar, Reservar | POST |
| Cálculos complejos | Calcular total de ventas de un año, obtener promedio de precios | GET |
| Procesamiento masivo | Cerrar lote de facturas, procesar nóminas masivas | POST |
| Operaciones con efectos secundarios | Enviar email, generar PDF, llamar a un BAPI/RFC | POST |
| Llamadas a sistemas externos | Consultar stock en sistema legacy, validar dirección externa | GET o POST |
| Consultas que no encajan en una entidad | Verificar disponibilidad de vuelos, comprobar estado de un pedido | GET |
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ón | Incorrecto | Correcto |
|---|---|---|
| Crear un registro | Function Import CreateCustomer | POST /CustomerSet |
| Leer por clave | Function Import GetCustomerById | GET /CustomerSet('1000') |
| Actualizar | Function Import UpdateCustomer | PATCH /CustomerSet('1000') |
| Borrar | Function Import DeleteCustomer | DELETE /CustomerSet('1000') |
| Listar con filtros | Function Import SearchCustomers | GET /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:
Tipos de retorno (Return Type)
Al crear un Function Import, debes especificar qué tipo de datos devuelve:
Buenas prácticas
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.




