cancel
Showing results for 
Search instead for 
Did you mean: 

How to write abap program for Idoc..

Former Member
0 Kudos
687

Hi

How do we write ABAP Program for Idoc.

Thankx and Regards

lakhan

Accepted Solutions (1)

Accepted Solutions (1)

Former Member
0 Kudos

hi

<b>The following code may help you</b>

CONSTANTS: C_DOCTYP TYPE EDIDC-IDOCTP VALUE 'ZUSRDET01',Idoctype

C_SEGNAM TYPE EDIDD-SEGNAM VALUE 'Z1USRDET01', segmenttype

C_MESTYP TYPE EDIDC-MESTYP VALUE 'ZUSRDET'. message type

DATA: IT_ZUSR02 TYPE USR02 OCCURS 10,

IT_EDIDC TYPE EDIDC OCCURS 0,

IT_EDIDD TYPE EDIDD OCCURS 0,

WA_ZUSR02 TYPE USR02,

WA_EDIDC TYPE EDIDC,

WA_EDIDD TYPE EDIDD,

WA_Z1USRDET01 TYPE Z1USRDET01,

V_OCCMAX TYPE IDOCSYN-OCCMAX,

V_NBSEG TYPE I.

CLEAR WA_ZUSR02.

CLEAR WA_EDIDC.

  • Save the message type and the basic IDoc type in the control segment.

MOVE C_MESTYP TO WA_EDIDC-MESTYP.

MOVE C_DOCTYP TO WA_EDIDC-IDOCTP.

  • Retrieve the maximum number of segments in the basic IDoc type.

SELECT MIN( OCCMAX ) FROM IDOCSYN INTO V_OCCMAX WHERE IDOCTYP EQ C_DOCTYP AND SEGTYP EQ C_SEGNAM.

  • Save the whole USR02 table content in the IT_ZUSR02 internal table.

SELECT * FROM USR02 INTO CORRESPONDING FIELDS OF TABLE IT_ZUSR02.

  • Create a data segment for each line of IT_ZUSR02.

LOOP AT IT_ZUSR02 INTO WA_ZUSR02 .

MOVE-CORRESPONDING WA_ZUSR02 TO WA_Z1USRDET01.

CLEAR WA_EDIDD.

MOVE C_SEGNAM TO WA_EDIDD-SEGNAM.

MOVE WA_Z1USRDET01 TO WA_EDIDD-SDATA.

APPEND WA_EDIDD TO IT_EDIDD.

CLEAR WA_ZUSR02.

CLEAR WA_Z1USRDET01.

ENDLOOP.

  • Count the number of data segments.

DESCRIBE TABLE IT_EDIDD LINES V_NBSEG.

  • If the number of data segments exceeds the maximum allowed number,then display an error message.

IF V_NBSEG GT V_OCCMAX.

WRITE:/ 'ERROR'.

ENDIF.

CALL FUNCTION 'MASTER_IDOC_DISTRIBUTE'

EXPORTING

master_idoc_control = WA_EDIDC

  • OBJ_TYPE = ''

  • CHNUM = ''

tables

communication_idoc_control = IT_EDIDC

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

<b>Reward points for helpful ans</b>

Regards

Aarti

Former Member
0 Kudos

Hi Aarti,

Thankx..

I go thru the code . but cannot able to understand wht will be the final output.

As i got it will genrate an idoc. number .

plzz tell me where can i use this number , and how to see the data in the idoc.

Regards

lakhan

Former Member
0 Kudos

well in your program u can read the control segment taht is exported by the FM master_idoc_Distribute from there u wil get the idoc number

or after running your program you can go to tcode WE02 there give basic type as your idoc type and extention if any

and execute that will give you list of idoc of that created . out of it the latest idoc created will be yours, double click on the idoc records and you can see how it is populated.

Former Member
0 Kudos

Hi Mali ,

thnx for ur replly..

i got the Idoc number and follow the same path as u gave me..

but got the ERROR As:

IDoc: 0000000000684752 Status: Error in ALE service

Plzz replly ASAP

..lakhan

Former Member
0 Kudos

there is some error in settings

there must be some entry in WE20 for message type of the IDOC ..

Former Member
0 Kudos

wht kind of message type of the idoc????

Answers (1)

Answers (1)

Former Member
0 Kudos

To write a abap program to create an idoc

1) create an structture of type EDIDC and populate it with the follwing values

the sending system port, partner type

the receving system port, partner type

the basic type,

message type,

outmode

direction

then populate the idoc data table with required segments

then call 'MASTER_IDOC_CREATE' FM

after this call COMIITE WORK