‎2007 Apr 13 9:51 PM
Hi friends,
Can any one help me in writing the IDOC coad (Inbound and Outbound).
Thanks,
Mahesh.
‎2007 Apr 14 8:08 AM
Hi Venkata,
GO through this programs.
1.Selection program(OUTBOUND Program)
&----
*& Report ZBT_SEL_PROGRAM *
*& *
&----
*& *
*& *
&----
REPORT zbt_sel_program .
TABLES: mara.
*----
Data declaration
*----
*--Material number selection.
SELECT-OPTIONS: s_matnr FOR mara-matnr.
PARAMETERS:
*--Rec.Partner
p_rcvprn TYPE edi_rcvprn,
*--Message type
p_msgtyp TYPE edi_mestyp.
*----
Internal table declaration
*----
DATA:
*--MARA data
it_mara TYPE STANDARD TABLE OF mara WITH HEADER LINE,
*--To fill the segment Z1MARM
it_temp_mara TYPE STANDARD TABLE OF z1marm WITH HEADER LINE,
*--MAKT data
it_makt TYPE STANDARD TABLE OF makt WITH HEADER LINE,
*--To fill the segment E1MAKTM
it_temp_makt TYPE STANDARD TABLE OF e1maktm WITH HEADER LINE.
DATA: st_edidd TYPE STANDARD TABLE OF edidd WITH HEADER LINE,
st_comm_cont TYPE STANDARD TABLE OF edidc WITH HEADER LINE,
st_mast_cont TYPE edidc.
*--Fetch the data from MARA table
SELECT * FROM mara INTO TABLE it_mara WHERE matnr IN s_matnr.
IF sy-subrc = 0.
SORT it_mara.
ENDIF.
*--Fetch the data from MAKT table
IF NOT it_mara[] IS INITIAL.
SELECT * FROM makt INTO TABLE it_makt FOR ALL ENTRIES IN it_mara
WHERE matnr = it_mara-matnr.
IF sy-subrc = 0.
SORT it_makt.
ENDIF.
ENDIF.
*--Fill the iternal tables which is type the same of Segments
LOOP AT it_mara.
MOVE-CORRESPONDING it_mara TO it_temp_mara.
APPEND it_temp_mara.
CLEAR it_temp_mara.
ENDLOOP.
LOOP AT it_makt.
MOVE-CORRESPONDING it_makt TO it_temp_makt.
APPEND it_temp_makt.
CLEAR it_temp_makt.
ENDLOOP.
*--Fill the segments
LOOP AT it_temp_mara.
st_edidd-segnam = 'Z1MARM'.
st_edidd-sdata = it_temp_mara.
APPEND st_edidd.
CLEAR st_edidd.
ENDLOOP.
LOOP AT it_temp_makt.
st_edidd-segnam = 'E1MAKTM'.
st_edidd-sdata = it_temp_makt.
APPEND st_edidd.
CLEAR st_edidd.
ENDLOOP.
*--Fill Master IDOC
st_mast_cont-rcvprt = 'LS'.
st_mast_cont-rcvprn = p_rcvprn.
st_mast_cont-mestyp = p_msgtyp.
st_mast_cont-idoctp = 'ZMATMAS01'.
*--Create the communication IDOC by passsing master IDOC and control
information.
CALL FUNCTION 'MASTER_IDOC_DISTRIBUTE'
EXPORTING
master_idoc_control = st_mast_cont
OBJ_TYPE = ''
CHNUM = ''
TABLES
communication_idoc_control = st_comm_cont
master_idoc_data = st_edidd
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
COMMIT WORK.
ENDIF.
*--Display IDOC Number.
LOOP AT st_comm_cont.
WRITE: 'IDOC Numbers:',st_comm_cont-docnum.
ENDLOOP.
2. Inbound Program
FUNCTION zidoc_input_btmatmas.
*"----
""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
*" 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
*"----
DATA:wa_mara TYPE z1marm,
wa_makt TYPE e1maktm.
DATA: st_mara TYPE mara,
st_makt TYPE makt.
LOOP AT idoc_contrl.
LOOP AT idoc_data WHERE docnum = idoc_contrl-docnum.
CASE idoc_data-segnam.
WHEN 'Z1MARM'.
wa_mara = idoc_data-sdata.
MOVE-CORRESPONDING wa_mara TO st_mara.
INSERT mara FROM st_mara.
IF sy-subrc = 0.
COMMIT WORK.
ENDIF.
WHEN 'E1MAKTM'.
wa_makt = idoc_data-sdata.
MOVE-CORRESPONDING wa_makt TO st_makt.
INSERT makt FROM st_makt.
IF sy-subrc = 0.
COMMIT WORK.
ENDIF.
ENDCASE.
ENDLOOP.
ENDLOOP.
IF sy-subrc = 0.
return_variables-wf_param = 'Processed IDOCs'.
return_variables-doc_number = idoc_contrl-docnum.
return_variables-wf_param = 'Appl_objects'.
return_variables-doc_number = fs_app_empdet-ssn.
APPEND return_variables.
idoc_status-docnum = idoc_contrl-docnum.
idoc_status-status = 53.
idoc_status-msgty = 'I'.
idoc_status-msgid = 'ZE'.
idoc_status-msgno = '006'.
APPEND idoc_status.
ENDIF.
ENDFUNCTION.
Rewards some points .
Rgds,
P.Nag
‎2007 Apr 13 10:34 PM
Hi
Welcome to SDN.
Please go thru the book "ALE,EDI and IDoc Technologies for SAP" By Arvind Nagpal..It is the very best book for ALE/IDocs..
Cheers,
Hakim
Mark all useful answers..
‎2007 Apr 14 7:02 AM
Hi Venkat,
Welcome to SAP SDN world.
In the IDOC posting data we can use 3 strucutures.
EDIDD: It is for data records.
EDIDC: It is for control records
EDIDS: It is for status records.
Inbound or outbound what ever it may be we are posting the data by uisng these strucutre and move the data with looping and post. Remaing configuration part hope u are aware.
Hope this helps you, reply for queries, Shall post you the updates.
Regards.
Kumar. .
‎2007 Apr 14 8:08 AM
Hi Venkata,
GO through this programs.
1.Selection program(OUTBOUND Program)
&----
*& Report ZBT_SEL_PROGRAM *
*& *
&----
*& *
*& *
&----
REPORT zbt_sel_program .
TABLES: mara.
*----
Data declaration
*----
*--Material number selection.
SELECT-OPTIONS: s_matnr FOR mara-matnr.
PARAMETERS:
*--Rec.Partner
p_rcvprn TYPE edi_rcvprn,
*--Message type
p_msgtyp TYPE edi_mestyp.
*----
Internal table declaration
*----
DATA:
*--MARA data
it_mara TYPE STANDARD TABLE OF mara WITH HEADER LINE,
*--To fill the segment Z1MARM
it_temp_mara TYPE STANDARD TABLE OF z1marm WITH HEADER LINE,
*--MAKT data
it_makt TYPE STANDARD TABLE OF makt WITH HEADER LINE,
*--To fill the segment E1MAKTM
it_temp_makt TYPE STANDARD TABLE OF e1maktm WITH HEADER LINE.
DATA: st_edidd TYPE STANDARD TABLE OF edidd WITH HEADER LINE,
st_comm_cont TYPE STANDARD TABLE OF edidc WITH HEADER LINE,
st_mast_cont TYPE edidc.
*--Fetch the data from MARA table
SELECT * FROM mara INTO TABLE it_mara WHERE matnr IN s_matnr.
IF sy-subrc = 0.
SORT it_mara.
ENDIF.
*--Fetch the data from MAKT table
IF NOT it_mara[] IS INITIAL.
SELECT * FROM makt INTO TABLE it_makt FOR ALL ENTRIES IN it_mara
WHERE matnr = it_mara-matnr.
IF sy-subrc = 0.
SORT it_makt.
ENDIF.
ENDIF.
*--Fill the iternal tables which is type the same of Segments
LOOP AT it_mara.
MOVE-CORRESPONDING it_mara TO it_temp_mara.
APPEND it_temp_mara.
CLEAR it_temp_mara.
ENDLOOP.
LOOP AT it_makt.
MOVE-CORRESPONDING it_makt TO it_temp_makt.
APPEND it_temp_makt.
CLEAR it_temp_makt.
ENDLOOP.
*--Fill the segments
LOOP AT it_temp_mara.
st_edidd-segnam = 'Z1MARM'.
st_edidd-sdata = it_temp_mara.
APPEND st_edidd.
CLEAR st_edidd.
ENDLOOP.
LOOP AT it_temp_makt.
st_edidd-segnam = 'E1MAKTM'.
st_edidd-sdata = it_temp_makt.
APPEND st_edidd.
CLEAR st_edidd.
ENDLOOP.
*--Fill Master IDOC
st_mast_cont-rcvprt = 'LS'.
st_mast_cont-rcvprn = p_rcvprn.
st_mast_cont-mestyp = p_msgtyp.
st_mast_cont-idoctp = 'ZMATMAS01'.
*--Create the communication IDOC by passsing master IDOC and control
information.
CALL FUNCTION 'MASTER_IDOC_DISTRIBUTE'
EXPORTING
master_idoc_control = st_mast_cont
OBJ_TYPE = ''
CHNUM = ''
TABLES
communication_idoc_control = st_comm_cont
master_idoc_data = st_edidd
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
COMMIT WORK.
ENDIF.
*--Display IDOC Number.
LOOP AT st_comm_cont.
WRITE: 'IDOC Numbers:',st_comm_cont-docnum.
ENDLOOP.
2. Inbound Program
FUNCTION zidoc_input_btmatmas.
*"----
""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
*" 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
*"----
DATA:wa_mara TYPE z1marm,
wa_makt TYPE e1maktm.
DATA: st_mara TYPE mara,
st_makt TYPE makt.
LOOP AT idoc_contrl.
LOOP AT idoc_data WHERE docnum = idoc_contrl-docnum.
CASE idoc_data-segnam.
WHEN 'Z1MARM'.
wa_mara = idoc_data-sdata.
MOVE-CORRESPONDING wa_mara TO st_mara.
INSERT mara FROM st_mara.
IF sy-subrc = 0.
COMMIT WORK.
ENDIF.
WHEN 'E1MAKTM'.
wa_makt = idoc_data-sdata.
MOVE-CORRESPONDING wa_makt TO st_makt.
INSERT makt FROM st_makt.
IF sy-subrc = 0.
COMMIT WORK.
ENDIF.
ENDCASE.
ENDLOOP.
ENDLOOP.
IF sy-subrc = 0.
return_variables-wf_param = 'Processed IDOCs'.
return_variables-doc_number = idoc_contrl-docnum.
return_variables-wf_param = 'Appl_objects'.
return_variables-doc_number = fs_app_empdet-ssn.
APPEND return_variables.
idoc_status-docnum = idoc_contrl-docnum.
idoc_status-status = 53.
idoc_status-msgty = 'I'.
idoc_status-msgid = 'ZE'.
idoc_status-msgno = '006'.
APPEND idoc_status.
ENDIF.
ENDFUNCTION.
Rewards some points .
Rgds,
P.Nag