Create IDOC Using Application Server
Create IDOC Using Application Server
hought of sharing the document creation of IDOC ( MBGMCR03 ) from Application server in case anyone needs this
for their requirements:
Steps involved :
i) Assign FM “BAPI_IDOC_INPUT1” with ALE option as “ Processing with ALE service” and “ Processing
by Function Module”
ii) Assign Standard Message type MBGMCR to Process Code.
iii) Assign Message Function as “MOD”
2) SM30 –> Maintain Entry in TBD52 for Process code ZMATDOC to a FM “ BAPI_IDOC_INPUT1” and Object type
“BUS2017”.
PERFORM upload_application_file.
*Create IDOC using File
read table gt_input into gs_input INDEX 1.
if sy–subrc eq 0.
else.
exit.
endif.
if gt_input[] is not INITIAL.
PERFORM create_idoc TABLES gt_input.
endif.
*Local data declaration
data: l_wa_control_records type edidc, “#EC NEEDED
l_i_control_records type standard table of edidc initial size 0,
v_process_data TYPE TEDE2.
clear: wa_edidc,
v_process_data,
gs_input.
loop at gt_input into gs_input.
**Populate control data
perform sub_pop_control_dat.
*
*Populate data record
perform sub_poulate_data_record.
*
**Populate the master record in sequence as basic type /IRM/AGRMNTS01
* perform sub_populate_i_edidd_seq.
clear wa_edidc–docnum.
CALL FUNCTION ‘IDOC_WRITE_AND_START_INBOUND’
EXPORTING
I_EDIDC = wa_edidc
DO_COMMIT = ‘X’
IMPORTING
DOCNUM = wa_edidc–DOCNUM
* ERROR_BEFORE_CALL_APPLICATION =
TABLES
I_EDIDD = i_edidd
EXCEPTIONS
IDOC_NOT_SAVED = 1
OTHERS = 2
.
IF SY–SUBRC <> 0.
MESSAGE ID SY–MSGID TYPE SY–MSGTY NUMBER SY–MSGNO
WITH SY–MSGV1 SY–MSGV2 SY–MSGV3 SY–MSGV4.
else.
COMMIT WORK.
ENDIF.
FORM SUB_POP_CONTROL_DAT .
* Fill Control Segment
Data : LV_PORT(10) type c.
CONCATENATE SY–SYSID ‘CLNT’ SY–MANDT into lv_port.
CONDENSE lv_port NO–GAPS.
clear wa_edidc.
wa_edidc–mandt = sy–mandt.
wa_edidc–docrel = sy–saprl.
wa_edidc–direct = ‘2’.
wa_edidc–rcvpor = ‘ ‘.
wa_edidc–rcvprt = ‘ ‘.
wa_edidc–rcvprn = ‘ ‘.
wa_edidc–test = ‘ ‘.
wa_edidc–sndpor = lv_port. “‘XXXCLNT001’
wa_edidc–sndprt = ‘LS’.
wa_edidc–SNDPFC = ‘LS’.
wa_edidc–sndprn = lv_port. “‘XXXCLNT001’
wa_edidc–mestyp = ‘MBGMCR’.
wa_edidc–IDOCTP = ‘MBGMCR03’. .
wa_edidc–mesfct = ‘MOD’.
wa_edidc–RCVPRT = ‘LS’.
wa_edidc–RCVPRN = LV_PORT.
wa_edidc–RCVPRT = ‘LS’.
ENDFORM. ” SUB_POP_CONTROL_DAT
FORM SUB_POULATE_DATA_RECORD .
clear wa_edidd.
clear i_edidd.
E1MBGMCR–TESTRUN = p_run. ( Selection screen Check Box )
wa_edidd–mandt = sy–mandt.
wa_edidd–segnam = ‘E1MBGMCR’.
wa_edidd–sdata = E1MBGMCR.
APPEND wa_edidd to i_edidd.
* Fill data segments
clear stl_head.
stl_head–PSTNG_DATE = sy–datum.
stl_head–HEADER_TXT = gs_input–BKTXT.
stl_head–DOC_DATE = sy–datum.
wa_edidd–mandt = sy–mandt.
wa_edidd–segnam = ‘E1BP2017_GM_HEAD_01’.
wa_edidd–sdata = stl_head.
APPEND wa_edidd to i_edidd.
clear stl_gmcode.
stl_gmcode–gm_code = ’03’.
wa_edidd–mandt = sy–mandt.
wa_edidd–segnam = ‘E1BP2017_GM_CODE’.
wa_edidd–sdata = stl_gmcode.
APPEND wa_edidd to i_edidd.
clear stl_item.
stl_item–MATERIAL = gs_input–MATNR.
stl_item–PLANT = gs_input-WERKS.
CALL FUNCTION ‘CONVERSION_EXIT_ALPHA_INPUT’
EXPORTING
INPUT = gs_input–kostl
IMPORTING
OUTPUT = gs_input–kostl.
stl_item–COSTCENTER = gs_input–kostl.
stl_item–STGE_LOC = gs_input–LGORT.
stl_item–BATCH = gs_input–CHARG.
stl_item–MOVE_TYPE = gs_input–BWART.
stl_item–ENTRY_QNT = gs_input–MENGE.
wa_edidd–mandt = sy–mandt.
wa_edidd–segnam = ‘E1BP2017_GM_ITEM_CREATE’.“ZGM_ITEM’.
wa_edidd–sdata = stl_item.
APPEND wa_edidd to i_edidd.
ENDFORM. ” SUB_POULATE_DATA_RECORD