Guía para Creación de IDOCS – dbgb 2016
GUIA IDOCS
Conceptos Básicos: Muchas veces una empresa requiere seguir utilizando otro sistema que
realiza determinada función, para integrarlo al sistema SAP generalmente utilizamos las
tecnologías ALE y EDI, que utilizan IDocs (Contenedor de Datos) para el intercambio de datos.
EDI (Intercambio Electrónico de Documentos): Es un estándar de comunicación que describe el
intercambio electrónico de datos estructurados comerciales (documentos, órdenes de compra,
pedidos, facturas, etc.) entre diferentes aplicaciones. El receptor y emisor son llamados
Trading Partners, estos se envían mensajes basados en los estándares EDITFACT (reglamenta
los formatos de los mensajes) y X12 (Estándares de procesos de negocio).
Arquitectura:
Aplicaciones EDI-Enable: Soportan el procesamiento automático de procesos de
negocio.
Interfaz IDoc: Es el nexo entre la aplicación y el sistema externo (envío/recepción).
Subsistema EDI: Es el encargado de convertir el IDoc en un mensaje EDI y viceversa.
ALE (Application Link Enable): Es una tecnología SAP que describe el intercambio de
información entre diferentes aplicaciones o procesos de negocio dentro de la compañía, define
cuando, entre quienes y qué tipo de información, está diseñado especialmente para
intercambiar entre sistemas SAP pero debido a su flexibilidad también puede comunicarse con
sistemas externos.
Nota: Dos sistemas pueden directamente intercambiar IDocs entre sí por medio de ALE o de
subsistemas EDI, o convertir datos a los estándares EDI y luego intercambiarlos.
IDoc (Intermediate Document): Es el formato estándar que SAP define para el intercambio de
datos entre sistemas. Se puede ver como un archivo de texto plano, con registros, contiene
una cabecera y posiciones, todos los registros pertenecen a una misma entidad, se necesita un
IDoc para cada Entidad. Es orientado a mensajes y asincrónico. Pueden ser de Entrada (que
entran a SAP) o de Salida (que salen de SAP).
Estructura de un IDoc: Consiste en varios segmentos y cada uno de estos en una secuencia de
campos, un tipo de IDoc define la sintaxis de los datos al especificar la organización de los
segmentos, atributos y formatos de cada campo. Está compuesto por tres tipos de registro:
Registro de Control: Información sobre origen, receptor, tipo de IDoc, se guardan en la
tabla EDIDC y su clave es el número de IDoc (campo DOCNUM).
Registro de Datos: Se guardan en la tabla EDID4 en un campo de 1000 caracteres.
Registro de Status: Informa los diferentes status por el que pasa el mensaje, tabla
EDIDS.
Guía para Creación de IDOCS – dbgb 2016
Transacción WEDI
Pasos para crear un IDoc:
1. Crear los Segmentos (WE31), el tipo IDoc (WE30) y el tipo Mensaje (WE81).
2. Asignar el tipo IDoc al tipo Mensaje (WE82).
3. Asignar el tipo Mensaje al Objeto de Aplicación o Modulo de Función (WE57).
4. Programar los módulos de función de actualización o generación de IDocs (E/S).
5. Definir los Códigos de Procesos y asignar los módulos de función creados.
6. Actualizar el Modelo de Distribución y el Acuerdo de Interlocutores.
7. Visualizar la Documentación de IDocs (WE60, WE61, WE62, WE64).
Guía para Creación de IDOCS – dbgb 2016
Segmento de Datos: Es un registro o estructura que define el formato de los datos, un IDoc
puede tener definidos varios segmentos de datos, podemos visualizarlos a través de SE11, esta
estructura puede ser jerárquica o no.
Pasos para crear un Segmento:
1. Vamos a WE31, ingresamos un nombre de segmento, debe comenzar con Z1 y
presionamos crear.
2. Introducimos una descripción breve y los campos, tipos de datos, etc., tildamos el
checkbox Segmento Calificado.
3. Presionamos Grabar y se asignan personas responsables y el sistema asigna un nombre
a la definición comenzando con Z2.
4. Al terminar vamos hacia atrás y en el menú->tratar->Fijar Liberación.
Guía para Creación de IDOCS – dbgb 2016
Tipo Base o Tipo IDoc: Define la estructura de los datos de aplicación, segmentos, orden,
jerarquía, repeticiones, podemos crearla y verla desde WE30.
Pasos para crear un tipo base:
1. Vamos a WE30, ingresamos nombre, debe comenzar con ZTB, seleccionamos tipo base
y hacemos clic en botón crear.
2. Vamos a Crear Nuevo, ingresamos descripción y continuar.
3. Nos colocamos sobre el IDoc y hacemos clic en Crear Segmento.
4. Ingresamos tipo de Segmento (Z1**) y atributos (Ej. min rep. 1 – max rep. 999).
5. Finalmente guardamos y vamos hacia atrás y en el menú->tratar->Fijar Liberación.
Tipo de Mensaje: Es una vista del tipo IDoc (tipo base). Representa el Objeto del Negocio,
podemos crearlo o visualizarlo a través de WE81, presionamos el botón modificar y luego el de
Entradas nuevas, asignamos un nombre, descripción y guardar.
Guía para Creación de IDOCS – dbgb 2016
WE82: Asignar el tipo IDoc al tipo Mensaje.
WE57: Asignar el tipo Mensaje al Objeto de Aplicación o Modulo de Función E/S según caso.
BD54: Crear y modificar Sistemas Lógicos, hacemos una entrada nueva.
Acuerdo de Interlocutor: Acuerdo entre emisor y receptor sobre la sintaxis y semántica de los
datos a intercambiar, se definen el tipo de IDoc, tipo de mensaje, nombre del emisor (cuando
es de entrada), nombre del receptor (cuando es de salida), puerto, etc.
Para crear un Acuerdo de
Interlocutor vamos a
WE20, estos deben
definirse en cada
mandante y sistema donde
se ejecuten los IDocs, se
crea un nodo de
Interlocutores EDI, se
agrega el tipo mensaje,
agregando un registro.
Guía para Creación de IDOCS – dbgb 2016
Modelo de Distribución: Es una vista donde se define la distribución de los datos maestros.
Definen la relación entre sistemas lógicos, tipos de mensaje, BAPIs y filtros, las aplicaciones y la
capa ALE usan el modelo de distribución, los escenarios de distribución definen los tipos de
IDocs y los interlocutores, el modelo debe ser mantenido por un solo sistema y se crearan
distintos escenarios por cada administrador de este.
Pasos para crear un Modelo de Distribución:
1. Vamos a BD64, y luego a la opción del menú->Modelo de Distribución->Cambiar modo
de tratamiento.
2. Presionamos botón Crear Vista Modelo.
3. En la ventana de dialogo introducimos descripción y nombre técnico.
4. En el registro recién creado presionamos botón Insertar tipo mensaje.
5. En la ventana de dialogo introducimos sistema lógico emisor, sistema lógico receptor y
tipo mensaje (único para cada modelo de distribución).
6. Finalmente es creado.
Destino RFC: Para enviar un IDoc vamos a SM59 y creamos un destino RFC de tipo TCP/IP,
especificando el servidor y puerto TCP destino.
Puerto: Es un nombre lógico para un dispositivo de entrada/salida, tiene asignado un número,
se configuran a través de WE21, los más comunes son:
Ficheros: para ser almacenados en un directorio en el servidor de aplicaciones, se
recomienda usar un nombre dinámico con el módulo de función
EDI_PATH_CREATE_CLIENT_DOCNUM.
Ficheros XML: definimos el nombre del puerto, el formato del XML y el nombre del
archivo a generar, se recomienda usar un nombre dinámico con el módulo de función
EDI_PATH_CREATE_CLIENT_DOCNUM.
XML-HTTP: en vez del nombre del XML, se especifica un destino RFC.
ABAP: entre el mismo sistema SAP.
Para IDOCS de Salida se requiere sistema receptor, el puerto, el tipo base, forma en que se
genera el mensaje, y en que modalidad se procesa, no requiere emisor ya que el acuerdo se
determina desde el sistema donde se emite.
Para IDOCS de Entrada se requiere sistema emisor, el mensaje lógico, el process code y la
función que procesa la entrada.
Guía para Creación de IDOCS – dbgb 2016
IDocs de Salida: Se pueden generar mediante las siguientes Interfaces:
Output Types (Documentos de Negocio o Transaccionales como pedidos o facturas).
Punteros de Modificación (Datos Maestros)
Programa Extractor Estándar (Datos Maestros)
Programa Extractor Z (Datos Maestros)
Output Types:
1. Se define un Output Message, configurado como salida ALE/EDI.
2. Se asocia el mensaje al documento que desea enviarse.
3. Se configura el mensaje de logística en el Acuerdo de Interlocutores.
Pasos para Configurar Mensaje:
1. Identificamos el Tipo Mensaje.
2. Definimos código de Proceso de Salida.
3. Definimos puerto de salida y forma de envío.
4. Definimos la función de la puerta ABAP (en caso que sea necesario).
Códigos de Proceso de Salida: Es el código que convierte el documento a formato IDoc,
asociado a un módulo de función que lo ejecuta, pueden ser de tipo estándar o Z definidos en
WE41.
Punteros de Modificación: Se utilizan para enviar o duplicar datos maestros, utilizamos las
siguientes transacciones:
BD61: Para Activar Punteros de Modificación.
BD50: Activar Punteros de Modificación para Tipo Mensaje.
BD52: Generar Punteros de Modificación.
BD60: Crear Relación entre Tipo Mensaje y Modulo de Función.
BD21: Seleccionar Punteros de Modificación.
BD22: Borrar Punteros de Modificación.
BD40: Leer Punteros de Modificación para grupos.
Pasos para crear un módulo de función Z:
1. Leer los Punteros de Modificación generados utilizando la función
CHANGE_POINTERS_READ.
2. Analizar los Punteros de Modificación y determinar documentos válidos.
3. Determinar clave del documento.
4. Seleccionar datos utilizando la clave.
5. Completar el registro de control del IDoc.
6. Completar tabla interna con estructura EDIDD.
7. Llamar al servicio MASTER_IDOC_DISTRIBUTE para crear los datos en bd.
8. Actualizar estado de los Punteros de Modificación.
9. Ejecutar COMMIT_WORK.
10. Ejecutar el IDoc a través del programa estándar RBDMIDOC.
Guía para Creación de IDOCS – dbgb 2016
Programas de Extracción Estándar: Se utilizan para enviar a los sistemas receptores, datos
maestros en forma masiva. Algunos son:
BD10 (Maestro de Materiales).
BD12 (Maestro de Clientes).
BD14 (Maestro de Proveedores).
Programas de Extracción Z: Podemos crear nuestros propios programas extractores a través
del módulo MASTER_IDOC_DISTRIBUTE, se debe actualizar el Modulo de Distribución y el
Acuerdo de Interlocutores.
Pasos para crear un IDoc de salida desde un programa:
1. Seleccionar los datos de la base de datos de acuerdo a los parámetros.
2. Completar el registro de control del IDoc.
3. Completar tabla interna con estructura EDIDD.
4. Llamar al servicio MASTER_IDOC_DISTRIBUTE para crear los datos en bd.
5. Ejecutar COMMIT_WORK.
6. Enviar el IDoc a través del programa estándar RSEOUT00.
* DECLARACION DE DATOS
DATA:
c_message_type LIKE edidc-mestyp VALUE 'ZINVRV', "Tipo Mensaje
c_base_idoc_type LIKE edidc-idoctp VALUE 'ZINVRV01',"Tipo de Idoc
c_invrev_segname(7) TYPE C VALUE 'Z1INVRV', "Nombre Segmento
c_rcvprn LIKE edidc-rcvprn VALUE 'SAPBCD', "Interloc. Destinat
IDOC_CONTROL LIKE EDIDC,
T_COMM_CONTROL LIKE EDIDC OCCURS 0 WITH HEADER LINE,
IDOC_DATA LIKE EDIDD OCCURS 0 WITH HEADER LINE.
* CAMPOS DE CONTROL DEL IDOC
idoc_control-doctyp = c_message_type. "Tipo Mensaje
idoc_control-mestyp = c_message_type. "Tipo Mensaje
idoc_control-idoctp = c_base_idoc_type. "Tipo de Idoc
idoc_control-serial = space.
idoc_control-direct = '1'. "Si el IDOC es de salida 1, si es de entrada 2
idoc_control-serial = sy-datum.
idoc_control-serial+8 = sy-uzeit.
idoc_control-rcvprn = c_rcvprn "Nro Interlocutor Destinatario
idoc_control-rcvprt = 'LS' "Tipo interlocutor destinatario
APPEND idoc_control.
* CAMPOS DE DATOS DEL IDOC
* Esta sección la repite una vez por cada registro de datos a insertar
* en el IDoc.
* Indica cuál es el tipo de segmento
IDOC_DATA-SEGNAM = C_INVREV_SEGNAME. "Nombre Segmento
* Completa los datos de la estructura del segmento
CLEAR Z1INVRV.
Z1INVRV-CAMPO_01 = VALOR_01
...
...
...
Z1INVRV-CAMPO_NN = VALOR_NN
Guía para Creación de IDOCS – dbgb 2016
* Mueve la estructura con los datos del segmento al único campo de datos.
IDOC_DATA-SDATA = Z1INVRV. "Datos del Segmento
* Inserta el registro actual a la tabla interna de datos del Idoc
APPEND IDOC_DATA.
*--- Call the distribute function with the required parameters
CALL FUNCTION 'MASTER_IDOC_DISTRIBUTE'
EXPORTING
MASTER_IDOC_CONTROL = IDOC_CONTROL
TABLES
COMMUNICATION_IDOC_CONTROL = T_COMM_CONTROL
MASTER_IDOC_DATA = IDOC_DATA
EXCEPTIONS
ERROR_IN_IDOC_CONTROL =1
ERROR_WRITING_IDOC_STATUS =2
ERROR_IN_IDOC_DATA =3
SENDING_LOGICAL_SYSTEM_UNKNOWN = 4
OTHERS = 5.
IF SY-SUBRC EQ 0.
COMMIT WORK.
ENDIF.
Configuración General para IDocs de Salida:
1. Creamos los sistemas lógicos a través de BD54. Hacemos clic en Nuevas Entradas (Ej.
NSP100000 y NSP500000).
2. Asignamos los sistemas lógicos a los mandantes a través de SCC4. (Ej. Seleccionamos el
001, modificar, luego seleccionamos ver detalles, y agregamos el sistema lógico NSP1 y
al mandante 066 asignamos NSP5).
3. Creamos un destino lógico a través de SM59. (Ej. Seleccionamos Conexión ABAP y
creamos, la llamamos NSP200000).
4. Creamos los Puertos a través de WE21. (Ej. Seleccionamos RFC transaccional y creamos
puerta propia, la llamamos A000000003 y asignamos el RFC NSP200).
5. Finalmente Creamos el Acuerdo de Interlocutores para los sistemas lógicos creados a
través de WE20. Para el Acuerdo NSP5#####, crear los parámetros de salida utilizando,
el tipo de mensaje, puerto y tipo base previamente creados, seleccionamos la opción
transferir iDocs inmediatamente y grabamos.
IDocs de Entrada: El proceso es muy parecido al de los IDocs de Salida, los visualizamos
en WE02, pueden ser creados de diferentes formas:
Por un middleware que envía al puerto entrante el mensaje en formato IDoc.
Por un archivo con formato IDoc que es procesado por el módulo de función
EDI_DATA_INCOMING.
El trabajo del programador se reduce a:
1. Configurar los IDocs de entrada.
2. Definir un código de proceso de entrada.
3. Definir el Acuerdo de Interlocutores de entrada.
Guía para Creación de IDOCS – dbgb 2016
Configurar IDocs de Entrada: A través de la transacción BALD (Desarrollo ALE), dentro de las
carpetas IDOC/Proceso de entrada/Módulo de funciones accedemos a:
Actualizar Atributos del módulo de función que procesara el IDoc, agregarlo a la lista
(BD51).
Asignación del tipo base-tipo mensaje-función de proceso (WE57).
Definir Código de Proceso de Entrada: Generará el documento de aplicación (WE42), se define
si ejecutara un módulo de funciones, otro código de operación o una tarea de workflow, si se
utilizan servicios ALE o no.
Acuerdo de Interlocutores de Entrada: Debe actualizarse para cada IDoc de entrada, en cada
sistema receptor. Vamos a WE20 seleccionamos el sistema emisor y agregamos parámetro de
entrada, debemos definir:
Tipo Mensaje a recibir.
Tipo de Objeto.
Opciones de Entrada: el código de proceso y la forma (lanzamiento inmediato o por
medio un programa de fondo)
Testing de IDocs: Vamos a WEDI, Directorio->Test, y tenemos:
Herramienta test (WE19): Para IDocs de entrada o salida, se testea la conexión y el
código de proceso.
Proc. salida desde NAST (tabla estándar status) WE15: Enviar IDoc que quedó
acumulado en la pila de salida (tabla NAST).
Proc. salida desde IDOC (WE14): Podemos reenviar un IDoc con status diferente a 53
(Procesado Correctamente) o reprocesarlo.
Crear fichero status (WE18).
Procesar fichero status (WE17).
Proc. [Link] (WE12).
[Link]. (WE16).
WE61 (Ver Status de IDocs): Los Status par los IDocs salientes están entre 01 y 49 y los
entrantes se inician en 50.
WE02 y WE05: Listado y Visualización de IDocs.
BD87: Reprocesar IDocs que quedaron con Error.
Guía para Creación de IDOCS – dbgb 2016
Ejemplo IDoc de Entrada:
Luego de Seguir los pasos iniciales para Crear un IDoc que vimos al principio:
1. Crear los Segmentos (WE31), el tipo IDoc (WE30) y el tipo Mensaje (WE81).
2. Asignar el tipo IDoc al tipo Mensaje (WE82).
3. Asignar el tipo Mensaje al Objeto de Aplicación o Modulo de Función (WE57).
Creamos tabla clase A en ambiente receptor:
Creamos el módulo de funciones para tratar el IDoc, al crearlo con el nombre que definimos anteriormente en la
tx.WE57, lo hacemos tipo copia de IDOC_INPUT_MATMAS01, borramos el código y colocamos el nuestro:
FUNCTION Z_FUNCION_IDOC_DOCMAT.
SORT IDOC_DATA BY DOCNUM.
SORT IDOC_CONTRL BY DOCNUM.
DATA : T_EDIDD TYPE STANDARD TABLE OF EDIDD, "Data Record
T_EDIDC TYPE STANDARD TABLE OF EDIDC, "Control Record
T_EDIDS TYPE STANDARD TABLE OF BDIDOCSTAT. "Status Record
*----------*Global Work Area Declarations *------------------------*
DATA : W_EDIDC LIKE EDIDC,
W_EDIDD TYPE EDIDD,
W_EDIDS TYPE BDIDOCSTAT.
DATA: W_IDOC_DATA TYPE EDIDD.
DATA : L_INDX TYPE SYTABIX.
DATA: IT_1DOCMAT TYPE TABLE OF z1DOCMAT. "referente al segmento
DATA : WA_1DOCMAT TYPE z1DOCMAT.
DATA : ERROR_MESSAGE TYPE STRING.
DATA : T_DOCMAT TYPE TABLE OF ZDOCMAT. "referente a la tabla
DATA : W_DOCMAT TYPE ZDOCMAT.
DATA : ERROR_FLG TYPE CHAR1.
Guía para Creación de IDOCS – dbgb 2016
* Go through all IDocs
LOOP AT IDOC_CONTRL.
CLEAR W_EDIDC.
W_EDIDC = IDOC_CONTRL.
READ TABLE IDOC_DATA INTO W_IDOC_DATA WITH KEY DOCNUM = IDOC_CONTRL-DOCNUM BINARY
SEARCH.
IF SY-SUBRC = 0.
L_INDX = SY-TABIX.
LOOP AT IDOC_DATA FROM L_INDX.
IF IDOC_DATA-DOCNUM = IDOC_CONTRL-DOCNUM.
APPEND IDOC_DATA TO T_EDIDD.
CLEAR IDOC_DATA.
ELSE.
RETURN.
ENDIF.
ENDLOOP.
ELSE.
CONTINUE.
ENDIF.
SORT T_EDIDD.
CLEAR W_EDIDD.
LOOP AT T_EDIDD INTO W_EDIDD.
IF W_EDIDD-SEGNAM = 'Z1DOCMAT'.
CLEAR WA_1DOCMAT.
WA_1DOCMAT = W_EDIDD-SDATA.
IF WA_1DOCMAT IS NOT INITIAL.
APPEND WA_1DOCMAT TO IT_1DOCMAT .
ENDIF.
CONTINUE.
ENDIF.
ENDLOOP.
IF IT_1DOCMAT IS NOT INITIAL. "if data is there in segement
LOOP AT IT_1DOCMAT INTO WA_1DOCMAT.
MOVE-CORRESPONDING WA_1DOCMAT TO W_DOCMAT.
MODIFY ZDOCMAT FROM W_DOCMAT. "update data base table
IF SY-SUBRC <> 0.
ERROR_FLG = 'X'.
ERROR_MESSAGE = 'Error occured in updating ZSTUDENT table'.
ENDIF.
ENDLOOP.
ENDIF.
IF ERROR_FLG = 'X'. "add error status to IDOC
IDOC_STATUS-STATUS = '51'.
IDOC_STATUS-DOCNUM = W_EDIDC-DOCNUM.
IDOC_STATUS-MSGTY = 'E'.
IDOC_STATUS-MSGID = '00'.
IDOC_STATUS-MSGNO = '398'.
IDOC_STATUS-MSGV1 = ERROR_MESSAGE+0(25). "t_return_ecm-message
IDOC_STATUS-MSGV2 = ERROR_MESSAGE+25(25).
IDOC_STATUS-MSGV3 = ERROR_MESSAGE+50(25).
IDOC_STATUS-MSGV4 = ERROR_MESSAGE+75(25).
CLEAR ERROR_MESSAGE.
APPEND IDOC_STATUS TO IDOC_STATUS .
CLEAR IDOC_STATUS .
else. "add success status to IDOC
IDOC_STATUS-STATUS = '53'.
IDOC_STATUS-DOCNUM = W_EDIDC-DOCNUM.
APPEND IDOC_STATUS TO IDOC_STATUS .
CLEAR IDOC_STATUS .
ENDIF.
ENDLOOP.
ENDFUNCTION.
Nota: Luego vamos a la BD51, nueva entrada, colocamos nuestro módulo de funciones, en input = 1 y grabamos.
Guía para Creación de IDOCS – dbgb 2016
Creamos el Process Code en la tx. WE42. Modificar->Nueva Entrada, lo guardamos en una OT customizing.
Chequeamos el acuerdo de interlocutores en tx. WE20. Y en nuestro partner emisor, configuramos una nueva
entrada inbound.
Testeamos nuestro IDoc:
Vamos a la tx. WE19, y buscamos por nuestro Tipo Base creado
Le damos doble clic sobre el segmento y se abre un pop-up para ingresar los datos simulando el registro del IDoc de
entrada.
Guía para Creación de IDOCS – dbgb 2016
Vamos a tx. WE09 para ver el estatus de nuestro IDoc, con el número de IDoc generado, como vemos estatus 53
exitoso.
Finalmente entramos a tx. SE11 y vemos que se insertó el registro proveniente del IDoc en la tabla ZDOCMAT
Guía para Creación de IDOCS – dbgb 2016
Ejercicio Completo envío y recepción de IDoc:
Step1: Create a client dependent custom table ZSTUDENTS.
Go to SE11, provide name as ZSTUDENTS and click on create.
Provide delivery class and display maintenance.
Add fields as below.
Click on technical settings.
Provide data class, size category and save.
Guía para Creación de IDOCS – dbgb 2016
Step2: Go to WE31 and create a segment as below.
Go to t-code WE31, provide segment as ZSTUDENT and click on create.
Just click enter if you find any information message and add fields as below.
Save it in a local object.
Step3: Create IDOC type.
Go to WE30, provide name as ZSTUDENT and click on create.
Provide description and press enter.
Guía para Creación de IDOCS – dbgb 2016
Select ZSTUDENT and click on create.
Provide a segment name (which we have created in step2), maximum and minimum numbers and enter.
Save it in a local object.
Step4: Create a message type.
Go to t-code WE81 and click on change icon.
Provide message type as ZSTUDENT and description.
Step5: Assign message type to IDOC type.
Go to t-code WE82, click on change and click on new entries.
Provide message type, IDOC type and release as below.
Save it in a transport request.
Step6: Define logical system.
Guía para Creación de IDOCS – dbgb 2016
This is the most confusing step in ALE configurations, try to understand carefully.
What is logical system?
'Logical system' is used to identify an individual client in a system, for ALE communication between SAP systems. That's why you
see a field for 'logical system' in the client master data in SCC4 (table T000). You use logical systems in ALE configuration - this
should be documented further in the IMG guide, or SALE transaction
Before creating a logical system please follows below steps.
In a blind way logical system asigned in target system client(in our example 810 client) should be in logical system defination in
source client.
Step1: Go to target system( In our example 810 client).
(Get logical system from t-code SALE ->Basic Settings ->Logical Systems -> assign logical system to client -> 810 (double click
and copy logical system)).
Step2: Go to SALE.
Expand basic settings -> define logical system.
Check for logical system existance(which we get from 810 client) if it is there, no need to add, if it is not there add it.
Step7: Assign logical system to client.
Guía para Creación de IDOCS – dbgb 2016
For now skip this.
Create RFC destination .
Go to T-code SM59, select ABAP connections and click on create.
Provide RFC destination, description, hostname and system number.
Click on logon and security tab, provide client, user name, password and save.
Click on connection test to test connection.
Guía para Creación de IDOCS – dbgb 2016
Click on remote logon to logon to remote client(you will go to 810 client).
Step9: Create PORT in WE21 .
Go to t-code WE21, select transactional RFC and click on create.
Select generate port name and enter.
Guía para Creación de IDOCS – dbgb 2016
Provide RFC destination, which we created in step8.
Save.
Step10: Check partner profiles in WE20.
Go to WE20, expand partner type logical system and search for logical system (Get logical system from t-code SALE ->Basic
Settings ->Logical Systems -> assign logical system to client -> 810 (double click and copy logical system)).
If logical system is already available in partner profiles in WE20, we don`t need to create partner profile again instead we will add
message type at out bound parameters level. In my case, logical system is already available in partner profiles so I will add
ZSTUDENT message type to it. To add message type, select logical system, click on add icon (see below image).
Provide message type, receiver port (which we have created in step9), select transfer IDOC immediately, basic type and save.
Guía para Creación de IDOCS – dbgb 2016
If logical system is not available in partner profile in WE20, select partner type logical system and click on create.
Provide partner no as T90CLNT810 (Get logical system from t-code SALE ->Basic Settings ->Logical Systems -> assign logical
system to client -> 810 (double click and copy logical system). Save and add message type at out bound partner level.
Steps to be done in 810 client
Continue 1 - 7 steps as same as 800 client.
Step8: Create inbound function module.
Every inbound IDOC will have process code, every process code is associated with a inbound process ex: Function Module or Work
Flow Task.
Follow below steps to create inbound function module.
1. Create a function group in SE80.
2. Copy Function module IDOC_INPUT_MATMAS01.
3. Add your own code.
Step1: Go to SE80, select function group, provide a name ZSTUDENT_IDOC, enter.
Save and activate function group.
Step2: Go to SE37, provide function module name as IDOC_INPUT_MATMAS01, click on copy, provide function module name
as function group and enter.
Guía para Creación de IDOCS – dbgb 2016
Step3:Add your own code in function module. Go to Se37, provide name as ZSAPN_IDOC_INPUT_STUDENT, click on change.
Remove all code and add below code.
FUNCTION ZSAPN_IDOC_INPUT_STUDENT.
*"----------------------------------------------------------------------
*"*"Local Interface:
*" IMPORTING
*" VALUE(INPUT_METHOD) LIKE BDWFAP_PAR-INPUTMETHD
*" VALUE(MASS_PROCESSING) LIKE BDWFAP_PAR-MASS_PROC
*" VALUE(NO_APPLICATION_LOG) LIKE SY-DATAR OPTIONAL
*" VALUE(MASSSAVEINFOS) LIKE MASSSAVINF STRUCTURE MASSSAVINF
*" OPTIONAL
*" VALUE(KZ_TEST) LIKE MDAT1-KZ_TEST DEFAULT SPACE
*" VALUE(ONLY_MAPPING) LIKE MDAT1-KZ_TEST DEFAULT SPACE
*" EXPORTING
*" VALUE(WORKFLOW_RESULT) LIKE BDWF_PARAM-RESULT
*" VALUE(APPLICATION_VARIABLE) LIKE BDWF_PARAM-APPL_VAR
*" VALUE(IN_UPDATE_TASK) LIKE BDWFAP_PAR-UPDATETASK
*" VALUE(CALL_TRANSACTION_DONE) LIKE BDWFAP_PAR-CALLTRANS
*" TABLES
*" IDOC_CONTRL STRUCTURE EDIDC
*" IDOC_DATA STRUCTURE EDIDD
*" IDOC_STATUS STRUCTURE BDIDOCSTAT
*" RETURN_VARIABLES STRUCTURE BDWFRETVAR
*" SERIALIZATION_INFO STRUCTURE BDI_SER
*" EXCEPTIONS
*" WRONG_FUNCTION_CALLED
*"----------------------------------------------------------------------
Guía para Creación de IDOCS – dbgb 2016
SORT IDOC_DATA BY DOCNUM.
SORT IDOC_CONTRL BY DOCNUM.
DATA : T_EDIDD TYPE STANDARD TABLE OF EDIDD, "Data Record
T_EDIDC TYPE STANDARD TABLE OF EDIDC, "Control Record
T_EDIDS TYPE STANDARD TABLE OF BDIDOCSTAT. "Status Record
*----------*Global Work Area Declarations *------------------------*
DATA : W_EDIDC LIKE EDIDC,
W_EDIDD TYPE EDIDD,
W_EDIDS TYPE BDIDOCSTAT.
DATA: W_IDOC_DATA TYPE EDIDD.
DATA : L_INDX TYPE SYTABIX.
DATA: IT_STUDENT TYPE TABLE OF ZSTUDENT.
DATA : WA_STUDENT TYPE ZSTUDENT.
DATA : ERROR_MESSAGE TYPE STRING.
DATA : T_STUDENTS TYPE TABLE OF ZSTUDENTS.
DATA : W_STUDENTS TYPE ZSTUDENTS.
DATA : ERROR_FLG TYPE CHAR1.
* Go through all IDocs
LOOP AT IDOC_CONTRL.
CLEAR W_EDIDC.
W_EDIDC = IDOC_CONTRL.
READ TABLE IDOC_DATA INTO W_IDOC_DATA WITH KEY DOCNUM = IDOC_CONTRL-DOCNUM BINARY SEARCH.
IF SY-SUBRC = 0.
L_INDX = SY-TABIX.
LOOP AT IDOC_DATA FROM L_INDX.
IF IDOC_DATA-DOCNUM = IDOC_CONTRL-DOCNUM.
APPEND IDOC_DATA TO T_EDIDD.
CLEAR IDOC_DATA.
ELSE.
RETURN.
ENDIF.
ENDLOOP.
ELSE.
CONTINUE.
ENDIF.
SORT T_EDIDD.
CLEAR W_EDIDD.
LOOP AT T_EDIDD INTO W_EDIDD.
IF W_EDIDD-SEGNAM = 'ZSTUDENT'.
CLEAR WA_STUDENT.
Guía para Creación de IDOCS – dbgb 2016
WA_STUDENT = W_EDIDD-SDATA.
IF WA_STUDENT IS NOT INITIAL.
APPEND WA_STUDENT TO IT_STUDENT.
ENDIF.
CONTINUE.
ENDIF.
ENDLOOP.
IF IT_STUDENT IS NOT INITIAL. "if data is there in segement
LOOP AT IT_STUDENT INTO WA_STUDENT.
MOVE-CORRESPONDING WA_STUDENT TO W_STUDENTS.
MODIFY ZSTUDENTS FROM W_STUDENTS. "update data base table
IF SY-SUBRC <> 0.
ERROR_FLG = 'X'.
ERROR_MESSAGE = 'Error occured in updating ZSTUDENT table'.
ENDIF.
ENDLOOP.
ENDIF.
IF ERROR_FLG = 'X'. "add error status to IDOC
IDOC_STATUS-STATUS = '51'.
IDOC_STATUS-DOCNUM = W_EDIDC-DOCNUM.
IDOC_STATUS-MSGTY = 'E'.
IDOC_STATUS-MSGID = '00'.
IDOC_STATUS-MSGNO = '398'.
IDOC_STATUS-MSGV1 = ERROR_MESSAGE+0(25). "t_return_ecm-message
IDOC_STATUS-MSGV2 = ERROR_MESSAGE+25(25).
IDOC_STATUS-MSGV3 = ERROR_MESSAGE+50(25).
IDOC_STATUS-MSGV4 = ERROR_MESSAGE+75(25).
CLEAR ERROR_MESSAGE.
APPEND IDOC_STATUS TO IDOC_STATUS .
CLEAR IDOC_STATUS .
else. "add success status to IDOC
IDOC_STATUS-STATUS = '53'.
IDOC_STATUS-DOCNUM = W_EDIDC-DOCNUM.
APPEND IDOC_STATUS TO IDOC_STATUS .
CLEAR IDOC_STATUS .
ENDIF.
ENDLOOP.
ENDFUNCTION.
Save and activate.
Step9: Register inbound function module characteristics.
Go to BD51, click on change and click on new entries.
Guía para Creación de IDOCS – dbgb 2016
IMP Note: If you don`t find change icon or if you find a message like ‘You are not allowed to cross client
customization’ log on to 800 client and do this step.
Add an entry as below.
Save it in a transport request.
Step10: Assign function module to message type.
Go to WE57, click on change and new entries.
IMP Note: If you don`t find change icon or if you find a message like ‘You are not allowed to cross client
customization’ log on to 800 client and do this step.
Save it in a transport request.
Step11: Create process code.
Go to WE42, click on change and click on new entries.
Provide a process code, descriptions.
Guía para Creación de IDOCS – dbgb 2016
Click Save, create a transport request. Select function module from drop down and save it in transport request.
Step12: Check partner profiles for inbound.
Go to WE20, expand logical system and select logical system(Get logical system from t-code SALE ->Basic Settings ->Logical
Systems -> assign logical system to client -> 800 (double click and copy logical system)).
Click on add icon under inbound parameters.
Guía para Creación de IDOCS – dbgb 2016
Add entries as below.
Save.
Testing the development
Follow the below steps to test the above development.
1. Create entries in ZSTUDENTS table in 800 client.
2. Create outbound program.
3. Execute the program and send students from 800 to 810 clients.
Create entries in 800 client.
Go to SE11, provide name as ZSTUDENTS and click on display.
Go to utilities -> table entries -> create entries.
Guía para Creación de IDOCS – dbgb 2016
Similarly add some more entries.
Go to SE38, create a program to send students to 810 client.
Create a program with name ZSAPN_SEND_STUDENTS and add below code.
REPORT ZSEND_STUDENTS.
DATA: ZSTUDENTS TYPE TABLE OF ZSTUDENTS.
DATA : WA_STUDENTS TYPE ZSTUDENTS.
TYPES : BEGIN OF TY_ZSTUDENT. "STRUCTURE FOR SEGMENT DATA
INCLUDE STRUCTURE ZSTUDENT.
TYPES : END OF TY_ZSTUDENT.
DATA : ZSTUDENT TYPE TY_ZSTUDENT.
DATA: BEGIN OF T_EDIDD OCCURS 0.
INCLUDE STRUCTURE EDIDD.
DATA: END OF T_EDIDD.
DATA: BEGIN OF F_EDIDC.
INCLUDE STRUCTURE EDIDC.
DATA: END OF F_EDIDC.
DATA: BEGIN OF T_EDIDC OCCURS 0.
INCLUDE STRUCTURE EDIDC.
Guía para Creación de IDOCS – dbgb 2016
DATA: END OF T_EDIDC.
SELECT-OPTIONS: S_STD FOR WA_STUDENTS-STUDENT_ID.
START-OF-SELECTION.
SELECT * FROM ZSTUDENTS INTO TABLE ZSTUDENTS WHERE STUDENT_ID IN S_STD.
LOOP AT ZSTUDENTS INTO WA_STUDENTS. "send students on eby one
MOVE-CORRESPONDING WA_STUDENTS TO ZSTUDENT.
CLEAR T_EDIDD.
T_EDIDD-SEGNAM = 'ZSTUDENT'. "segment name
T_EDIDD-SDATA = ZSTUDENT. "IDOC data record
APPEND T_EDIDD.
* Fill control record
CLEAR F_EDIDC.
F_EDIDC-MESTYP = 'ZSTUDENT'. "Message type
F_EDIDC-DOCTYP = 'ZSTUDENT'. "IDOC type
F_EDIDC-RCVPRT = 'LS'. "Partner type
F_EDIDC-RCVPRN = 'T90CLNT810'. "Receiver partner
CALL FUNCTION 'MASTER_IDOC_DISTRIBUTE'
EXPORTING
MASTER_IDOC_CONTROL = F_EDIDC ">>>>>
TABLES
COMMUNICATION_IDOC_CONTROL = T_EDIDC "<<<<<
MASTER_IDOC_DATA = T_EDIDD ">>>>>
EXCEPTIONS
ERROR_IN_IDOC_CONTROL = 1
ERROR_WRITING_IDOC_STATUS = 2
ERROR_IN_IDOC_DATA = 3
SENDING_LOGICAL_SYSTEM_UNKNOWN = 4
OTHERS = 5.
COMMIT WORK.
CLEAR : WA_STUDENTS, ZSTUDENT.
REFRESH : T_EDIDD.
ENDLOOP.
Execute the above program and provide students ids to send.
Now go to WE09 and check status in 800 client.
Go to 810 client and check table ZSTUDENTS for entries(entries should be created).
Guía para Creación de IDOCS – dbgb 2016