Skip to Content
IntegraçõesSAPSAP Gateway (OData)

SAP Gateway (OData)

O terceiro caminho para o SAP, e o único que não depende do SDK: o CMS fala HTTP com o ICM do SAP e consome os serviços OData publicados no SAP Gateway (/sap/opu/odata/...). É o caminho natural quando o serviço já existe — os apps Fiori usam os mesmos —, ou quando o time SAP prefere expor OData a liberar RFC.

Ver SAP para comparar com RFC/BAPI e IDoc.

Como se monta

  • A Conexão Externa é o servidor: protocolo, host e porta, mais mandante, autenticação e TLS. Uma conexão atende a todos os serviços daquele servidor.
  • A Aplicação é do tipo SAP Gateway e aparece no grupo SAP em todas as telas, ao lado de RFC e IDoc. A URL dela vem da conexão e fica travada.
  • O caminho do serviço fica em cada Coleta (Caminho da Coleta) e em cada Entrega (URI), exatamente como numa integração HTTP.

Exemplo: conexão http://192.168.15.98:7200, Coleta com o caminho /sap/opu/odata/sap/PP_PRODOPS_CONFIRM_SRV/WorkCenters. A chamada sai para http://192.168.15.98:7200/sap/opu/odata/sap/PP_PRODOPS_CONFIRM_SRV/WorkCenters?sap-client=100.

Configurar a conexão

Em Conexões Externas, tipo SAP Gateway (OData), no grupo SAP.

A conexão é o servidor: protocolo, host, porta, mandante e autenticação — o serviço fica na Coleta e na Entrega
A conexão é o servidor: protocolo, host, porta, mandante e autenticação — o serviço fica na Coleta e na Entrega
CampoPara que serve
ProtocoloHTTP ou HTTPS — o que o ICM expõe naquela porta
HostEndereço do servidor SAP (ou do Web Dispatcher)
PortaPorta do ICM (transação SMICM › Serviços). Em branco, a padrão do protocolo: 443 ou 80
Caminho de teste (Keep Alive)O que o Testar Conexão e o Keep Alive chamam. Vem preenchido com /sap/public/ping
Client (mandante)Vai como sap-client em toda chamada
IdiomaVai como sap-language. Só muda textos e mensagens de erro
AutenticaçãoBasic (usuário técnico), OAuth 2.0 Client Credentials ou Certificado de cliente (X.509)
Certificado CA (PEM)Só para ICM com certificado autoassinado ou de CA interna
Timeout (ms)Teto das chamadas da conexão. Coleta e Entrega usam o timeout delas; o teste de conexão, no máximo 5 s
Buscar token CSRF antes de gravarLigado por padrão — ver Token CSRF

A prévia abaixo dos campos mostra o endereço que as Coletas e Entregas vão completar: http://192.168.15.98:7200/sap/opu/odata/sap/<SERVIÇO>/....

Preencha o mandante. Sem ele, o SAP usa o mandante padrão do sistema. Ou o usuário não existe ali e a chamada volta 401 — parece senha errada —, ou, pior, existe nos dois e a integração lê e grava no mandante errado sem erro nenhum.

O teste de conexão

O /sap/public/ping prova que o servidor responde, mas não prova usuário nem mandante: ele não pede login. Para o teste validar os dois, troque o Caminho de teste pela raiz de um serviço, por exemplo /sap/opu/odata/sap/PP_PRODOPS_CONFIRM_SRV/. Nesse caso a mensagem diz também a versão OData que o SAP declarou.

Não é o $metadata de propósito: o Keep Alive roda a cada ciclo, e o $metadata de um serviço grande tem megabytes. Com várias Aplicações na mesma conexão, sai um teste por ciclo, e elas ficam ON e OFF juntas.

Autenticação

ModoQuando usarOnde o SAP confere
BasicUsuário técnico (SU01, tipo Sistema). O caso mais comum no Gateway on-premiseUsuário e senha
OAuth 2.0 Client CredentialsGateway exposto pelo BTP ou por um API ManagementToken do servidor de autorização informado na URL do token
Certificado de cliente (X.509)Sem senha: o certificado é mapeado a um usuário no SAP (SM30, VUSREXTID ou regra CERTRULE)Aperto de mão TLS — exige HTTPS

Senha, client secret, chave privada e a senha da chave ficam cifrados e nunca voltam para a tela: na edição, deixar em branco mantém o atual. Os certificados (o de cliente e o da CA) são públicos e aparecem normalmente.

A Aplicação

No cadastro de Aplicações, escolha o tipo SAP Gateway e a conexão no campo de Keep Alive. A URL da Aplicação aparece travada, com o endereço da conexão, e muda sozinha se a conexão mudar — junto com o destino das Entregas dela. Autenticação e certificados não ficam na Aplicação.

Com a conexão escolhida, a linha da Aplicação ganha o ícone do Assistente de Integração.

Coletas e Entregas

TiposUso típico
ColetaHTTP_GET, HTTP_POSTGET num EntitySet (/WorkCenters), POST numa Function Import
EntregaHTTP_POST, HTTP_PUT, HTTP_PATCH, HTTP_DELETECriar, alterar e apagar entidades. SOAP não se aplica

O caminho começa em /sap/opu/odata/...: o host vem da conexão. Parâmetros de sistema OData vão nos Parâmetros Fixos — $format=json (sem ele o SAP V2 responde em XML), $top, $filter, $select. O sap-client e o sap-language da conexão entram sozinhos; se o caminho ou os Parâmetros Fixos já trouxerem um sap-client, vale o deles.

Token CSRF

O SAP Gateway recusa POST, PUT, PATCH e DELETE sem um token CSRF válido, com 403 e o cabeçalho x-csrf-token: Required. O CMS resolve isso sozinho:

  1. antes da primeira escrita, faz um GET na raiz do serviço daquela chamada com X-CSRF-Token: Fetch e guarda o token e os cookies da sessão — o token só vale na sessão que o emitiu;
  2. as escritas seguintes no mesmo serviço reaproveitam o token (renovado a cada 20 minutos);
  3. se o SAP recusar o token (sessão expirada, ICM reiniciado), o CMS busca outro e tenta uma vez. Um segundo 403 é recusa de verdade e aparece como falha.

A raiz sai da própria URL — /sap/opu/odata/<namespace>/<SERVIÇO> na v2 e /sap/opu/odata4/sap/<grupo>/srvd_a2x/sap/<serviço>/<versão> na v4 —, então cada serviço tem o seu token. Desligue a opção só para serviço com a proteção desativada na SICF.

Outro usuário numa Coleta ou Entrega

O usuário da conexão é o padrão. Quando um serviço exige outro usuário — autorização separada por cenário, ou um serviço que precisa de usuário com número de pessoal —, escolha uma Credencial da Aplicação no campo Credencial da Coleta ou da Entrega. A primeira opção da lista, Da Conexão SAP Gateway, é o padrão.

  • Com uma Credencial, só a autenticação muda: host, mandante, CA e token CSRF continuam vindo da conexão.
  • O token CSRF é guardado por usuário: o de um não serve para o outro.
  • Se a conexão usa certificado de cliente (X.509) e a Coleta escolhe uma Credencial, o certificado não vai junto — mandar os dois deixaria o SAP decidir com qual usuário entrar.

A Credencial é cadastrada em Credenciais, como de saída, na própria Aplicação SAP Gateway.

Assistente de Integração

A Descoberta por URL funciona com a Aplicação SAP Gateway: ela lê o $metadata do serviço e propõe as Coletas e Entregas. A URL já abre como http://host:porta/sap/opu/odata/sap/ — complete com o serviço (PP_PRODOPS_CONFIRM_SRV/). O campo Contrato aceita também a URL do $metadata.

A leitura do contrato usa o usuário e o mandante da conexão (ou a Credencial escolhida no assistente), mas só quando a URL é o próprio servidor da conexão. Para qualquer outro endereço, a chamada sai sem autenticação e sem seguir redirecionamento: do contrário, digitar um endereço próprio bastaria para receber o usuário e a senha do SAP.

O $metadata descreve o que o serviço anuncia, não o que a classe do serviço implementa. É comum um EntitySet anunciar leitura por chave (WorkCenters('...')) e o SAP responder 501 “Method ‘WORKCENTERS_GET_ENTITY’ not implemented in data provider class”. A operação precisa ser trocada pela leitura da lista, ou implementada do lado do SAP.

Quando dá erro

A falha de uma Coleta ou Entrega traz o texto que o SAP devolveu, depois do status: “Request failed with status code 501: Method ’…’ not implemented…”.

SintomaCausa provávelOnde olhar
401Usuário ou senha; usuário inexistente no mandante (ou mandante em branco)SU01, mandante da conexão
403 sem x-csrf-token: RequiredUsuário sem autorização para o serviçoPapel com S_SERVICE do serviço, SU53
404Caminho errado ou serviço inativo/IWFND/MAINT_SERVICE
500 “Access using a ‘ZERO’ service”URL sem o nome do serviço (.../sap/opu/odata/sap/)Complete o caminho
501 ”… not implemented in data provider class”Operação anunciada no $metadata mas não programadaTroque a operação, ou fale com o time SAP
400 “Nº pessoal não encontrado para usuário …”Serviço que exige usuário ligado a um número de pessoal (apps Fiori de confirmação, por exemplo)Infotipo 0105 do usuário, ou use outra Credencial
Timeout no Keep Alive, junto com a Aplicação RFC do mesmo SAPO servidor SAP parou de responder por um tempoSM50/SM66, SM21, SMICM, ST22

Para detalhe do lado SAP, a transação /IWFND/ERROR_LOG guarda cada erro do Gateway pelo transactionid que aparece no corpo da resposta.