Como llamar un idoc desde abap

Hola gran comunidad , tengo nula experiencia con idoc y resulta que tengo que llamar uno desde un clase

image

Solo me indicaron eso me imagino que eso me retorna algo y order_nbr es un dato que tengo me imagino que debo pasarle eso pero estoy buscando que funciones debo ocupar para llamarlo y solo veo las transacciones. Alguna sugerencia o ayuda?

O quizas debo crear un idoc de ese tipo analizando bien creo que eso es pero igual sigo perdido

Actualizacion
Encontre una funcion que debo usar ‘MASTER_IDOC_DISTRIBUTE’ que debo pasarle el tipo base y los segmentos pero estoy averiguando como usarla jeje

Te paso un ejemplo de como llamar a un idoc de salida (para enviar a otro lado)


*--- Data declaration statements
DATA: C_INVREV_SEGNAME(7) TYPE C VALUE 'E1P0006', "SEGMENTO
C_INVREV_MESTYPE(6) TYPE C VALUE 'ZDIRP4', "MENSAJE
C_INVREV_IDOC_TYPE(8) TYPE C VALUE 'HRMD_A04', "BASE
E1P0006 LIKE E1P0006,
E1PLOGI LIKE E1PLOGI,
IDOC_CONTROL LIKE EDIDC,
T_COMM_CONTROL LIKE EDIDC OCCURS 0 WITH HEADER LINE,
IDOC_DATA LIKE EDIDD OCCURS 0 WITH HEADER LINE.

*--- Populate the IDoc segment’s field with the required data

CLEAR E1P0006.
E1P0006-PERNR = '00010841'.
E1P0006-SUBTY = '1'.
E1P0006-BEGDA = '20062804'.
E1P0006-ENDDA = '99993112'.
E1P0006-STRAS = 'Dirección para Idoc'.
E1P0006-TELNR = '4621-5465'.

IDOC_DATA-SEGNAM = C_INVREV_SEGNAME.
IDOC_DATA-SDATA = E1P0006.
APPEND IDOC_DATA.

*--- Move the control data info required for the distribution
IDOC_CONTROL-MESTYP = C_INVREV_MESTYPE.
IDOC_CONTROL-DOCTYP = C_INVREV_IDOC_TYPE.

*--- 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 = '0'.
commit work.
ENDIF.

Espero que te sirva,
Saludos.

3 Me gusta

Te pasaste muchas gracias! , me guiare de tu ejemplo :smiley:

Aunque solo me quedo una duda, y si voy a usar varios segmentos? por ejemplo en la imagen que puse hay 3 segmentos esa parte no me quedo muy clara jeje

En esta parte:

Ahi es donde agrego el segmento y los datos del segmento, eso lo tenes que hacer tantas veces lo necesites con todos los segmentos que necesites.

Saludos.

1 me gusta

Aaaah ya entendi muchas gracias !

DATA: LS_E1SHP_OBDLV_CONFIRM_DECENTR TYPE E1SHP_OBDLV_CONFIRM_DECENTR
      LS_E1BPOBDLVHDRCON             TYPE E1BPOBDLVHDRCON,
      LS_E1BPOBDLVHDRCTRLCON         TYPE E1BPOBDLVHDRCTRLCON.

LS_E1SHP_OBDLV_CONFIRM_DECENTR-DELIVERY  = ORDER_NBR. 
LS_E1BPOBDLVHDRCON-DELIV_NUMB            = ORDER_NBR. 
LS_E1BPOBDLVHDRCTRLCON-DELIV_NUMB        = ORDER_NBR. 
LS_E1BPOBDLVHDRCTRLCON-DLV_DEL           = ORDER_NBR. 

IDOC_DATA-SEGNAM = 'E1SHP_OBDLV_CONFIRM_DECENTR'.
IDOC_DATA-SDATA  = LS_E1SHP_OBDLV_CONFIRM_DECENTR.

IDOC_DATA-SEGNAM = 'E1BPOBDLVHDRCON'.
IDOC_DATA-SDATA  = LS_E1BPOBDLVHDRCON.

IDOC_DATA-SEGNAM = 'E1BPOBDLVHDRCTRLCON'.
IDOC_DATA-SDATA  = LS_E1BPOBDLVHDRCTRLCON.

Pero IDOC_DATA es una estructura no una tabla por ende solo no me tomaria mi ultima asignacion a esa estructura? o tendria que definir a IDOC_DATA type table of EDIDD ??

Es una tabla, fijate que tiene “OCCURS 0 WITH HEADER LINE”.
Entonces después de cada segmento, asegurate de poner APPEND IDOC_DATA.
Saludos.

Ah ya me fije solo que en mi servidor no puedo declarar tablas asi ;( asi que hice una estructura y append de estructura a tabla :smiley: y esta tabla no se usa? T_COMM_CONTROL

Me quedó el código así:

DATA: IDOC_DATA           TYPE TABLE OF edidd.
    DATA: T_COMM_CONTROL      TYPE TABLE OF EDIDC,
          IDOC_CONTROL        TYPE EDIDC.
********************************************************
*                    IDoc                              *
********************************************************
    " TIPO BASE:        SHP_OBDLV_CONFIRM_DECENTRAL03
    " TIPO DE MENSAJE:  SHP_OBDLV_CONFIRM_DECENTRAL
    DATA: C_INVREV_IDOC_TYPE(29) TYPE C VALUE 'SHP_OBDLV_CONFIRM_DECENTRAL03'. " IDOC TIPO BASE
    DATA: C_INVREV_MESTYPE(27)   TYPE C VALUE 'SHP_OBDLV_CONFIRM_DECENTRAL'.   " TIPO DE MENSAJE
********************************************************
*            Segmentos del IDoc                        *
********************************************************
    DATA: LS_E1SHP_OBDLV_CONFIRM_DECENTR TYPE E1SHP_OBDLV_CONFIRM_DECENTR,
          LS_E1BPOBDLVHDRCON             TYPE E1BPOBDLVHDRCON,
          LS_E1BPOBDLVHDRCTRLCON         TYPE E1BPOBDLVHDRCTRLCON.
    DATA: LS_IDOC_DATA TYPE edidd.
********************************************************

    IF ( ACTIVITY_CODE = '20' AND REF_VALUE = '99' ) .

      " Asignando valores a campos de los segmentos
      LS_E1SHP_OBDLV_CONFIRM_DECENTR-DELIVERY  = ORDER_NBR.
      LS_E1BPOBDLVHDRCON-DELIV_NUMB            = ORDER_NBR.
      LS_E1BPOBDLVHDRCTRLCON-DELIV_NUMB        = ORDER_NBR.
      LS_E1BPOBDLVHDRCTRLCON-DLV_DEL           = 'X'.

      " Agregando lineas a tabla con segmentos
      LS_IDOC_DATA-SEGNAM = 'E1SHP_OBDLV_CONFIRM_DECENTR'.
      LS_IDOC_DATA-SDATA  = LS_E1SHP_OBDLV_CONFIRM_DECENTR.
      APPEND LS_IDOC_DATA TO IDOC_DATA.

      LS_IDOC_DATA-SEGNAM = 'E1BPOBDLVHDRCON'.
      LS_IDOC_DATA-SDATA  = LS_E1BPOBDLVHDRCON.
      APPEND LS_IDOC_DATA TO IDOC_DATA.

      LS_IDOC_DATA-SEGNAM = 'E1BPOBDLVHDRCTRLCON'.
      LS_IDOC_DATA-SDATA  = LS_E1BPOBDLVHDRCTRLCON.
      APPEND LS_IDOC_DATA TO IDOC_DATA.

      "--- Move the control data info required for the distribution
      IDOC_CONTROL-MESTYP = C_INVREV_MESTYPE.
      IDOC_CONTROL-DOCTYP = C_INVREV_IDOC_TYPE.

      CALL FUNCTION 'MASTER_IDOC_DISTRIBUTE'
        EXPORTING
          master_idoc_control            = IDOC_CONTROL
*          obj_type                       = ls_obj_type
*          chnum                          = ls_chnum
        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 = 0.
*       Implement suitable error handling here
      ENDIF.
      COMMIT WORK.
    ENDIF.

Ahora a probar :smiley: gracias neuvamente

1 me gusta

Este tema se cerró automáticamente 7 días después del último post. No se permiten nuevas respuestas.