09-13-2007 9:29 AM
HI Experts,
In BDC iam using call transaction to upload data ,can i able to put the error records in a BDC BATCH Input by using bdc_open,bdc_insert,bdc_close function modules for processing error records in foreground ?
09-13-2007 9:34 AM
Check the last part....
&----
*& Report Z_CALL_TRANSACTION *
*& *
&----
REPORT z_call_transaction NO STANDARD PAGE HEADING.
&----
*& SELECTION-SCREEN
&----
SELECTION-SCREEN BEGIN OF BLOCK bk1 WITH FRAME TITLE text-001.
PARAMETERS : pa_fname TYPE localfile.
SELECTION-SCREEN END OF BLOCK bk1.
&----
*& TYPES
&----
Type declaration for Customer data
TYPES: BEGIN OF tw_customer,
kunnr TYPE kunnr,
ktokd TYPE ktokd,
name1 TYPE name1_gp,
sortl TYPE sortl,
ort01 TYPE ort01_gp,
land1 TYPE land1_gp,
spras TYPE spras,
pstlz TYPE pstlz,
lzone TYPE lzone,
END OF tw_customer,
tt_customer TYPE STANDARD TABLE OF tw_customer.
TYPES: BEGIN OF tw_errorlog,
kunnr TYPE kunnr,
name1 TYPE name1_gp,
message TYPE string,
END OF tw_errorlog,
tt_errorlog TYPE STANDARD TABLE OF tw_errorlog.
&----
*& DATA
&----
DATA: lf_fname TYPE string,
Internal Table Declaration for Customer data
lw_customer TYPE tw_customer,
lt_customer TYPE tt_customer,
Internal Table Declaration for BDCDATA
lw_bdcdata TYPE bdcdata,
lt_bdcdata TYPE STANDARD TABLE OF bdcdata,
Internal Table Declaration for BDCMSGCOLL
lw_bdcmsgcoll TYPE bdcmsgcoll,
lt_bdcmsgcoll TYPE STANDARD TABLE OF bdcmsgcoll,
Internal Table Declaration for Error Log
lw_errorlog TYPE tw_errorlog,
lt_errorlog TYPE tt_errorlog.
&----
*& INITIALIZATION
&----
INITIALIZATION.
Initializing the File Name
pa_fname = 'C:\temp\'.
&----
*& AT SELECTION SCREEN
&----
AT SELECTION-SCREEN ON VALUE-REQUEST FOR pa_fname.
F4 functionality for File Name
CALL FUNCTION 'F4_FILENAME'
EXPORTING
program_name = syst-cprog
dynpro_number = syst-dynnr
field_name = ' '
IMPORTING
file_name = pa_fname.
&----
*& START-OF-SELECTION
&----
START-OF-SELECTION.
lf_fname = pa_fname.
Upload data from flat file and store it in an Internal table
CALL FUNCTION 'GUI_UPLOAD'
EXPORTING
filename = lf_fname
filetype = 'ASC'
has_field_separator = 'X'
read_by_line = 'X'
TABLES
data_tab = lt_customer.
Process Customer Data
LOOP AT lt_customer INTO lw_customer.
CLEAR lw_bdcdata.
REFRESH lt_bdcdata[].
PERFORM bdc_dynpro USING 'SAPMF02D' '0107'.
PERFORM bdc_field USING 'BDC_CURSOR'
'RF02D-KTOKD'.
PERFORM bdc_field USING 'BDC_OKCODE'
'/00'.
PERFORM bdc_field USING 'RF02D-KUNNR'
lw_customer-kunnr. "Customer No.
PERFORM bdc_field USING 'RF02D-KTOKD'
lw_customer-ktokd. "Acc.Group.
PERFORM bdc_dynpro USING 'SAPMF02D' '0110'.
PERFORM bdc_field USING 'BDC_CURSOR'
'KNA1-SPRAS'.
PERFORM bdc_field USING 'BDC_OKCODE'
'/00'.
PERFORM bdc_field USING 'KNA1-NAME1'
lw_customer-name1. "Name.
PERFORM bdc_field USING 'KNA1-SORTL'
lw_customer-sortl. "Search Term.
PERFORM bdc_field USING 'KNA1-ORT01'
lw_customer-ort01. "City.
PERFORM bdc_field USING 'KNA1-LAND1'
lw_customer-land1. "Country.
PERFORM bdc_field USING 'KNA1-SPRAS'
lw_customer-spras. "Language.
PERFORM bdc_field USING 'KNA1-PSTLZ'
lw_customer-pstlz. "Postol Code.
PERFORM bdc_dynpro USING 'SAPMF02D' '0120'.
PERFORM bdc_field USING 'BDC_CURSOR'
'KNA1-LZONE'.
PERFORM bdc_field USING 'BDC_OKCODE'
'=UPDA'.
PERFORM bdc_field USING 'KNA1-LZONE'
lw_customer-lzone. "Tran.Zone.
Call Transaction
CALL TRANSACTION 'VD01' USING lt_bdcdata
MODE 'A' UPDATE 'S' MESSAGES INTO lt_bdcmsgcoll.
ENDLOOP.
PERFORM fr_format_message_text.
&----
*& Form BDC_DYNPRO
&----
FORM bdc_dynpro USING program dynpro.
CLEAR lw_bdcdata.
lw_bdcdata-program = program.
lw_bdcdata-dynpro = dynpro.
lw_bdcdata-dynbegin = 'X'.
APPEND lw_bdcdata TO lt_bdcdata.
ENDFORM. "BDC_DYNPRO
----
Insert field *
----
FORM bdc_field USING fnam fval.
IF fval <> space.
CLEAR lw_bdcdata.
lw_bdcdata-fnam = fnam.
lw_bdcdata-fval = fval.
APPEND lw_bdcdata TO lt_bdcdata.
ENDIF.
ENDFORM. "BDC_FIELD
&----
*& Form fr_format_message_text
&----
FORM fr_format_message_text .
DATA: lf_msg TYPE string.
WRITE:/10 'Message Id',
35 'Megno',
45 'Msg.Type',
55 'Message Info'.
LOOP AT lt_bdcmsgcoll INTO lw_bdcmsgcoll.
IF lw_bdcmsgcoll-msgtyp = 'E' OR
lw_bdcmsgcoll-msgtyp = 'A'.
CALL FUNCTION 'FORMAT_MESSAGE'
EXPORTING
id = lw_bdcmsgcoll-msgid
lang = sy-langu
no = lw_bdcmsgcoll-msgnr
v1 = lw_bdcmsgcoll-msgv1
v2 = lw_bdcmsgcoll-msgv2
v3 = lw_bdcmsgcoll-msgv3
v4 = lw_bdcmsgcoll-msgv4
IMPORTING
msg = lf_msg
EXCEPTIONS
not_found = 1
OTHERS = 2.
IF sy-subrc EQ 0.
WRITE:/10 lw_bdcmsgcoll-msgid,
35 lw_bdcmsgcoll-msgnr,
45 lw_bdcmsgcoll-msgtyp,
55 lf_msg.
ENDIF.
ENDIF.
ENDLOOP.
ENDFORM. " fr_format_message_text
09-13-2007 9:31 AM
hi, use the structure BDCMSGCOLL STRUCTURE for capturing error in call transactio.
by putting this in search, u can find the coding
09-13-2007 9:32 AM
Yes u can,
After call transaction make a check IF SY-SUBRC<>0.
Then use session method...................
09-13-2007 9:34 AM
Check the last part....
&----
*& Report Z_CALL_TRANSACTION *
*& *
&----
REPORT z_call_transaction NO STANDARD PAGE HEADING.
&----
*& SELECTION-SCREEN
&----
SELECTION-SCREEN BEGIN OF BLOCK bk1 WITH FRAME TITLE text-001.
PARAMETERS : pa_fname TYPE localfile.
SELECTION-SCREEN END OF BLOCK bk1.
&----
*& TYPES
&----
Type declaration for Customer data
TYPES: BEGIN OF tw_customer,
kunnr TYPE kunnr,
ktokd TYPE ktokd,
name1 TYPE name1_gp,
sortl TYPE sortl,
ort01 TYPE ort01_gp,
land1 TYPE land1_gp,
spras TYPE spras,
pstlz TYPE pstlz,
lzone TYPE lzone,
END OF tw_customer,
tt_customer TYPE STANDARD TABLE OF tw_customer.
TYPES: BEGIN OF tw_errorlog,
kunnr TYPE kunnr,
name1 TYPE name1_gp,
message TYPE string,
END OF tw_errorlog,
tt_errorlog TYPE STANDARD TABLE OF tw_errorlog.
&----
*& DATA
&----
DATA: lf_fname TYPE string,
Internal Table Declaration for Customer data
lw_customer TYPE tw_customer,
lt_customer TYPE tt_customer,
Internal Table Declaration for BDCDATA
lw_bdcdata TYPE bdcdata,
lt_bdcdata TYPE STANDARD TABLE OF bdcdata,
Internal Table Declaration for BDCMSGCOLL
lw_bdcmsgcoll TYPE bdcmsgcoll,
lt_bdcmsgcoll TYPE STANDARD TABLE OF bdcmsgcoll,
Internal Table Declaration for Error Log
lw_errorlog TYPE tw_errorlog,
lt_errorlog TYPE tt_errorlog.
&----
*& INITIALIZATION
&----
INITIALIZATION.
Initializing the File Name
pa_fname = 'C:\temp\'.
&----
*& AT SELECTION SCREEN
&----
AT SELECTION-SCREEN ON VALUE-REQUEST FOR pa_fname.
F4 functionality for File Name
CALL FUNCTION 'F4_FILENAME'
EXPORTING
program_name = syst-cprog
dynpro_number = syst-dynnr
field_name = ' '
IMPORTING
file_name = pa_fname.
&----
*& START-OF-SELECTION
&----
START-OF-SELECTION.
lf_fname = pa_fname.
Upload data from flat file and store it in an Internal table
CALL FUNCTION 'GUI_UPLOAD'
EXPORTING
filename = lf_fname
filetype = 'ASC'
has_field_separator = 'X'
read_by_line = 'X'
TABLES
data_tab = lt_customer.
Process Customer Data
LOOP AT lt_customer INTO lw_customer.
CLEAR lw_bdcdata.
REFRESH lt_bdcdata[].
PERFORM bdc_dynpro USING 'SAPMF02D' '0107'.
PERFORM bdc_field USING 'BDC_CURSOR'
'RF02D-KTOKD'.
PERFORM bdc_field USING 'BDC_OKCODE'
'/00'.
PERFORM bdc_field USING 'RF02D-KUNNR'
lw_customer-kunnr. "Customer No.
PERFORM bdc_field USING 'RF02D-KTOKD'
lw_customer-ktokd. "Acc.Group.
PERFORM bdc_dynpro USING 'SAPMF02D' '0110'.
PERFORM bdc_field USING 'BDC_CURSOR'
'KNA1-SPRAS'.
PERFORM bdc_field USING 'BDC_OKCODE'
'/00'.
PERFORM bdc_field USING 'KNA1-NAME1'
lw_customer-name1. "Name.
PERFORM bdc_field USING 'KNA1-SORTL'
lw_customer-sortl. "Search Term.
PERFORM bdc_field USING 'KNA1-ORT01'
lw_customer-ort01. "City.
PERFORM bdc_field USING 'KNA1-LAND1'
lw_customer-land1. "Country.
PERFORM bdc_field USING 'KNA1-SPRAS'
lw_customer-spras. "Language.
PERFORM bdc_field USING 'KNA1-PSTLZ'
lw_customer-pstlz. "Postol Code.
PERFORM bdc_dynpro USING 'SAPMF02D' '0120'.
PERFORM bdc_field USING 'BDC_CURSOR'
'KNA1-LZONE'.
PERFORM bdc_field USING 'BDC_OKCODE'
'=UPDA'.
PERFORM bdc_field USING 'KNA1-LZONE'
lw_customer-lzone. "Tran.Zone.
Call Transaction
CALL TRANSACTION 'VD01' USING lt_bdcdata
MODE 'A' UPDATE 'S' MESSAGES INTO lt_bdcmsgcoll.
ENDLOOP.
PERFORM fr_format_message_text.
&----
*& Form BDC_DYNPRO
&----
FORM bdc_dynpro USING program dynpro.
CLEAR lw_bdcdata.
lw_bdcdata-program = program.
lw_bdcdata-dynpro = dynpro.
lw_bdcdata-dynbegin = 'X'.
APPEND lw_bdcdata TO lt_bdcdata.
ENDFORM. "BDC_DYNPRO
----
Insert field *
----
FORM bdc_field USING fnam fval.
IF fval <> space.
CLEAR lw_bdcdata.
lw_bdcdata-fnam = fnam.
lw_bdcdata-fval = fval.
APPEND lw_bdcdata TO lt_bdcdata.
ENDIF.
ENDFORM. "BDC_FIELD
&----
*& Form fr_format_message_text
&----
FORM fr_format_message_text .
DATA: lf_msg TYPE string.
WRITE:/10 'Message Id',
35 'Megno',
45 'Msg.Type',
55 'Message Info'.
LOOP AT lt_bdcmsgcoll INTO lw_bdcmsgcoll.
IF lw_bdcmsgcoll-msgtyp = 'E' OR
lw_bdcmsgcoll-msgtyp = 'A'.
CALL FUNCTION 'FORMAT_MESSAGE'
EXPORTING
id = lw_bdcmsgcoll-msgid
lang = sy-langu
no = lw_bdcmsgcoll-msgnr
v1 = lw_bdcmsgcoll-msgv1
v2 = lw_bdcmsgcoll-msgv2
v3 = lw_bdcmsgcoll-msgv3
v4 = lw_bdcmsgcoll-msgv4
IMPORTING
msg = lf_msg
EXCEPTIONS
not_found = 1
OTHERS = 2.
IF sy-subrc EQ 0.
WRITE:/10 lw_bdcmsgcoll-msgid,
35 lw_bdcmsgcoll-msgnr,
45 lw_bdcmsgcoll-msgtyp,
55 lf_msg.
ENDIF.
ENDIF.
ENDLOOP.
ENDFORM. " fr_format_message_text