Hola gran comunidad , tengo nula experiencia con idoc y resulta que tengo que llamar uno desde un clase
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 segments 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.
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
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 ??
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 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.