‎2008 Mar 10 7:40 AM
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
‎2008 Mar 10 7:59 AM
‎2008 Mar 10 7:59 AM
‎2008 Mar 10 8:15 AM
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
‎2008 Mar 10 8:18 AM
hi,
Follow the link for step by step procedure
http://www.sapdevelopment.co.uk/bdc/bdc_call.htm
Hope this helps, Do reward.
‎2008 Mar 10 8:24 AM
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.
‎2008 Mar 10 8:26 AM
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.
‎2008 Mar 10 8:30 AM
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.