Skip to Content

SAP IDoc

Requer o SAP NW RFC SDK instalado no servidor — ver SDK do SAP.

O caminho assíncrono, e o único em que é o SAP que chama o CMS. O microserviço cms-idoc-connector registra um RFC Server (node-rfc, classe Server) no gateway SAP e recebe os IDocs enviados. Ver SAP para a visão geral.

Como funciona

O connector é um processo separado do cms-sap-connector porque um RFC Server é um listener de longa duração registrado no gateway, não uma chamada request/response — uma falha ou reinício do listener não pode afetar o client RFC nem a API.

Como qualquer recebimento passivo, ele é orientado a evento: não há agendamento, não há cron. O IDoc chega quando o SAP o envia.

Listeners

  • O cms-api envia a lista completa de listeners desejados (POST /idoc/listeners/sync) — uma entrada por Conexão Externa do tipo SAP IDoc que tenha alguma Coleta ativa usando-a.
  • O connector reconcilia (inicia, para, reinicia registros) e devolve o status de cada um.
  • GET /idoc/listeners/status consulta o estado atual sem esperar o próximo sync.

Um único Program ID é mantido por Conexão Externa. Várias Coletas — tipos de IDoc diferentes — compartilham o mesmo listener; é o cms-api que decide para quais encaminhar cada IDoc recebido.

Configurar a conexão

Na Conexão Externa SAP, o bloco de IDoc pede duas coisas de naturezas diferentes:

BlocoCamposPara quê
Registro no gatewayGateway host, gateway service, Program ID, SAProuter, traceÉ o que o SAP vai procurar
Logon de clientMandante, usuário, senha, idioma, host/instância ou message serverResolver os metadados da function module

O logon de client parece redundante — o registro em si não pede usuário e senha. Mas o Server do node-rfc não registra nada no gateway sem antes abrir essa conexão, que ele usa para resolver a interface de IDOC_INBOUND_ASYNCHRONOUS. Sem ela, o listener não sobe.

Os dois botões de teste

BotãoO que fazCusto
Testar LoginAbre e fecha a conexão de logon. Não registra nada no gatewayBarato, e nunca deixa conexão presa no SMGW
Testar Registro no GatewayRegistro de vida curta: sobe e derruba imediatamenteExige SM59/WE21/ACL já configurados do lado do SAP

Use o primeiro para validar credencial e alcance de rede; o segundo só depois que o Basis tiver feito a parte dele.

O que precisa existir do lado do SAP

Esta é a parte que costuma travar uma implantação, e ela não é feita no CMS. Leve esta lista ao Basis:

  1. Destino RFC do tipo T (Registrado) no SM59, com o Program ID escolhido.
  2. Porta WE21 (Transactional RFC) apontando para esse destino.
  3. Perfil de parceiro WE20 (inbound) para o tipo de mensagem, com código de processo ligado a IDOC_INBOUND_ASYNCHRONOUS.
  4. Liberação de registro no gateway: gw/reg_no_conn_info e as ACLs secinfo / reginfo para o Program ID e o host deste serviço.
  5. Confirmação da estrutura da interface (EDI_DC40 / EDI_DD40), que varia entre ECC e S/4HANA.

O item 4 é o mais esquecido. Sem a ACL do gateway, o registro falha com um erro de segurança que não menciona ACL nenhuma — e o tempo se perde procurando no lugar errado.

Coleta — SAP_IDOC

Na Coleta você define para quais IDocs desta conexão esta interface serve. Os filtros são aplicados sobre o registro de controle (EDIDC):

FiltroCasa contraVazio significa
Tipo de IDocIDOCTYP (ex.: ORDERS05)Qualquer tipo
Tipo de mensagemMESTYP (ex.: ORDERS)Qualquer mensagem
ParceiroO parceiro emissorQualquer parceiro

Várias Coletas podem compartilhar a mesma conexão, cada uma com seu recorte. Um IDoc que casa mais de um filtro é encaminhado para todas as Coletas que o aceitam — o que permite, por exemplo, uma Coleta específica de um parceiro e outra genérica de auditoria.

O formato da mensagem

Cada IDoc chega agrupado por DOCNUM, com o registro de controle (EDIDC) e os segmentos de dados (EDIDD). O Transformador da Coleta recebe esse conjunto inteiro e decide o que virar mensagem — tipicamente achatando os segmentos que interessam.

Modo de desenvolvimento

Sem SAP_IDOC_CLIENT=real, o connector sobe com um servidor fake: nunca registra nada no gateway e aceita POST /idoc/simulate para injetar um IDoc de teste no mesmo caminho que um IDoc real seguiria. É como se testa a configuração de Coleta, o Transformador e o encaminhamento sem acesso a um SAP.

A instalação do SDK é a mesma do RFC client, com SAP_IDOC_CLIENT=real no lugar de SAP_RFC_CLIENT.

Monitorar

Configure o alerta Conexão Perdida para as Coletas de IDoc. Como o recebimento é passivo, um listener caído é silencioso: não gera erro, apenas para de chegar IDoc. Sem o alerta, a parada só aparece quando alguém sente falta do dado. Ver Alertas.

O estado do listener também aparece no Painel de Aplicações, quando a Aplicação usa keep-alive do tipo SAP IDoc.