Skip to Content
IntegracionesSAPSAP Gateway (OData)

SAP Gateway (OData)

El tercer camino hacia SAP, y el único que no depende del SDK: el CMS habla HTTP con el ICM de SAP y consume los servicios OData publicados en el SAP Gateway (/sap/opu/odata/...). Es el camino natural cuando el servicio ya existe — las apps Fiori usan los mismos —, o cuando el equipo SAP prefiere exponer OData antes que liberar RFC.

Ver SAP para comparar con RFC/BAPI e IDoc.

Cómo se arma

  • La Conexión Externa es el servidor: protocolo, host y puerto, más mandante, autenticación y TLS. Una conexión atiende a todos los servicios de ese servidor.
  • La Aplicación es del tipo SAP Gateway y aparece en el grupo SAP en todas las pantallas, junto a RFC e IDoc. Su URL viene de la conexión y queda bloqueada.
  • La ruta del servicio va en cada Recolección (Ruta de la Recolección) y en cada Entrega (URI), exactamente como en una integración HTTP.

Ejemplo: conexión http://192.168.15.98:7200, Recolección con la ruta /sap/opu/odata/sap/PP_PRODOPS_CONFIRM_SRV/WorkCenters. La llamada sale hacia http://192.168.15.98:7200/sap/opu/odata/sap/PP_PRODOPS_CONFIRM_SRV/WorkCenters?sap-client=100.

Configurar la conexión

En Conexiones Externas, tipo SAP Gateway (OData), en el grupo SAP.

La conexión es el servidor: protocolo, host, puerto, mandante y autenticación — el servicio va en la Recolección y la Entrega
La conexión es el servidor: protocolo, host, puerto, mandante y autenticación — el servicio va en la Recolección y la Entrega
CampoPara qué sirve
ProtocoloHTTP o HTTPS — lo que el ICM expone en ese puerto
HostDirección del servidor SAP (o del Web Dispatcher)
PuertoPuerto del ICM (transacción SMICM › Servicios). En blanco, el predeterminado del protocolo: 443 u 80
Ruta de prueba (Keep Alive)Lo que llaman Probar Conexión y el Keep Alive. Viene con /sap/public/ping
Client (mandante)Se envía como sap-client en cada llamada
IdiomaSe envía como sap-language. Solo cambia textos y mensajes de error
AutenticaciónBasic (usuario técnico), OAuth 2.0 Client Credentials o Certificado de cliente (X.509)
Certificado CA (PEM)Solo para un ICM con certificado autofirmado o de CA interna
Timeout (ms)Tope de las llamadas de la conexión. Recolección y Entrega usan su propio timeout; la prueba de conexión, 5 s como máximo
Obtener token CSRF antes de grabarActivado por defecto — ver Token CSRF

La vista previa bajo los campos muestra la dirección que las Recolecciones y Entregas van a completar: http://192.168.15.98:7200/sap/opu/odata/sap/<SERVICIO>/....

Complete el mandante. Sin él, SAP usa el mandante predeterminado del sistema. O el usuario no existe ahí y la llamada vuelve 401 — parece contraseña incorrecta —, o, peor, existe en los dos y la integración lee y graba en el mandante equivocado sin ningún error.

La prueba de conexión

/sap/public/ping prueba que el servidor responde, pero no prueba usuario ni mandante: no pide login. Para que la prueba valide los dos, cambie la Ruta de prueba por la raíz de un servicio, por ejemplo /sap/opu/odata/sap/PP_PRODOPS_CONFIRM_SRV/. En ese caso el mensaje dice también la versión OData que SAP declaró.

No es el $metadata a propósito: el Keep Alive corre en cada ciclo, y el $metadata de un servicio grande tiene megabytes. Con varias Aplicaciones en la misma conexión, sale una prueba por ciclo, y quedan ON y OFF juntas.

Autenticación

ModoCuándo usarQué verifica SAP
BasicUsuario técnico (SU01, tipo Sistema). El caso más común en Gateway on-premiseUsuario y contraseña
OAuth 2.0 Client CredentialsGateway expuesto por BTP o por un API ManagementToken del servidor de autorización indicado en la URL del token
Certificado de cliente (X.509)Sin contraseña: el certificado se asigna a un usuario en SAP (SM30, VUSREXTID o regla CERTRULE)Handshake TLS — exige HTTPS

Contraseña, client secret, clave privada y la contraseña de la clave se guardan cifrados y nunca vuelven a la pantalla: al editar, dejarlos en blanco mantiene el actual. Los certificados (el de cliente y el de la CA) son públicos y se muestran normalmente.

La Aplicación

En el registro de Aplicaciones, elija el tipo SAP Gateway y la conexión en el campo de Keep Alive. La URL de la Aplicación aparece bloqueada, con la dirección de la conexión, y cambia sola si la conexión cambia — junto con el destino de sus Entregas. Autenticación y certificados no quedan en la Aplicación.

Con la conexión elegida, la fila de la Aplicación gana el ícono del Asistente de Integración.

Recolecciones y Entregas

TiposUso típico
RecolecciónHTTP_GET, HTTP_POSTGET en un EntitySet (/WorkCenters), POST en una Function Import
EntregaHTTP_POST, HTTP_PUT, HTTP_PATCH, HTTP_DELETECrear, cambiar y borrar entidades. SOAP no aplica

La ruta empieza en /sap/opu/odata/...: el host viene de la conexión. Los parámetros de sistema OData van en los Parámetros Fijos — $format=json (sin él SAP V2 responde en XML), $top, $filter, $select. El sap-client y el sap-language de la conexión se agregan solos; si la ruta o los Parámetros Fijos ya traen un sap-client, vale el de ellos.

Token CSRF

El SAP Gateway rechaza POST, PUT, PATCH y DELETE sin un token CSRF válido, con 403 y el encabezado x-csrf-token: Required. El CMS lo resuelve solo:

  1. antes de la primera escritura, hace un GET en la raíz del servicio de esa llamada con X-CSRF-Token: Fetch y guarda el token y las cookies de la sesión — el token solo vale en la sesión que lo emitió;
  2. las escrituras siguientes en el mismo servicio reutilizan el token (renovado cada 20 minutos);
  3. si SAP rechaza el token (sesión vencida, ICM reiniciado), el CMS pide otro y reintenta una vez. Un segundo 403 es rechazo de verdad y aparece como falla.

La raíz sale de la propia URL — /sap/opu/odata/<namespace>/<SERVICIO> en v2 y /sap/opu/odata4/sap/<grupo>/srvd_a2x/sap/<servicio>/<versión> en v4 —, así que cada servicio tiene su token. Desactive la opción solo para un servicio con la protección desactivada en la SICF.

Otro usuario en una Recolección o Entrega

El usuario de la conexión es el predeterminado. Cuando un servicio exige otro usuario — autorización separada por escenario, o un servicio que necesita un usuario con número de personal —, elija una Credencial de la Aplicación en el campo Credencial de la Recolección o de la Entrega. La primera opción de la lista, De la Conexión SAP Gateway, es la predeterminada.

  • Con una Credencial, solo la autenticación cambia: host, mandante, CA y token CSRF siguen viniendo de la conexión.
  • El token CSRF se guarda por usuario: el de uno no sirve para el otro.
  • Si la conexión usa certificado de cliente (X.509) y la Recolección elige una Credencial, el certificado no va junto — enviar los dos dejaría que SAP decida con qué usuario entrar.

La Credencial se registra en Credenciales, como de salida, en la propia Aplicación SAP Gateway.

Asistente de Integración

El Descubrimiento por URL funciona con la Aplicación SAP Gateway: lee el $metadata del servicio y propone las Recolecciones y Entregas. La URL ya abre como http://host:puerto/sap/opu/odata/sap/ — complétela con el servicio (PP_PRODOPS_CONFIRM_SRV/). El campo Contrato acepta también la URL del $metadata.

La lectura del contrato usa el usuario y el mandante de la conexión (o la Credencial elegida en el asistente), pero solo cuando la URL es el propio servidor de la conexión. Para cualquier otra dirección, la llamada sale sin autenticación y sin seguir redirecciones: de lo contrario, escribir una dirección propia bastaría para recibir el usuario y la contraseña de SAP.

El $metadata describe lo que el servicio anuncia, no lo que la clase del servicio implementa. Es común que un EntitySet anuncie lectura por clave (WorkCenters('...')) y SAP responda 501 “Method ‘WORKCENTERS_GET_ENTITY’ not implemented in data provider class”. La operación hay que cambiarla por la lectura de la lista, o implementarla del lado de SAP.

Cuando falla

La falla de una Recolección o Entrega trae el texto que SAP devolvió, después del estado: “Request failed with status code 501: Method ’…’ not implemented…”.

SíntomaCausa probableDónde mirar
401Usuario o contraseña; usuario inexistente en el mandante (o mandante en blanco)SU01, mandante de la conexión
403 sin x-csrf-token: RequiredUsuario sin autorización para el servicioRol con S_SERVICE del servicio, SU53
404Ruta incorrecta o servicio inactivo/IWFND/MAINT_SERVICE
500 “Access using a ‘ZERO’ service”URL sin el nombre del servicio (.../sap/opu/odata/sap/)Complete la ruta
501 ”… not implemented in data provider class”Operación anunciada en el $metadata pero no programadaCambie la operación, o hable con el equipo SAP
400 “Número de personal no encontrado para el usuario …”Servicio que exige usuario vinculado a un número de personal (apps Fiori de notificación, por ejemplo)Infotipo 0105 del usuario, o use otra Credencial
Timeout en el Keep Alive, junto con la Aplicación RFC del mismo SAPEl servidor SAP dejó de responder por un tiempoSM50/SM66, SM21, SMICM, ST22

Para detalle del lado SAP, la transacción /IWFND/ERROR_LOG guarda cada error del Gateway por el transactionid que aparece en el cuerpo de la respuesta.