Diferencia entre Function Import y Entity en OData: ¿Cuándo usar cada uno?

Si has trabajado con OData en SAP (SEGW), seguro que te has preguntado ¿Para qué sirve un Function Import? ¿No puedo hacer lo mismo con una entidad normal? ¿Cuándo uso cada uno?

La respuesta es simple: Las entidades son para operaciones CRUD estándar sobre tus datos. Los Function Imports representan acciones o lógica de negocio.

Y entender bien esta diferencia es clave para diseñar servicios OData limpios y escalables.

¿Qué es una Entidad en OData?

Una entidad representa un objeto de negocio (Cliente, Pedido, Producto, etc.). Para cada entidad, OData genera automáticamente 4 operaciones CRUD estándar:

OperaciónMétodo HTTPURL ejemplo¿Qué hace?
CreatePOSTPOST /CustomerSetCrear un nuevo cliente
Read (single)GETGET /CustomerSet('100')Leer un cliente por clave
Read (collection)GETGET /CustomerSetLeer lista de clientes
UpdatePUT/PATCHPUT /CustomerSet('100')Modificar un cliente
DeleteDELETEDELETE /CustomerSet('100')Borrar un cliente

Estas operaciones están pensadas para trabajar directamente con datos, sin lógica compleja.

¿Qué es un Function Import?

Un Function Import es una acción u operación personalizada que ejecuta lógica de negocio y no encaja en las operaciones estándar (Create, Read, Update, Delete). No está limitado a CRUD y se usa cuando necesitas hacer algo más que simplemente leer o modificar datos.

Se usa para:

  • Ejecutar acciones (aprobar, cancelar, enviar)
  • Liberar una orden de transporte
  • Realizar cálculos complejos (total de ventas, promedio, etc.)
  • Procesar datos masivos
  • Enviar emails o generar PDFs
  • Llamar BAPIs o RFCs
  • Procesar múltiples registros en una sola llamada

La diferencia clave

AspectoEntidad (CRUD estándar)Function Import
PropósitoOperaciones CRUD sobre un objeto de negocioOperaciones personalizadas que no son CRUD
Operaciones disponiblesCreate, Read, Update, DeleteLas que tú definas
¿Está ligado a una entidad?✅ Sí (siempre)❌ No necesariamente (puede ser bound o unbound)
¿Modifica datos?Sí (Create, Update, Delete)Sí (puede, pero no es obligatorio)
EjemploCrear un pedido, leer un clienteAprobar un pedido, calcular total

¿Cuándo usar un Function Import o una Entidad?

Usa una Entidad (CRUD estándar) cuando…

  • Necesitas crear, leer, actualizar o borrar un registro (ej: leer un pedido, borrar un pedido, listar todos los pedidos)
  • La operación es estándar y predecible
  • El cliente (UI5, Fiori) espera comportamiento CRUD estándar

Usa Function Import cuando…

  • La operación no encaja en CRUD
  • Necesitas aprobar, rechazar, enviar, cancelar (ej: enviar un email, cancelar una factura, aprobar un pedido)
  • Necesitas calcular algo (totales, promedios)
  • Necesitas procesar múltiples registros a la vez
  • Necesitas ejecutar un BAPI o RFC
  • La operación tiene efectos secundarios (enviar email, generar PDF, actualizar sistemas externos)

La diferencia no es solo técnica, es de diseño:

  • Las entidades modelan el estado del sistema (datos)
  • Los Function Imports modelan el comportamiento (acciones)

Elegir bien entre ambos no solo mejora tu backend, sino también cómo aplicaciones como SAP Fiori consumen tu servicio.