El Gateway Client (transacción /n/IWFND/GW_CLIENT) es la herramienta estándar de SAP para probar servicios OData directamente desde el sistema. Permite enviar peticiones HTTP sin necesidad de herramientas externas como Postman, y es ideal para depurar, validar y entender el comportamiento de tus servicios OData.
Estructura básica de una URL OData
http(s)://<servidor>:<puerto>/sap/opu/odata/<espacio_nombre>/<nombre_servicio>_SRV/<nombre_entidad>
Ejemplo real:
/sap/opu/odata/ZSERVICE_NAME_SRV/ProductSet
Nota: Normalmente no se especifica el host completo porque el Gateway Client ya está dentro del sistema SAP. Basta con la ruta relativa.
Peticiones GET (leer datos)
Obtener un único registro (Get Entity)
HTTP Method: GET
Obtener un único registro, que se identifica por su clave primaria (key).
URL:
/sap/opu/odata/ZSERVICE_NAME_SRV/ProductSet('0001')
Código de estado esperado:
200 OK→ Registro encontrado, devuelve el JSON/XML404 Not Found→ No existe el registro con esa clave403 Forbidden→ Sin autorización500 Internal Server Error→ Error en el backend
Obtener un conjunto (Get EntitySet)
HTTP Method: GET
Obtener múltiples registros con o sin filtros. Sin filtros devuelve todos los registros (o los primeros según configuración).
URL:
/sap/opu/odata/ZSERVICE_NAME_SRV/ProductSet
Códigos de estado:
200 OK→ Todo correcto400 Bad Request→ URL mal formada500 Internal Server Error
Filtros y opciones de consulta (Query Options)
Los parámetros OData se añaden con ? y se separan con &.
| Opción | Ejemplo | Descripción |
|---|---|---|
$filter | ?$filter=Country eq 'ES' | Filtra registros |
$orderby | ?$orderby=Name asc | Ordena ascendente/descendente |
$top | ?$top=10 | Primeros N registros |
$skip | ?$skip=5 | Salta N registros (paginación) |
$select | ?$select=Name,City | Solo ciertos campos |
$expand | ?$expand=To_Items | Incluye entidades relacionadas |
$inlinecount | ?$inlinecount=allpages | Cuenta total de registros |
Si queremos añadir filtros múltiples, se combinan con operadores lógicos: and, or. Ej:
?$filter=Country eq 'ES' and City eq 'Madrid' ?$filter=Price gt 100 and Price lt 500
Peticiones POST: Crear un registro (Create Entity)
HTTP Method: POST
Crear un nuevo registro mediante una petición POST estándar.
/sap/opu/odata/ZSERVICE_NAME_SRV/ProductSet
Body en formato JSON:
{
"ProductId": "0002",
"Name": "Laptop Pro",
"Country": "ES",
"Price": 1200.00
}
Códigos de estado:
201 Created→ Registro creado correctamente400 Bad Request→ Datos inválidos (falta campo obligatorio, tipo erróneo)403 Forbidden→ Sin autorización para crear500 Internal Server Error
Respuesta típica (201): Suele devolver el objeto creado con su clave.
Peticiones PUT / PATCH (o MERGE): Actualizar un registro (Update Entity)
HTTP Method: PUT
Se utiliza para actualizar los registros de la entitdad.
/sap/opu/odata/ZSERVICE_NAME_SRV/ProductSet('0001')
Body JSON:
{
"ProductId": "0001",
"Name": "Laptop Pro Ultra",
"Country": "ES",
"Price": 1250.00
}
Códigos de estado:
200o204→ Actualización exitosa (según implementación)404 Not Found→ Registro no existe400 Bad Request→ Datos inválidos412 Precondition Failed→ Problema de concurrencia (ETag)
Petición DELETE: Eliminar un registro (Delete Entity)
HTTP Method: DELETE
Eliminar un registro
/sap/opu/odata/ZSERVICE_NAME_SRV/ProductSet(ProductId='0001')
Códigos de estado:
200o204→ Eliminado correctamente404 Not Found→ El registro no existe403 Forbidden→ Sin autorización500 Internal Server Error
Function Import (FI)
Los Function Imports permiten ejecutar lógica personalizada en ABAP, devolviendo o no datos.
FI tipo GET (sin body)
HTTP Method: GET
/sap/opu/odata/ZSERVICE_NAME_SRV/CalculateTax?Price=100&Country='ES'
Códigos de estado:
200 OK→ Devuelve resultado400 Bad Request→ Parámetros incorrectos
FI tipo POST (con body)
HTTP Method: POST
/sap/opu/odata/ZSERVICE_NAME_SRV/ProcessOrder
Body:
{
"OrderId": "1000",
"Action": "CONFIRM"
}
Códigos de estado:
200 OK→ Procesado correctamente500 Internal Server Error→ Error en la lógica
Deep Entities (entidades anidadas)
Crear entidad principal + detalles (Deep Create)
HTTP Method: POST
Se envía una estructura jerárquica ( entidad principal + relaciones hijas ) en una sola llamada.
/sap/opu/odata/ZSERVICE_NAME_SRV/SalesOrderSet
Body JSON:
{
"OrderId": "5000",
"CustomerId": "1000",
"OrderDate": "2026-04-06T00:00:00",
"To_Items": [
{
"ItemNo": "001",
"ProductId": "L001",
"Quantity": 2,
"Price": 100.00
},
{
"ItemNo": "002",
"ProductId": "L002",
"Quantity": 1,
"Price": 250.00
}
]
}
Obtener entidad con sus detalles (Deep Entity Read)
HTTP Method: GET
Se obtiene una entidad con sus relaciones expandidas.
/sap/opu/odata/ZSERVICE_NAME_SRV/SalesOrderSet('5000')?$expand=OrderItems
Ejemplo más completo:
/sap/opu/odata/ZSERVICE_NAME_SRV/SalesOrderSet?sap-client=100&$expand=OrderItems&$filter=OrderId eq '001' and CreatedOn eq datetime'2020-07-18T22:00:00'
Solución de errores frecuentes
| Problema | Posible causa | Solución |
|---|---|---|
404 Not Found en cualquier llamada | URL incorrecta o servicio inactivo | Verifica el nombre del servicio y que esté activo en /n/iwfnd/maint_service |
403 Forbidden | Faltan autorizaciones | Asigna rol adecuado al usuario (PFCG) |
400 Bad Request al hacer POST | Campo obligatorio vacío o tipo incorrecto | Comprueba el modelo EDM y tipos de datos |
500 Internal Server Error | Error ABAP en el backend | Revisa ST22 o el log de Gateway Client |
| El Gateway Client no muestra nada | Proxy o certificados | Prueba desde SE38 con CL_HTTP_CLIENT |
El Gateway Client es una herramienta poderosa y sencilla para probar servicios OData directamente en SAP. Dominarlo te permitirá:
- Ahorrar tiempo al no necesitar herramientas externas
- Depurar servicios rápidamente
- Validar filtros, expansiones y operaciones CRUD
- Entender los códigos de estado y mensajes de error



