Manual Pratico de IDOC ALE e EDI PDF
Manual Pratico de IDOC ALE e EDI PDF
Manual Pratico de IDOC ALE e EDI PDF
IDoc
Manual Prático de ALE/EDI e IDoc
O que é ALE?
SAP ALE (Application Link Enabling) é a tecnologia proprietária que permite a comunicação de dados
entre dois ou mais ambientes SAP R/3 ou R/3 e sistemas de terceiros. A tecnologia ALE facilita rápida
prototipação de aplicação e desenvolvimento de interface de aplicação, e ainda reduz o tempo de
implementação.
Application layer. Esta camada fornece a ALE uma interface para criar ou receber mensagens contendo
dados para/de sistemas externos (ou outra SAP R/3).
Distribution layer (ALE layer). A camada de distribuição filtra e converte mensagens contendo dados
baseados de regras predefinidas ou customizadas. Estas conversões podem ocorrer para assegurar a
compatibilidade entre diferentes releases de R/3 e R/2.
IDoc(Intermediate Document) é documento de texto codificado com uma estrutura rígida que é
usado para troca de dados entre R/3 e sistemas externos. Ao invés de chamar o programa
diretamente no sistema destino, os dados são primeiramente empacotados para um IDoc e
depois o IDoc é enviado para sistema receptor, onde ele é analisado e adequadamente
processado. Por isso a troca de dados via IDoc é sempre um processo assíncrono. A principal
diferença entre uma chamada simples de RFC e a troca de dados via IDoc é, de fato, que cada
ação executada em IDoc é protocolada pelo R/3 e IDocs podem ser reprocessados se algum
erro ocorrer durante um dos passos de mensagem.
Enquanto IDocs são entendidos como protocolo de troca de dados, EDI e ALE são casos
típicos de uso para IDocs. R/3 utiliza IDocs através tanto EDI quanto ALE para distribuir dados
ao sistema receptor. A grande diferença entre EDI e ALE é o seguinte: se eu enviar dados para
um parceiro externo, de forma geral eu estou falando de EDI, enquanto ALE é o mecanismo
para replicar dados de forma confiável entre sistemas de confiança para armazenar cópia
redundante de dados de IDoc. Para esclarecer a diferença ainda mais, podemos pensar um
pedido de compra que é enviado através de um IDoc. Se nós enviarmos um pedido de compra
para o fornecedor então o fornecedor vai armazenar este pedido de compra como uma ordem
de venda. (Isto é o conceito de EDI.) No entanto, se nós enviarmos o pedido de compra via
ALE para outro ambiente R/3, então o sistema receptor vai armazenar o pedido de compra
também como pedido de compra.
Tipo de IDoc e IDoc. Um tipo de IDoc representa a estrutura de dados associada a um tipo de
mensagem, enquanto um IDoc é um objeto contendo os dados de um tipo de mensagem particular. IDoc
é um recipiente de dados com inteligência embutida. Cada IDoc contém um e somente um objeto de
negócio.
Um IDoc consiste três tipos de registro: o registro de controle, registro de dado e registro de status.
• Registro de controle, ou EDI_DC, é uma estrutura de controle que contém vários campos com
as informações sobre o IDoc, tais como o tipo de IDoc, o tipo de mensagem, informação de
sender e de receiver, e a direção (1 para outbound e 2 para inbound). Estas informações
• Registro de dado, ou EDI_DD, ele contém os dados da applicação. Cada registro EDI_DD tem
uma porção de chaves que contêm uma série de campos descrevendo o conteúdo do registro.
Depois das chaves vem o campo SDATA com tamanho de 1000 bytes do tipo “Long Char”. O
campo SDATAguarda os dados da aplicação, e sua estrutura é determinada pelo campo chave
SEGNAM (nome do segmento). Um IDoc consiste um ou mais registros de dado. Registros de
dado são armazenados na tabela EDID4.
No SAP segmentos de IDoc aderem-se convenção de nomenclatura. Cada segmento possui três
componentes, e cada componente com prefixo diferente - E1 para tipo de segmento, E2 para
definição de segmento e E3 para documentação de segmento. Por exemplo, o primeiro segmento
do tipo de IDoc DEBMAS02 é E1KNA1M. Sua definição é contida na estrutura E2KNA1M, e a
documentação está na E3KNA1M. Quando o IDoc é externalizado, vemos o nome do segmento
iniciado com prefixo E2. Na prática, em todos os casos, usamos somente prefixo E2 para se referir
segmentos de IDoc.
• Registro de status, ou EDI_DS. Ele contém informações de estado de IDoc quando IDoc passa
pelo vários estágios de processamento. O registro de status mantém o histórico de um IDoc. Um
IDoc pode ter um ou mais registros de status, onde são armazenados na tabela EDIDS.
Porta. Porta é a representação lógica de canal de comunicação em SAP, com os IDocs sendo os dados
comunicados. São quatro tipos de portas que podem ser definidos em R/3: tRFC, File, R/2, e Internet.
ALE pode utilizar todas os tipos de porta para distribuir IDocs, enquanto EDI tipicamente utiliza a porta
baseada em “file”. As portas tipo tRFC e file podem ser ligadas aos destinos RFC conectados em R/3-
para-R/3 ou TCP/IP.
Destino RFC. O destino RFC é o termo que define as características de comunicação ligado a um
sistema remoto onde uma função precisa ser executada. A comunicação R/3-para-R/3 utiliza
tRFC(transactional RFC). O prefixo transactional indica meramente que uma função específica é
executada por unidade lógica de trabalho, que pode ser Mestre de Material, ou a entrega, ou o
faturamento.
Códigos de Processo. Códigos de processo são usados em ALE e EDI para identificar o módulo de
função ou API para ser chamado e conseqüentemente processado. Cada código de processo é
associado a um tipo de mensagem. Códigos de processo tipo outbound são armazenados na tabela
TEDE1 e códigos de processo tipo inbound são armazenados na tabela TEDE2.
Tipo de parceiro. Tipo de parceiro é um identificador do sistema para comunicar mensagens. Existem
quatro tipos de parceiro: KU (Cliente), LI (Fornecedor), B (Banco) e LS (Sistema Lógico). Tipo de parceiro
define vários elementos de ALE e EDI com os parâmetros de comunicação entre dois ou mais sistemas.
Os principais parâmetros são: tipos de mensagem, tipos de IDoc, códigos de processo, funções parceiro,
identificadores da aplicação, funções de mensagem, tipos de saída e portas.
Tipo de parceiro exerce um papel muito importante pois ele age como um gateway para comunicação
ALE e EDI. Ele transfere mensagens específicas através de tipos de IDoc definidos para a porta depois
da execução de certos módulos de função para processamento outbound. Ele também pode receber tipo
específico de IDoc, e identifica módulos de função apropriados para que insira dados no banco no caso
de interface inbound.
Modelo de distribuição. No sistema R/3, o Modelo de Distribuição é uma ferramenta que armazena
informações sobre o fluxo de dados entre vários sistemas. O modelo de distribuição armazena dados que
informam quais as mensagens (tipos de mensagem) sejam transmitidas para quais Sistemas Lógicos.
Várias mensagens podem ser transmitidas para um Sistema Lógico, e uma única mensagem pode ser
transmitida para vários Sistemas Lógicos.
Texto fonte:
*-------------------*
* Tabelas internas
*-------------------*
DATA: BEGIN OF ti_bank_list OCCURS 0.
INCLUDE STRUCTURE bapi1011_list.
DATA: END OF ti_bank_list.
*-------------------*
* Variáveis globais
*-------------------*
DATA: idoc_control LIKE bdicontrol,
idoc_data LIKE edidd OCCURS 0 WITH HEADER LINE,
idoc_receiver LIKE bdi_logsys OCCURS 0 WITH HEADER LINE,
idoc_comm LIKE edidc OCCURS 0 WITH HEADER LINE,
syst_info LIKE syst.
*----------------*
* Processamento
*----------------*
*-------------------*
* Seleção de dados
*-------------------*
LOOP AT receivers.
CLEAR: syst_info.
* distribute idocs *
REFRESH: idoc_receiver, idoc_comm.
APPEND receivers TO idoc_receiver.
IF sy-subrc <> 0.
MESSAGE ID sy-msgid TYPE sy-msgty NUMBER sy-msgno
WITH sy-msgv1 sy-msgv2 sy-msgv3 sy-msgv4
RAISING error_creating_idocs.
ENDIF.
IF communication_documents IS REQUESTED.
LOOP AT idoc_comm.
CLEAR communication_documents.
communication_documents-objtype = 'IDOC'.
communication_documents-objkey = idoc_comm-docnum.
communication_documents-logsys = idoc_comm-rcvprn.
communication_documents-describe = space.
APPEND communication_documents.
ENDLOOP.
ENDIF.
ENDLOOP.
COMMIT WORK.
ENDFUNCTION.
*---------------------------------------------------------------------*
* FORM inserir_segmento_banklist *
*---------------------------------------------------------------------*
* Criar IDoc data-record *
*---------------------------------------------------------------------*
FORM inserir_segmento_banklist
TABLES
ti_bank_list STRUCTURE bapi1011_list
idoc_data STRUCTURE edidd.
LOOP AT ti_bank_list.
CLEAR ze1banklist.
MOVE-CORRESPONDING ti_bank_list TO ze1banklist.
ENDFORM.
9º passo: Atribuir módulo de função a tipo de mensagem e de IDoc através da transação WE57:
Módulo: ZALE_GET_BANKLIST
Categoria: F
Tp.básico: ZID_BANKLIST
Tipo mensagem: ZMG_BANKLIST
Direção: 1
Salvar.
10º passo: Identificar o sistema lógico do próprio mandante através dos seguintes passos:
Transação: SALE
Abrir a opção:
Preparar sistema receptor e de envio
Instalar sistemas lógicos
Atribuir sistema lógico a mandante
Double-click na linha onde está o mandante do sistema
E descobrir qual o sistema lógico do mandante, no nosso caso é “DEV46”
13º passo: Testar a função para disparar IDoc através da transação SE37:
Função: ZALE_GET_BANKLIST
BANK_CTRY: BR
RECEIVERS: BCDEV46
Executar a função.
Vamos começar o exemplo pela forma mais fácil, a de aproveitar a estrutura existente de BAPI.
4º passo: Atribuir módulo de função a tipo de mensagem e de IDoc através da transação WE57:
Verificar se o tipo básico “BANK_CREATE01” está cadastrado na transação WE57. Caso
contrário, clicar no ícone <Entradas novas>.
Módulo: BAPI_IDOC_INPUT1
Categoria: F
Tp.básico: BANK_CREATE01
Salvar.
5º passo: Identificar o sistema lógico do próprio mandante através dos seguintes passos:
Transação: SALE
Abrir a opção:
Preparar sistema receptor e de envio
Instalar sistemas lógicos
Atribuir sistema lógico a mandante
Double-click na linha onde está o mandante do sistema
E descobrir qual o sistema lógico do mandante, no nosso caso é “DEV46”
2) Suponha que no SAP não existe uma BAPI que satisfaz a necessidade do usuário. Por exemplo, o
SAP precisa receber IDocs para alimentar uma tabela Z.