Application Development Discussions
Join the discussions or start your own on all things application development, including tools and APIs, programming models, and keeping your skills sharp.
cancel
Showing results for 
Search instead for 
Did you mean: 

Regarding custom idoc

Former Member
0 Kudos

I have created 4 segments z1 with fields eord-lifnr,lfa1-name1

z2 with eord-matnr,maky-maktx,bdmng

z3 with mard-werks,eord-ebeln,eord-ebelp,eord-meins,mard-labst+mard-isme,period,begin_date,end_date

z4 with bdmng,datum

then how to declare the edidd,edidc,edids,etc

HOW TO POPULATE THOSE FIELDS?

3 REPLIES 3

manubhutani
Active Contributor
0 Kudos

Hi,,

Please find my custom prog .

dont forget to award points

REPORT ZALE2LK.

TABLES: Z1MESLK. "IDoc segment

PARAMETERS: MESSAGE LIKE Z1MESLK-MESSAGE OBLIGATORY,

MESKEY LIKE Z1MESLK-MESKEY OBLIGATORY.

DATA: BEGIN OF F_IDOC_HEADER.

INCLUDE STRUCTURE EDIDC.

DATA: END OF F_IDOC_HEADER.

DATA: BEGIN OF T_IDOC_DATA OCCURS 0.

INCLUDE STRUCTURE EDIDD.

DATA: END OF T_IDOC_DATA.

DATA: BEGIN OF T_COMM_IDOC_CONTROL OCCURS 0.

INCLUDE STRUCTURE EDIDC.

DATA: END OF T_COMM_IDOC_CONTROL.

CLEAR T_IDOC_DATA.

REFRESH T_IDOC_DATA.

CLEAR F_IDOC_HEADER.

  • move parameters into field string

Z1MESLK-MESKEY = MESKEY.

Z1MESLK-MESSAGE = MESSAGE.

  • add data to field string

Z1MESLK-SENDER = SY-UNAME.

Z1MESLK-MDATE = SY-DATUM.

Z1MESLK-MTIME = SY-UZEIT.

  • field string to IDoc-data

T_IDOC_DATA-SDATA = Z1MESLK.

  • segment name

T_IDOC_DATA-SEGNAM = 'Z1MESLK'.

  • append data

APPEND T_IDOC_DATA.

  • fill IDoc header

F_IDOC_HEADER-MESTYP = 'ZMESLK'.

F_IDOC_HEADER-IDOCTP = 'ZALE2LK'.

  • send IDoc

CALL FUNCTION 'MASTER_IDOC_DISTRIBUTE'

EXPORTING

MASTER_IDOC_CONTROL = F_IDOC_HEADER

TABLES

COMMUNICATION_IDOC_CONTROL = T_COMM_IDOC_CONTROL

MASTER_IDOC_DATA = T_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.

  • check results

IF SY-SUBRC = 0.

WRITE:/ 'IDoc created.'.

ELSE.

WRITE:/ 'Error',SY-SUBRC,'in MASTER_IDOC_DISTRIBUTE'.

ENDIF.

  • close LUW

COMMIT WORK.

Former Member
0 Kudos

First of all you should know one thing about EDIDC,EDIDD,EDIDS tables...whatever segments you create under one basic idoc that one you must add to one message type using WE82..so here message type contains the 4 segments and segments contains the data.

EDIDC contains administrative information like sendor,reciever,partner profile,message type etc..

EDIDD or EDID4 contains the data..here segments convert into data format(char).

EDIDS contains status information about idoc at various stages.

I hope now you get some clear idea...

Reward if it useful.

Dara.

Former Member
0 Kudos

Hi ,

After creating a custom idoc you need to create one program in outbound system to send the idoc to inbound and one functional module in inbound system to update or to post the data which is in idoc.i am providing the steps and code of program and functional module.please go through these carefully.

program.

REPORT ZDS_STANDALONE_2210 .

*1. Create parameters/select-options for input data. i.e., empno, message type, logical system.

PARAMETERS : P_EMPNO LIKE ZEMP-EMPNO OBLIGATORY,

P_MESTYP LIKE EDMSG-MSGTYP OBLIGATORY,

P_LOGSYS LIKE TBDLST-LOGSYS OBLIGATORY.

*2. Create Data objects for control record, data record and database table.

DATA : C_SEGMENT LIKE EDIDD-SEGNAM VALUE 'Z1ZEMPM',

C_IDOCTP LIKE EDIDC-IDOCTP VALUE 'ZEMPM01'.

DATA : BEGIN OF IT_ZEMP,

EMPNO LIKE ZEMP-EMPNO,

ENAME LIKE ZEMP-ENAME,

END OF IT_ZEMP.

DATA : INT_EDIDD LIKE EDIDD OCCURS 0 WITH HEADER LINE.

DATA : INT_CONTROL_RECORD LIKE EDIDC.

DATA : INT_COMM_IDOC LIKE EDIDC OCCURS 0 WITH HEADER LINE.

*3. Select the data from corresponding tables into internal table for a defined condition.

SELECT SINGLE EMPNO ENAME FROM ZEMP INTO CORRESPONDING FIELDS OF IT_ZEMP WHERE EMPNO = P_EMPNO.

*4. create control record into internal table.

INT_CONTROL_RECORD-MESTYP = P_MESTYP.

INT_CONTROL_RECORD-IDOCTP = C_IDOCTP.

INT_CONTROL_RECORD-RCVPRT = 'LS'.

INT_CONTROL_RECORD-RCVPRN = P_LOGSYS.

*5. create data record into internal table.

INT_EDIDD-SEGNAM = C_SEGMENT.

INT_EDIDD-SDATA = IT_ZEMP.

APPEND INT_EDIDD.

*6. Process ALE Service Layer using the function module MASTER_IDOC_DISTRIBUTE. It returns the corresponding IDoc No.s.

CALL FUNCTION 'MASTER_IDOC_DISTRIBUTE'

EXPORTING

master_idoc_control = INT_CONTROL_RECORD

tables

communication_idoc_control = INT_COMM_IDOC

master_idoc_data = INT_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.

MESSAGE ID SY-MSGID TYPE SY-MSGTY NUMBER SY-MSGNO

WITH SY-MSGV1 SY-MSGV2 SY-MSGV3 SY-MSGV4.

ENDIF.

*7. Display Communication IDocs.

LOOP AT INT_COMM_IDOC.

WRITE : / 'Communication IDoc No. is : ', INT_COMM_IDOC-DOCNUM.

ENDLOOP.

*8. Commit Work.

COMMIT WORK.

function module.

FUNCTION ZDS_IDOC_INPUT_ZEMPMAS.

*"----


""Local interface:

*" IMPORTING

*" VALUE(INPUT_METHOD) LIKE BDWFAP_PAR-INPUTMETHD

*" VALUE(MASS_PROCESSING) LIKE BDWFAP_PAR-MASS_PROC

*" 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

*" OTHER_EXC

*"----


*1. Call workflow include program MBDCONWF.

INCLUDE MBDCONWF.

*2. Create Data Objects for segment(s) and DB Table.

TABLES : ZEMP.

DATA : FS_EMPHDR_DATA LIKE Z1ZEMPM.

DATA : FS_APP_EMPDET LIKE ZEMP.

*3. Raise the exception if the message type is not ZEMPMAS.

IF IDOC_CONTRL-MESTYP NE 'ZEMPMAS'.

RAISE WRONG_FUNCTION_CALLED.

CLEAR FS_APP_EMPDET.

ENDIF.

*4. Process Each segment in the IDoc.

LOOP AT IDOC_CONTRL.

LOOP AT IDOC_DATA WHERE DOCNUM EQ IDOC_CONTRL-DOCNUM.

CASE IDOC_DATA-SEGNAM.

WHEN 'Z1ZEMPM'.

FS_EMPHDR_DATA = IDOC_DATA-SDATA.

MOVE-CORRESPONDING FS_EMPHDR_DATA TO FS_APP_EMPDET.

ENDCASE.

ENDLOOP.

  • 5. If the data already exists update the data or else insert the data.

SELECT SINGLE * FROM ZEMP WHERE EMPNO EQ FS_APP_EMPDET-EMPNO.

IF SY-SUBRC NE 0.

INSERT INTO ZEMP VALUES FS_APP_EMPDET.

ELSE.

UPDATE ZEMP FROM FS_APP_EMPDET.

ENDIF.

*6. If the data successfully posted maintain status as 53 or if unsuccessful give status as 51.

IF SY-SUBRC EQ 0 .

  • POPULATE RETURN VARIABLES FOR SUCCESS.

RETURN_VARIABLES-WF_PARAM = 'PROCESSED_IDOCS'.

RETURN_VARIABLES-DOC_NUMBER = IDOC_CONTRL-DOCNUM.

APPEND RETURN_VARIABLES.

  • ADD STATUS RECORD INDICATES SUCCESS.

IDOC_STATUS-DOCNUM = IDOC_CONTRL-DOCNUM.

IDOC_STATUS-STATUS = '53'.

IDOC_STATUS-MSGTY = 'I'.

IDOC_STATUS-MSGID = 'ZE'.

IDOC_STATUS-MSGNO = '006'.

IDOC_STATUS-MSGV1 = FS_APP_EMPDET-EMPNO.

APPEND IDOC_STATUS.

ELSE.

  • POPULATE RETURN VARIABLES FOR ERROR.

RETURN_VARIABLES-WF_PARAM = 'ERROR_IDOCS'.

RETURN_VARIABLES-DOC_NUMBER = IDOC_CONTRL-DOCNUM.

APPEND RETURN_VARIABLES.

  • ADD STATUS RECORD INDICATES ERROR.

IDOC_STATUS-DOCNUM = IDOC_CONTRL-DOCNUM.

IDOC_STATUS-STATUS = '51'.

IDOC_STATUS-MSGTY = 'E'.

IDOC_STATUS-MSGID = 'ZE'.

IDOC_STATUS-MSGNO = '007'.

IDOC_STATUS-MSGV1 = FS_APP_EMPDET-EMPNO.

APPEND IDOC_STATUS.

ENDIF.

ENDLOOP.

ENDFUNCTION.

please reward points if helpful.