Application Development and Automation 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: 
Read only

Re: BDC call transaction method

Former Member
0 Likes
770

Hi all,

Can anyone give me good exmpale of call transaction method,

explain with a good tcode and give the flat file structure also, I will give u full points.

Regards,

Sasi

1 ACCEPTED SOLUTION
Read only

Former Member
6 REPLIES 6
Read only

Former Member
Read only

Former Member
0 Likes
686

hi,

A perfect example for Call transaction using the Transaction Code 'XD01'.

http://abapprogramming.blogspot.com/2007/11/abap-bdc-sample-code-xd01.html

Hope the above links help u .

Please reward points if useful.

Regards

rose

Read only

Former Member
0 Likes
686

hi,

Follow the link for step by step procedure

http://www.sapdevelopment.co.uk/bdc/bdc_call.htm

Hope this helps, Do reward.

Read only

Former Member
0 Likes
686

Hai Sashikanth,

Go Through This Code.

TABLES :mara, marc.

----


  • INTERNAL TABLES *

----


DATA: BEGIN OF bdcdata OCCURS 0.

INCLUDE STRUCTURE bdcdata.

DATA: END OF bdcdata.

DATA:BEGIN OF itab_basic OCCURS 0,

matnr LIKE mara-matnr,

zzmatnr LIKE mara-matnr,

END OF itab_basic.

DATA:BEGIN OF itab_mrp OCCURS 0,

matnr LIKE mara-matnr,

werks LIKE marc-werks,

zzgpind LIKE marc-zzgpind,

zzdate(10) type C ,

END OF itab_mrp.

DATA: BEGIN OF tab_mara OCCURS 0.

INCLUDE STRUCTURE mara.

DATA: END OF tab_mara.

DATA: BEGIN OF tab_marc OCCURS 0.

INCLUDE STRUCTURE marc.

DATA: END OF tab_marc.

DATA: ertab_basic LIKE itab_basic OCCURS 0 WITH HEADER LINE.

DATA: ertab_mrp LIKE itab_mrp OCCURS 0 WITH HEADER LINE.

DATA : v_ctr TYPE i VALUE 1. "Ctr for no orecords

DATA : v_group(12) . "BDC Group Name

DATA : v_group_ctr(3) TYPE n . "BDC Group Counter

DATA : v_no_lines TYPE i.

DATA: v_grpname(10) TYPE c.

SELECTION-SCREEN BEGIN OF BLOCK dt-entry

WITH FRAME TITLE text-002.

selection-screen begin of line .

selection-screen comment 01(49) text-101.

parameters : p_basic radiobutton group r1.

selection-screen end of line.

selection-screen begin of line .

selection-screen comment 01(49) text-102.

parameters : p_mrp2 radiobutton group r1.

selection-screen end of line.

*

*PARAMETERS :

  • p_basic RADIOBUTTON GROUP r1,

  • p_mrp2 RADIOBUTTON GROUP r1.

SELECTION-SCREEN END OF BLOCK dt-entry.

SELECTION-SCREEN SKIP 1.

SELECTION-SCREEN BEGIN OF BLOCK fl-info

WITH FRAME TITLE text-003.

PARAMETER : p_dlhead AS CHECKBOX . "DEFAULT 'X'.

SELECTION-SCREEN END OF BLOCK fl-info.

*

SELECTION-SCREEN SKIP 1.

PARAMETER : p_max TYPE i DEFAULT '5000' . "No of rec / session

SET PF-STATUS 'UPLOAD'.

AT USER-COMMAND .

IF sy-ucomm = 'UPLOAD' .

IF p_basic = 'X'.

IF NOT itab_basic[] IS INITIAL .

PERFORM bdc_upload_basic.

ENDIF.

WRITE:/10 'Please execute the session in SM35 to Upload the data'.

FORMAT INTENSIFIED OFF COLOR OFF .

REFRESH itab_basic . CLEAR itab_basic .

SET PF-STATUS space.

ENDIF.

IF p_mrp2 = 'X'.

IF NOT itab_mrp[] IS INITIAL .

PERFORM bdc_upload_mrp.

ENDIF..

WRITE:/10 'Please execute the session in SM35 to Upload the data'.

REFRESH itab_mrp . CLEAR itab_mrp .

SET PF-STATUS space.

ENDIF.

ENDIF.

START-OF-SELECTION.

IF p_basic = 'X'.

CALL FUNCTION 'UPLOAD'

EXPORTING

  • CODEPAGE = ' '

filename = 'C:\mm02_basic.txt '

filetype = 'DAT'

TABLES

data_tab = itab_basic.

IF p_dlhead EQ 'X'.

READ TABLE itab_basic INDEX 1.

DELETE itab_basic INDEX 1.

CLEAR itab_basic.

ENDIF.

PERFORM blank_data_validation.

ENDIF.

IF p_mrp2 = 'X'.

  • v_grpname = 'MRP2'.

CALL FUNCTION 'UPLOAD'

EXPORTING

  • CODEPAGE = ' '

filename = 'C:\mm02_mrp.txt '

filetype = 'DAT'

TABLES

data_tab = itab_mrp.

IF p_dlhead EQ 'X'.

READ TABLE itab_mrp INDEX 1.

DELETE itab_mrp INDEX 1.

CLEAR itab_mrp.

ENDIF.

PERFORM valid_plant_check.

ENDIF.

IF sy-subrc <> 0.

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

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

ENDIF.

PERFORM display_data.

END-OF-SELECTION.

*----


*

  • Start new screen

*

*----


*

FORM bdc_dynpro USING program dynpro.

CLEAR bdcdata.

bdcdata-program = program.

bdcdata-dynpro = dynpro.

bdcdata-dynbegin = 'X'.

APPEND bdcdata.

ENDFORM.

*----


*

  • Insert field

*

*----


*

FORM bdc_field USING fnam fval.

CLEAR bdcdata.

bdcdata-fnam = fnam.

bdcdata-fval = fval.

APPEND bdcdata.

ENDFORM.

&----


*& Form blank_data_validation

&----


  • text

----


  • --> p1 text

  • <-- p2 text

----


FORM blank_data_validation.

LOOP AT itab_basic.

IF itab_basic-matnr IS INITIAL OR itab_basic-zzmatnr IS INITIAL.

MOVE-CORRESPONDING itab_basic TO ertab_basic .

APPEND ertab_basic . CLEAR ertab_basic .

DELETE itab_basic.

CLEAR itab_basic.

CONTINUE.

ENDIF.

SELECT SINGLE * INTO tab_mara FROM mara WHERE matnr = itab_basic-matnr

.

IF sy-subrc <> 0.

MOVE-CORRESPONDING itab_basic TO ertab_basic .

APPEND ertab_basic . CLEAR ertab_basic .

DELETE itab_basic.

CLEAR itab_basic.

CONTINUE.

ENDIF.

*

ENDLOOP.

ENDFORM. " dt_qty_validation

&----


*& Form CALL_BDC_CLOSE_GROUP

&----


  • text

----


  • --> p1 text

  • <-- p2 text

----


FORM call_bdc_close_group.

CALL FUNCTION 'BDC_CLOSE_GROUP'

EXCEPTIONS

not_open = 1

queue_error = 2.

IF sy-subrc NE 0.

WRITE: /5 'BDC CLOSE GROUP FAILED, return code = ', sy-subrc.

EXIT.

ENDIF.

ENDFORM. " CALL_BDC_CLOSE_GROUP

&----


*& Form CALL_BDC_INSERT

&----


  • text

----


  • -->P_0545 text

----


FORM call_bdc_insert USING v_tran_code.

DATA: xmode VALUE 'E'.

CALL FUNCTION 'BDC_INSERT'

EXPORTING

tcode = v_tran_code

TABLES

dynprotab = bdcdata

EXCEPTIONS

internal_error = 1

not_open = 2

queue_error = 3.

IF sy-subrc NE 0.

WRITE: /5 'BDC insert GROUP FAILED, return code = ', sy-subrc.

EXIT.

ENDIF.

ENDFORM. " CALL_BDC_INSERT

&----


*& Form display_data

&----


  • text

----


  • --> p1 text

  • <-- p2 text

----


FORM display_data.

WRITE:/ 'Press','''Upload''',

'to create session with the following records'.

IF p_basic = 'X'.

PERFORM display_header.

FORMAT COLOR 2.

LOOP AT itab_basic.

WRITE :/2 itab_basic-matnr,'|',

23 itab_basic-zzmatnr,

54 '|'.

ENDIF.

ENDLOOP.

NEW-LINE.

ULINE (54).

ENDIF.

IF p_mrp2 = 'X'.

PERFORM display_header_mrp.

FORMAT COLOR 2.

LOOP AT itab_mrp.

WRITE :/2 itab_mrp-matnr,'|',

23 itab_mrp-werks,

33 '|',

37 itab_mrp-zzgpind,

49 '|',

52 itab_mrp-ZZDATE,

65 '|'.

ENDLOOP.

NEW-LINE.

ULINE (65).

FORMAT COLOR OFF.

SKIP 4.

WRITE 😕 'Records with Errors will not be Included in Session' .

PERFORM display_header_mrp.

FORMAT COLOR 2.

LOOP AT ertab_mrp.

IF NOT ertab_mrp IS INITIAL OR NOT ertab_mrp-matnr IS INITIAL.

WRITE :/2 ertab_mrp-matnr ,'|',

23 ertab_mrp-werks,

33 '|',

37 ertab_mrp-zzgpind,

49 '|' ,

52 ertab_mrp-zzdate,

65 '|'.

ENDIF.

ENDLOOP.

NEW-LINE.

ULINE (65).

ENDIF.

FORMAT COLOR OFF.

ENDFORM. " display_data

&----


*& Form BDC_UPLOAD_basic

&----


  • text

----


  • --> p1 text

  • <-- p2 text

----


FORM bdc_upload_basic.

*CLEAR itab_basic. REFRESH itab_basic.

CLEAR : v_ctr , v_no_lines .

IF NOT itab_basic[] IS INITIAL .

v_group_ctr = '1' .

CONCATENATE 'BASIC_' v_group_ctr INTO v_group .

PERFORM open_group USING v_group .

LOOP AT itab_basic .

IF v_ctr GE p_max .

PERFORM call_bdc_close_group .

v_group_ctr = v_group_ctr + 1 .

CLEAR v_group .

CONCATENATE 'BASIC_' v_group_ctr INTO v_group .

PERFORM open_group USING v_group .

v_ctr = 0 .

ENDIF.

PERFORM bdc_dynpro USING 'SAPLMGMM' '0060'.

PERFORM bdc_field USING 'BDC_CURSOR'

'RMMG1-MATNR'.

PERFORM bdc_field USING 'BDC_OKCODE'

'/00'.

PERFORM bdc_field USING 'RMMG1-MATNR'

itab_basic-matnr.

  • 'DEEPAKTESTMAT'.

PERFORM bdc_dynpro USING 'SAPLMGMM' '0070'.

PERFORM bdc_field USING 'BDC_CURSOR'

'MSICHTAUSW-DYTXT(01)'.

PERFORM bdc_field USING 'BDC_OKCODE'

'=ENTR'.

PERFORM bdc_field USING 'MSICHTAUSW-KZSEL(01)'

'X'.

PERFORM bdc_dynpro USING 'SAPLMGMM' '4004'.

PERFORM bdc_field USING 'BDC_OKCODE'

'=BU'.

PERFORM bdc_field USING 'BDC_CURSOR'

'MARA-ZZMATNR'.

PERFORM bdc_field USING 'MARA-ZZMATNR'

itab_basic-zzmatnr.

  • 'ADV#AM29F010-70JI'.

PERFORM call_bdc_insert USING 'MM02'.

CLEAR bdcdata . REFRESH bdcdata .

v_no_lines = v_no_lines + 1 .

v_ctr = v_ctr + 1.

ENDLOOP.

PERFORM call_bdc_close_group.

SKIP 10.

WRITE :/10 'Session by name BASIC* created' .

WRITE :/10 'Total No of records uploaded - ' , v_no_lines .

ENDIF.

ENDFORM. " BDC_UPLOAD

&----


*& Form display_header

&----


  • text

----


  • --> p1 text

  • <-- p2 text

----


FORM display_header.

NEW-LINE.

  • set left scroll-boundary column 48.

FORMAT COLOR 1 INTENSIFIED ON.

ULINE (54).

WRITE :/' Avnet Material',

21'|' ,

23 'Green Product '

, 54 '|'.

NEW-LINE.

ULINE (54).

FORMAT COLOR OFF INTENSIFIED OFF.

ENDFORM.

&----


*& Form bdc_upload_mrp

&----


  • text

----


  • --> p1 text

  • <-- p2 text

----


FORM bdc_upload_mrp.

  • PERFORM call_bdc_open_group2.

CLEAR : v_ctr , v_no_lines .

IF NOT itab_mrp[] IS INITIAL .

v_group_ctr = '1' .

CONCATENATE 'MRP_' v_group_ctr INTO v_group .

PERFORM open_group USING v_group .

LOOP AT itab_mrp .

IF v_ctr GE p_max .

PERFORM call_bdc_close_group .

v_group_ctr = v_group_ctr + 1 .

CLEAR v_group .

CONCATENATE 'MRP2_' v_group_ctr INTO v_group .

PERFORM open_group USING v_group .

v_ctr = 0 .

ENDIF.

PERFORM bdc_dynpro USING 'SAPLMGMM' '0060'.

PERFORM bdc_field USING 'BDC_CURSOR'

'RMMG1-MATNR'.

PERFORM bdc_field USING 'BDC_OKCODE'

'/00'.

PERFORM bdc_field USING 'RMMG1-MATNR'

itab_mrp-matnr.

  • 'DEEPAKTESTMAT'.

PERFORM bdc_dynpro USING 'SAPLMGMM' '0070'.

PERFORM bdc_field USING 'BDC_CURSOR'

'MSICHTAUSW-DYTXT(13)'.

PERFORM bdc_field USING 'BDC_OKCODE'

'=ENTR'.

PERFORM bdc_field USING 'MSICHTAUSW-KZSEL(13)'

'X'.

PERFORM bdc_dynpro USING 'SAPLMGMM' '0080'.

PERFORM bdc_field USING 'BDC_CURSOR'

'RMMG1-WERKS'.

PERFORM bdc_field USING 'BDC_OKCODE'

'=ENTR'.

PERFORM bdc_field USING 'RMMG1-WERKS'

itab_mrp-werks.

  • 'sg11'.

PERFORM bdc_dynpro USING 'SAPLMGMM' '4000'.

PERFORM bdc_field USING 'BDC_OKCODE'

'/00'.

PERFORM bdc_field USING 'BDC_CURSOR'

'MARC-ZZGPIND'.

PERFORM bdc_field USING 'MARC-ZZGPIND'

itab_mrp-zzgpind.

  • 'G'.

PERFORM bdc_field USING 'BDC_CURSOR'

'MARC-ZZDATE'.

PERFORM bdc_field USING 'MARC-ZZDATE'

itab_mrp-zzdate.

  • 'G'.

PERFORM bdc_dynpro USING 'SAPLSPO1' '0300'.

PERFORM bdc_field USING 'BDC_OKCODE'

'=YES'.

PERFORM call_bdc_insert USING 'MM02'.

CLEAR bdcdata . REFRESH bdcdata .

v_no_lines = v_no_lines + 1 .

v_ctr = v_ctr + 1.

ENDLOOP.

PERFORM call_bdc_close_group.

SKIP 10.

WRITE :/10 'Session by name MRP2* created' .

WRITE :/10 'Total No of records uploaded - ' , v_no_lines .

ENDIF.

ENDFORM. " bdc_upload_mrp

&----


*& Form display_header_mrp

&----


  • text

----


  • --> p1 text

  • <-- p2 text

----


FORM display_header_mrp.

NEW-LINE.

  • set left scroll-boundary column 48.

FORMAT COLOR 1 INTENSIFIED ON.

ULINE (65).

WRITE :/' Avnet Material',

21'|' ,

23 'Plant ' ,

33 '|',

35 'Indicator',

49 '|',

52 'Date',

65 '|' .

NEW-LINE.

ULINE (65).

FORMAT COLOR OFF INTENSIFIED OFF.

ENDFORM. " display_header_mrp

&----


*& Form valid_plant_check

&----


  • text

----


  • --> p1 text

  • <-- p2 text

----


FORM valid_plant_check.

LOOP AT itab_mrp.

IF itab_mrp-matnr IS INITIAL OR itab_mrp-werks IS INITIAL OR

itab_mrp-zzgpind IS INITIAL.

MOVE-CORRESPONDING itab_mrp TO ertab_mrp .

APPEND ertab_mrp . CLEAR ertab_mrp .

DELETE itab_mrp.

CLEAR itab_mrp.

CONTINUE.

ENDIF.

SELECT SINGLE * INTO tab_marc FROM marc WHERE matnr = tab_marc-matnr

AND werks = itab_mrp-werks . .

IF sy-subrc = 0.

MOVE-CORRESPONDING itab_mrp TO ertab_mrp .

APPEND ertab_mrp . CLEAR ertab_mrp .

DELETE itab_mrp.

CLEAR itab_mrp.

CONTINUE.

ENDIF.

ENDLOOP.

ENDFORM. " valid_plant_check

----


  • FORM open_group *

----


  • ........ *

----


FORM open_group USING p_grp .

  • open batchinput group

CALL FUNCTION 'BDC_OPEN_GROUP'

EXPORTING

client = sy-mandt

group = p_grp

user = sy-uname

keep = 'X'.

ENDFORM.

Regards.

Eshwar.

Read only

Former Member
0 Likes
686

Hi,

CALL TRANSACTION METHOD:

-


The error records from the flat file can be handled using this method. Whenever SAP comes across error records, these are displayed in a user-defined screen.

CALL TRANSACTION <tcode> statement is used to call the user-defined screen to populate the error records.

DATA : BEGIN OF ITAB OCCURS 0,

STR(255),

END OF ITAB.

DATA ITAB1 LIKE KNA1 OCCURS 0 WITH HEADER LINE.

DATA ITAB2 LIKE BDCDATA OCCURS 0 WITH HEADER LINE.

DATA ITAB3 LIKE BDCMSGCOLL OCCURS 0 WITH HEADER LINE.

CALL FUNCTION 'UPLOAD'

EXPORTING

FILENAME = 'C:\KNA.TXT'

FILETYPE = 'ASC'

TABLES

DATA_TAB = ITAB.

LOOP AT ITAB.

SPLIT ITAB-STR AT ',' INTO ITAB1-KUNNR ITAB1-NAME1 ITAB1-ORT01

ITAB1-LAND1.

APPEND ITAB1.

ENDLOOP.

LOOP AT ITAB1.

INSERT INTO KNA1 VALUES ITAB1.

IF SY-SUBRC = 0.

WRITE 😕 'RECORDS ARE INSERTED'.

ELSE.

PERFORM PROGINFO USING 'SAPMZCALLTRANSACTION' '100'.

PERFORM FLDINFO USING 'WA-KUNNR' ITAB1-KUNNR.

PERFORM FLDINFO USING 'WA-NAME1' ITAB1-NAME1.

PERFORM FLDINFO USING 'WA-ORT01' ITAB1-ORT01.

PERFORM FLDINFO USING 'WA-LAND1' ITAB1-LAND1.

CALL TRANSACTION 'ZCALLTRANS' USING ITAB2 MODE 'N' MESSAGES INTO ITAB3.

ENDIF.

ENDLOOP.

LOOP AT ITAB3.

WRITE 😕 ITAB3.

ENDLOOP.

FORM PROGINFO USING PROGNAME SCRNUM.

CLEAR ITAB2.

REFRESH ITAB2.

ITAB2-PROGRAM = PROGNAME.

ITAB2-DYNPRO = SCRNUM.

ITAB2-DYNBEGIN = 'X'.

APPEND ITAB2.

ENDFORM.

FORM FLDINFO USING FLDNAME FLDVALUE.

CLEAR ITAB2.

ITAB2-FNAM = FLDNAME.

ITAB2-FVAL = FLDVALUE.

APPEND ITAB2.

ENDFORM.

Regards,

Priya.

Read only

Former Member
0 Likes
686

hi

I did a study on BDC using XD02 Transaction

Steps :

1.Goto Shdb transaction to record a transaction and save it and replay it for Validation..

2.In that *Shdb * window click program

3. In that Sap generated code call GUI_UPLOAD funcion module.. in that it will ask for a ITab name.. u gice it and run..

Sample Code


report ZBDC_CUST_KAR
       no standard page heading line-size 255.

include bdcrecx1.

parameters: file(132) lower case default 'D:\BDC DATA\input.txt'.

data: fname type string.

data: begin of record occurs 0,
        KUNNR(016),
        BUKRS(004),
        VKORG(004),
        VTWEG(003),
        SPART(003),
        NAME1(035),
        SORTL(010),
        STRAS(035),
      end of record.


start-of-selection.

fname = file.

CALL FUNCTION 'GUI_UPLOAD'
  EXPORTING
    filename                      = fname
   HAS_FIELD_SEPARATOR           = 'X'
  tables
    data_tab                      = record.
          .
IF sy-subrc <> 0.
MESSAGE ID SY-MSGID TYPE SY-MSGTY NUMBER SY-MSGNO
        WITH SY-MSGV1 SY-MSGV2 SY-MSGV3 SY-MSGV4.
ENDIF.


perform open_group.

loop at record.

perform bdc_dynpro      using 'SAPMF02D' '0101'.
perform bdc_field       using 'BDC_CURSOR'
                              'RF02D-D0110'.
perform bdc_field       using 'BDC_OKCODE'
                              '/00'.
perform bdc_field       using 'RF02D-KUNNR'
                              record-KUNNR.
perform bdc_field       using 'RF02D-BUKRS'
                              record-BUKRS.
perform bdc_field       using 'RF02D-VKORG'
                              record-VKORG.
perform bdc_field       using 'RF02D-VTWEG'
                              record-VTWEG.
perform bdc_field       using 'RF02D-SPART'
                              record-SPART.

perform bdc_field       using 'RF02D-D0110'
                                  'X'.

perform bdc_dynpro      using 'SAPMF02D' '0110'.
perform bdc_field       using 'BDC_CURSOR'
                              'KNA1-ANRED'.
perform bdc_field       using 'BDC_OKCODE'
                              '=VW'.
perform bdc_field       using 'KNA1-NAME1'
                              record-NAME1.
perform bdc_field       using 'KNA1-SORTL'
                              record-SORTL.
perform bdc_field       using 'KNA1-STRAS'
                              record-STRAS.

perform bdc_transaction using 'XD02'.
endloop.
perform close_group.