Application Development 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: 

RE: BDC

moniabap_moni
Explorer
0 Kudos

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 ?

1 ACCEPTED SOLUTION

former_member198275
Active Contributor
0 Kudos

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

3 REPLIES 3

Former Member
0 Kudos

hi, use the structure BDCMSGCOLL STRUCTURE for capturing error in call transactio.

by putting this in search, u can find the coding

Former Member
0 Kudos

Yes u can,

After call transaction make a check IF SY-SUBRC<>0.

Then use session method...................

former_member198275
Active Contributor
0 Kudos

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