2008 Feb 26 2:54 PM
Hi All,
I used call transaction in my BDC program. I want to place all the error records in a seperate file. Please give the sample code for it.
Thank you.
2008 Feb 26 2:59 PM
TYPES: BEGIN OF TY_LOG,
ERROR TYPE STRING,
END OF TY_LOG.
DATA: T_ERROR TYPE STANDARD TABLE OF TY_LOG
WITH HEADER LINE.
DATA: gt_err_bi TYPE STANDARD TABLE OF bdcmsgcoll WITH HEADER LINE.
CALL TRANSACTION 'XXX' USING gt_data MODE c_mode
MESSAGES INTO gt_err_bi.
LOOP AT gt_err_bi WHERE msgtyp EQ 'E'.
MOVE gt_err_bi-msgv1 to t_log-error.
append t_log.
ENDLOOP.
After that, use GUI_DOWNLOAD to download the T_LOG table.
Greetings,
Blag.
Hi All,
I used call transaction in my BDC program. I want to place all the error records in a seperate file. Please give the sample code for it.
Thank you.
2008 Feb 26 2:59 PM
TYPES: BEGIN OF TY_LOG,
ERROR TYPE STRING,
END OF TY_LOG.
DATA: T_ERROR TYPE STANDARD TABLE OF TY_LOG
WITH HEADER LINE.
DATA: gt_err_bi TYPE STANDARD TABLE OF bdcmsgcoll WITH HEADER LINE.
CALL TRANSACTION 'XXX' USING gt_data MODE c_mode
MESSAGES INTO gt_err_bi.
LOOP AT gt_err_bi WHERE msgtyp EQ 'E'.
MOVE gt_err_bi-msgv1 to t_log-error.
append t_log.
ENDLOOP.
After that, use GUI_DOWNLOAD to download the T_LOG table.
Greetings,
Blag.
2008 Feb 27 7:39 PM
2008 Feb 26 3:04 PM
Hi Use additional options:
MESSAGES INTO itab
Effect
Using this addition, all the messages sent during batch input processing are stored in an internal table itab of the type BDCMSGCOLL from the ABAP Dictionary.
2008 Feb 26 3:14 PM
Hi,
Check the following code:
TYPES: BEGIN OF t_vend,
lifnr LIKE rf02k-lifnr, "Vendor Account Number
ktokk LIKE rf02k-ktokk, "Vendor account group
anred LIKE lfa1-anred, "Title
name1 LIKE lfa1-name1, "Vendor Name
sortl LIKE lfa1-sortl, "Sort field
land1 LIKE lfa1-land1, "Country Key
spras LIKE lfa1-spras, "Language Key
banks TYPE lfbk-banks, "Bank country key
bankl TYPE lfbk-bankl, "bank key
bankn TYPE lfbk-bankn, "account number
END OF t_vend.
TYPES: BEGIN OF t_sucrec,
vnum TYPE lfa1-lifnr, "Vendor Account Number
vnam TYPE lfa1-name1, "Vendor Name
END OF t_sucrec.
TYPES: BEGIN OF t_errrec,
err_rec TYPE string, "Error Record
lineno TYPE i, "Line Number
message TYPE string, "Error Message
END OF t_errrec.
DATA: v_file TYPE string, "Variable for storing flat file
it_vend TYPE STANDARD TABLE OF t_vend, "Internal table of Vendor
wa_vend LIKE LINE OF it_vend, "Workarea of Internal table it_vend
it_sucrec TYPE STANDARD TABLE OF t_sucrec, "Internal table of Success records
wa_sucrec LIKE LINE OF it_sucrec, "Workarea of Internal table it_sucrec
it_errrec TYPE STANDARD TABLE OF t_errrec,
wa_errrec LIKE LINE OF it_errrec,
it_bdctab LIKE bdcdata OCCURS 0 WITH HEADER LINE, "Internal table structure of BDCDATA
it_messagetab LIKE bdcmsgcoll OCCURS 0 WITH HEADER LINE, "Tracing Error Messages
v_date LIKE sy-datum, "Controlling of session date
v_index LIKE sy-index, "Index Number
v_totrec TYPE i, "Total Records
v_errrec TYPE i, "Error Records
v_sucrec TYPE i, "Success Records
v_sesschk TYPE c. "Session maintenance
&----
*& SELECTION-SCREEN
&----
SELECTION-SCREEN: BEGIN OF BLOCK blk1 WITH FRAME TITLE text-001 NO INTERVALS.
PARAMETERS: p_file TYPE rlgrap-filename. "rlgrap-filename is a predefined structure
SELECTION-SCREEN: END OF BLOCK blk1.
SELECTION-SCREEN: BEGIN OF BLOCK blk2 WITH FRAME TITLE text-002 NO INTERVALS.
PARAMETERS: p_mode LIKE ctu_params-dismode DEFAULT 'N',
p_update LIKE ctu_params-updmode DEFAULT 'A'.
SELECTION-SCREEN END OF BLOCK blk2.
&----
*& INITIALIZATION
&----
INITIALIZATION.
v_date = sy-datum - 1.
&----
*& AT SELECTION-SCREEN ON VALUE-REQUEST FOR p_file
&----
AT SELECTION-SCREEN ON VALUE-REQUEST FOR p_file.
CALL FUNCTION 'F4_FILENAME'
EXPORTING
program_name = syst-cprog
dynpro_number = syst-dynnr
FIELD_NAME = ' '
IMPORTING
file_name = p_file.
&----
*& START-OF-SELECTION
&----
START-OF-SELECTION.
v_file = p_file.
CALL FUNCTION 'GUI_UPLOAD'
EXPORTING
filename = v_file
filetype = 'ASC'
has_field_separator = 'X'
TABLES
data_tab = it_vend
EXCEPTIONS
file_open_error = 1
file_read_error = 2
no_batch = 3
gui_refuse_filetransfer = 4
invalid_type = 5
no_authority = 6
unknown_error = 7
bad_data_format = 8
header_not_allowed = 9
separator_not_allowed = 10
header_too_long = 11
unknown_dp_error = 12
access_denied = 13
dp_out_of_memory = 14
disk_full = 15
dp_timeout = 16
OTHERS = 17.
IF sy-subrc <> 0.
MESSAGE ID sy-msgid TYPE sy-msgty NUMBER sy-msgno
WITH sy-msgv1 sy-msgv2 sy-msgv3 sy-msgv4.
ENDIF.
&----
*& END-OF-SELECTION
&----
END-OF-SELECTION.
v_index = sy-index.
LOOP AT it_vend INTO wa_vend.
PERFORM bdc_dynpro USING 'SAPMF02K' '0100'.
PERFORM bdc_field USING 'RF02K-LIFNR' wa_vend-lifnr.
PERFORM bdc_field USING 'RF02K-KTOKK' wa_vend-ktokk.
PERFORM bdc_field USING 'BDC_OKCODE' '/00'.
PERFORM bdc_dynpro USING 'sapmf02k' '0110'.
PERFORM bdc_field USING 'lfa1-anred' wa_vend-anred.
PERFORM bdc_field USING 'lfa1-name1' wa_vend-name1.
PERFORM bdc_field USING 'lfa1-sortl' wa_vend-sortl.
PERFORM bdc_field USING 'lfa1-land1' wa_vend-land1.
PERFORM bdc_field USING 'lfa1-spras' wa_vend-spras.
PERFORM bdc_dynpro USING 'SAPMF02K' '0120'.
PERFORM bdc_field USING 'BDC_OKCODE' '/00'.
PERFORM bdc_dynpro USING 'SAPMF02K' '0130'.
PERFORM bdc_field USING 'BDC_OKCODE' '=ENTR'.
PERFORM bdc_field USING 'LFBK-BANKS(01)' wa_vend-banks.
PERFORM bdc_field USING 'LFBK-BANKL(01)' wa_vend-bankl.
PERFORM bdc_field USING 'LFBK-BANKN(01)' wa_vend-bankn.
PERFORM bdc_dynpro USING 'SAPMF02K' '0130'.
PERFORM bdc_field USING 'BDC_OKCODE' '=ENTR'.
PERFORM bdc_dynpro USING 'SAPLSPO1' '0300'.
PERFORM bdc_field USING 'bdc_okcode' 'UPDA'.
CALL TRANSACTION 'XK01' USING it_bdctab
MODE p_mode
UPDATE p_update
MESSAGES INTO it_messagetab.
IF sy-subrc = 0.
&----
*& reading success records to corresponding internal table
&----
READ TABLE it_messagetab WITH KEY msgtyp = 'S'.
IF sy-subrc = 0.
wa_sucrec-vnum = it_messagetab-msgv1.
wa_sucrec-vnam = wa_vend-name1.
APPEND wa_sucrec TO it_sucrec.
CLEAR wa_sucrec.
ENDIF.
ELSE.
&----
*& reading error records to corresponding internal table
&----
READ TABLE it_messagetab WITH KEY msgtyp = 'E'.
IF sy-subrc = 0.
CALL FUNCTION 'FORMAT_MESSAGE'
EXPORTING
id = sy-msgid
no = it_messagetab-msgnr
v1 = it_messagetab-msgv1
v2 = it_messagetab-msgv2
v3 = it_messagetab-msgv3
v4 = it_messagetab-msgv4
IMPORTING
msg = wa_errrec-message.
wa_errrec-lineno = v_index.
APPEND wa_errrec TO it_errrec.
CLEAR wa_errrec.
ENDIF.
ENDIF.
CLEAR : it_bdctab, it_messagetab.
REFRESH: it_bdctab, it_messagetab.
ENDLOOP.
DESCRIBE TABLE it_vend LINES v_totrec.
DESCRIBE TABLE it_errrec LINES v_errrec.
DESCRIBE TABLE it_sucrec LINES v_sucrec.
PERFORM disp_data.
SKIP 2.
IF v_sucrec > 0.
PERFORM disp_success_data.
ENDIF.
SKIP 2.
IF v_errrec > 0.
PERFORM disp_error_data.
ENDIF.
&----
*& Form bdc_dynpro
&----
text
----
-->P_0104 text
-->P_0105 text
----
FORM bdc_dynpro USING program
dynpro.
CLEAR it_bdctab.
it_bdctab-program = program.
it_bdctab-dynpro = dynpro.
it_bdctab-dynbegin = 'X'.
APPEND it_bdctab.
ENDFORM. " bdc_dynpro
&----
*& Form bdc_field
&----
text
----
-->P_0109 text
-->P_IT_VEND_LIFNR text
----
FORM bdc_field USING fnam
fval.
CLEAR it_bdctab.
it_bdctab-fnam = fnam.
it_bdctab-fval = fval.
APPEND it_bdctab.
ENDFORM. " bdc_field
&----
*& Form disp_data
&----
text
----
--> p1 text
<-- p2 text
----
FORM disp_data .
ULINE (45).
WRITE : / sy-vline,
18 'SUMMARY'(004) COLOR 1,
45 sy-vline.
ULINE /(45).
WRITE : / sy-vline,
'Total Records Processed'(007),
28 '=',
30 v_totrec,
45 sy-vline,
/ sy-vline,
'Error Records'(005),
28 '=',
30 v_errrec,
45 sy-vline,
/ sy-vline,
'Successful Records'(006),
28 '=',
30 v_sucrec,
45 sy-vline.
ULINE /(45).
ENDFORM. " disp_data
&----
*& Form disp_success_data
&----
text
----
--> p1 text
<-- p2 text
----
FORM disp_success_data .
ULINE (45).
WRITE : / sy-vline,
14 'Successful Records'(012) COLOR 1,
45 sy-vline.
ULINE /(45).
WRITE : / sy-vline ,
'Vendor Number'(010) COLOR 2,
17 sy-vline,
25 'Vendor Name'(011) COLOR 2,
45 sy-vline.
ULINE /(45).
LOOP AT it_sucrec INTO wa_sucrec.
WRITE: / sy-vline ,
wa_sucrec-vnum,
17 sy-vline,
19 wa_sucrec-vnam,
45 sy-vline.
ENDLOOP.
ULINE /(45).
ENDFORM. " disp_success_data
&----
*& Form disp_error_data
&----
text
----
--> p1 text
<-- p2 text
----
FORM disp_error_data .
ULINE (85).
WRITE : / sy-vline,
35 'Error Records'(013) COLOR 1,
85 sy-vline.
ULINE /(85).
WRITE : / sy-vline,
'Record Number'(008) COLOR 2,
sy-vline,
37 'Reason for error'(009) COLOR 2,
85 sy-vline.
ULINE /(85).
LOOP AT it_errrec INTO wa_errrec.
WRITE : / sy-vline,
wa_errrec-lineno,
17 sy-vline,
wa_errrec-message,
85 sy-vline.
ENDLOOP.
ULINE /(85).
ENDFORM. " disp_error_data
Regards,
Bhaskar