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-apienvia 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/statusconsulta 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:
| Bloco | Campos | Para quê |
|---|---|---|
| Registro no gateway | Gateway host, gateway service, Program ID, SAProuter, trace | É o que o SAP vai procurar |
| Logon de client | Mandante, usuário, senha, idioma, host/instância ou message server | Resolver 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ão | O que faz | Custo |
|---|---|---|
| Testar Login | Abre e fecha a conexão de logon. Não registra nada no gateway | Barato, e nunca deixa conexão presa no SMGW |
| Testar Registro no Gateway | Registro de vida curta: sobe e derruba imediatamente | Exige 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:
- Destino RFC do tipo T (Registrado) no SM59, com o Program ID escolhido.
- Porta WE21 (Transactional RFC) apontando para esse destino.
- Perfil de parceiro WE20 (inbound) para o tipo de mensagem, com código de processo ligado a
IDOC_INBOUND_ASYNCHRONOUS. - Liberação de registro no gateway:
gw/reg_no_conn_infoe as ACLssecinfo/reginfopara o Program ID e o host deste serviço. - 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):
| Filtro | Casa contra | Vazio significa |
|---|---|---|
| Tipo de IDoc | IDOCTYP (ex.: ORDERS05) | Qualquer tipo |
| Tipo de mensagem | MESTYP (ex.: ORDERS) | Qualquer mensagem |
| Parceiro | O parceiro emissor | Qualquer 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.