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: 

BDC Session question

Former Member
0 Kudos

Hi guys,

I am trying to do a BDC session for FSP0. But i am able to upload only the last record in the file in one session and not all. I am doing the following, any quick inputs will be greatly appreciated as i am sort of stuck at this point.

FORM Process_bdcdata .

Loop at is_final.

**First Screen

perform bdc_dynpro using 'SAPLGL_ACCOUNT_MASTER_MAINTAIN' '2001'.

perform bdc_field using 'BDC_CURSOR'

'GLACCOUNT_SCREEN_KEY-KTOPL'.

perform bdc_field using 'BDC_OKCODE'

'=ACC_CRE'.

perform bdc_field using 'GLACCOUNT_SCREEN_KEY-SAKNR'

is_final-SAKNR.

perform bdc_field using 'GLACCOUNT_SCREEN_KEY-KTOPL'

is_final-KTOPL.

**Second Screen

perform bdc_dynpro using 'SAPLGL_ACCOUNT_MASTER_MAINTAIN'

'2001'.

perform bdc_field using 'BDC_CURSOR'

'GLACCOUNT_SCREEN_COA-KTOKS'.

perform bdc_field using 'BDC_OKCODE'

'=2102_GROUP'.

perform bdc_field using 'GLACCOUNT_SCREEN_COA-KTOKS'

is_final-KTOKS.

  • perform bdc_field using 'GLACCOUNT_SCREEN_COA-XPLACCT'

  • is_final-XPLACCT.

**Third Screen

perform bdc_dynpro using 'SAPLGL_ACCOUNT_MASTER_MAINTAIN'

'2001'.

perform bdc_field using 'BDC_CURSOR'

'GLACCOUNT_SCREEN_COA-XBILK'.

perform bdc_field using 'BDC_OKCODE'

'=2102_BS_PL'.

perform bdc_field using 'GLACCOUNT_SCREEN_COA-KTOKS'

is_final-KTOKS.

  • perform bdc_field using 'GLACCOUNT_SCREEN_COA-XPLACCT'

  • is_final-XPLACCT.

perform bdc_field using 'GLACCOUNT_SCREEN_COA-XBILK'

is_final-XBILK.

**Fourth Screen

perform bdc_dynpro using 'SAPLGL_ACCOUNT_MASTER_MAINTAIN'

'2001'.

perform bdc_field using 'BDC_CURSOR'

'GLACCOUNT_SCREEN_COA-TXT50_ML'.

perform bdc_field using 'BDC_OKCODE'

'=SAVE'.

perform bdc_field using 'GLACCOUNT_SCREEN_COA-KTOKS'

is_final-KTOKS.

perform bdc_field using 'GLACCOUNT_SCREEN_COA-XBILK'

is_final-XBILK.

perform bdc_field using 'GLACCOUNT_SCREEN_COA-TXT20_ML'

is_final-TXT20.

perform bdc_field using 'GLACCOUNT_SCREEN_COA-TXT50_ML'

is_final-TXT50.

*write:/'BDC processing done'.

Endloop.

PERFORM bdc_open_group using p_sesn w_uname.

PERFORM bdc_insert TABLES i_bdcdata

USING p_tcode.

PERFORM bdc_close_group.

  • Endif.

ENDFORM. " Process_bdcdata

Thanks,

David.

1 ACCEPTED SOLUTION

Former Member
0 Kudos

Hi David,

check this sample code:

&----


*& Report ZSUDHA_BDC_SESSION1 *

*& *

&----


*& *

*& *

&----


REPORT ZSUDHA_BDC_SESSION1 message-id ztraining .

tables:kna1.

types:begin of s_file,

name1 like kna1-name1,

sortl like kna1-sortl,

stras like kna1-stras,

spras like kna1-spras,

land1 like kna1-land1,

end of s_file.

data:itab type s_file occurs 0 with header line,

it_bdc type bdcdata occurs 0 with header line.

*&----


  • selection screen

&----


selection-screen begin of block b1 with frame title text-001.

parameters:p_file type rlgrap-filename obligatory.

selection-screen end of block b1.

at selection-screen on value-request for p_file.

perform file_help using p_file.

start-of-selection.

perform upload_file using p_file.

perform open_session.

perform populate_bdctable.

perform close_session.

end-of-selection.

write:/ itab-name1.

&----


*& Form file_help

&----


form file_help using p_p_file.

data:l_filepath type ibipparms-path.

CALL FUNCTION 'F4_FILENAME'

  • EXPORTING

  • PROGRAM_NAME = SYST-CPROG

  • DYNPRO_NUMBER = SYST-DYNNR

  • FIELD_NAME = ' '

IMPORTING

FILE_NAME = l_filepath.

p_file = l_filepath.

endform. " file_help

&----


*& Form upload_file

&----


form upload_file using p_p_file.

CALL FUNCTION 'WS_UPLOAD'

EXPORTING

  • CODEPAGE = ' '

FILENAME = p_p_file

FILETYPE = 'ASC'

  • HEADLEN = ' '

  • LINE_EXIT = ' '

  • TRUNCLEN = ' '

  • USER_FORM = ' '

  • USER_PROG = sy-uname

  • DAT_D_FORMAT = ' '

  • IMPORTING

  • FILELENGTH =

TABLES

data_tab = itab

EXCEPTIONS

CONVERSION_ERROR = 1

FILE_OPEN_ERROR = 2

FILE_READ_ERROR = 3

INVALID_TYPE = 4

NO_BATCH = 5

UNKNOWN_ERROR = 6

INVALID_TABLE_WIDTH = 7

GUI_REFUSE_FILETRANSFER = 8

CUSTOMER_ERROR = 9

NO_AUTHORITY = 10

OTHERS = 11

.

IF sy-subrc <> 0.

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

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

message i001.

ENDIF.

endform. " upload_file

&----


*& Form open_session

&----


form open_session .

CALL FUNCTION 'BDC_OPEN_GROUP'

EXPORTING

CLIENT = SY-MANDT

  • DEST = FILLER8

GROUP = 'sudha'

  • HOLDDATE = FILLER8

KEEP = 'X'

USER = sy-uname

  • RECORD = FILLER1

  • PROG = SY-CPROG

  • IMPORTING

  • QID =

EXCEPTIONS

CLIENT_INVALID = 1

DESTINATION_INVALID = 2

GROUP_INVALID = 3

GROUP_IS_LOCKED = 4

HOLDDATE_INVALID = 5

INTERNAL_ERROR = 6

QUEUE_ERROR = 7

RUNNING = 8

SYSTEM_LOCK_ERROR = 9

USER_INVALID = 10

OTHERS = 11

.

IF sy-subrc <> 0.

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

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

ENDIF.

endform. " open_session

&----


*& Form populate_bdctable

&----


form populate_bdctable .

loop at itab.

perform bdc_dynpro using 'SAPMF02D' '0105'.

perform bdc_field using 'BDC_CURSOR'

'RF02D-KTOKD'.

perform bdc_field using 'BDC_OKCODE'

'/00'.

perform bdc_field using 'RF02D-BUKRS'

'0001'.

perform bdc_field using 'RF02D-KTOKD'

'0001'.

perform bdc_dynpro using 'SAPMF02D' '7105'.

perform bdc_field using 'RF02D-KTOKD'

'0001'.

perform bdc_dynpro using 'SAPMF02D' '0110'.

perform bdc_field using 'BDC_CURSOR'

'KNA1-SPRAS'.

perform bdc_field using 'BDC_OKCODE'

'=UPDA'.

perform bdc_field using 'KNA1-NAME1'

itab-name1.

perform bdc_field using 'KNA1-SORTL'

Itab-sortl.

perform bdc_field using 'KNA1-STRAS'

itab-stras.

perform bdc_field using 'KNA1-LAND1'

itab-land1.

perform bdc_field using 'KNA1-SPRAS'

itab-spras.

perform bdc_dynpro using 'SAPMF02D' '0210'.

perform bdc_field using 'BDC_CURSOR'

'KNB1-AKONT'.

perform bdc_field using 'BDC_OKCODE'

'=UPDA'.

perform bdc_field using 'KNB1-AKONT'

'120000'.

perform bdc_dynpro using 'SAPLRSFH' '0100'.

perform bdc_field using 'BDC_OKCODE'

'/EBACK'.

perform bdc_field using 'BDC_CURSOR'

'RSIODYNP4-LOW(01)'.

perform bdc_insert.

clear it_bdc.

refresh it_bdc.

endloop.

endform. " populate_bdctable

&----


*& Form bdc_dynpro

&----


form bdc_dynpro using value(p_program)

value(p_screen).

it_bdc-program = p_program.

it_bdc-dynpro = p_screen.

it_bdc-dynbegin = 'X'.

append it_bdc.

clear it_bdc.

endform. " bdc_dynpro

&----


*& Form bdc_insert

&----


form bdc_insert .

CALL FUNCTION 'BDC_INSERT'

EXPORTING

TCODE = 'FD01'

  • POST_LOCAL = NOVBLOCAL

  • PRINTING = NOPRINT

  • SIMUBATCH = ' '

  • CTUPARAMS = ' '

TABLES

dynprotab = it_bdc

EXCEPTIONS

INTERNAL_ERROR = 1

NOT_OPEN = 2

QUEUE_ERROR = 3

TCODE_INVALID = 4

PRINTING_INVALID = 5

POSTING_INVALID = 6

OTHERS = 7

.

IF sy-subrc <> 0.

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

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

ENDIF.

endform. " bdc_insert

&----


*& Form close_session

&----


form close_session .

CALL FUNCTION 'BDC_CLOSE_GROUP'

EXCEPTIONS

NOT_OPEN = 1

QUEUE_ERROR = 2

OTHERS = 3

.

IF sy-subrc <> 0.

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

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

ENDIF.

endform. " close_session

&----


*& Form bdc_field

&----


form bdc_field using value(p_fieldname)

value(p_fieldvalue).

IT_BDC-FNAM = P_FIELDNAME.

IT_BDC-FVAL = P_FIELDVALUE.

APPEND IT_BDC.

CLEAR IT_BDC.

endform. " bdc_field

hope this will be of use to u.

reward if helpful.

regards,

keerthi.

4 REPLIES 4

LeonardoAraujo
Active Contributor
0 Kudos

Does it work when executing in foreground?

Leonardo De Araujo

Former Member
0 Kudos

Hi David,

check this sample code:

&----


*& Report ZSUDHA_BDC_SESSION1 *

*& *

&----


*& *

*& *

&----


REPORT ZSUDHA_BDC_SESSION1 message-id ztraining .

tables:kna1.

types:begin of s_file,

name1 like kna1-name1,

sortl like kna1-sortl,

stras like kna1-stras,

spras like kna1-spras,

land1 like kna1-land1,

end of s_file.

data:itab type s_file occurs 0 with header line,

it_bdc type bdcdata occurs 0 with header line.

*&----


  • selection screen

&----


selection-screen begin of block b1 with frame title text-001.

parameters:p_file type rlgrap-filename obligatory.

selection-screen end of block b1.

at selection-screen on value-request for p_file.

perform file_help using p_file.

start-of-selection.

perform upload_file using p_file.

perform open_session.

perform populate_bdctable.

perform close_session.

end-of-selection.

write:/ itab-name1.

&----


*& Form file_help

&----


form file_help using p_p_file.

data:l_filepath type ibipparms-path.

CALL FUNCTION 'F4_FILENAME'

  • EXPORTING

  • PROGRAM_NAME = SYST-CPROG

  • DYNPRO_NUMBER = SYST-DYNNR

  • FIELD_NAME = ' '

IMPORTING

FILE_NAME = l_filepath.

p_file = l_filepath.

endform. " file_help

&----


*& Form upload_file

&----


form upload_file using p_p_file.

CALL FUNCTION 'WS_UPLOAD'

EXPORTING

  • CODEPAGE = ' '

FILENAME = p_p_file

FILETYPE = 'ASC'

  • HEADLEN = ' '

  • LINE_EXIT = ' '

  • TRUNCLEN = ' '

  • USER_FORM = ' '

  • USER_PROG = sy-uname

  • DAT_D_FORMAT = ' '

  • IMPORTING

  • FILELENGTH =

TABLES

data_tab = itab

EXCEPTIONS

CONVERSION_ERROR = 1

FILE_OPEN_ERROR = 2

FILE_READ_ERROR = 3

INVALID_TYPE = 4

NO_BATCH = 5

UNKNOWN_ERROR = 6

INVALID_TABLE_WIDTH = 7

GUI_REFUSE_FILETRANSFER = 8

CUSTOMER_ERROR = 9

NO_AUTHORITY = 10

OTHERS = 11

.

IF sy-subrc <> 0.

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

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

message i001.

ENDIF.

endform. " upload_file

&----


*& Form open_session

&----


form open_session .

CALL FUNCTION 'BDC_OPEN_GROUP'

EXPORTING

CLIENT = SY-MANDT

  • DEST = FILLER8

GROUP = 'sudha'

  • HOLDDATE = FILLER8

KEEP = 'X'

USER = sy-uname

  • RECORD = FILLER1

  • PROG = SY-CPROG

  • IMPORTING

  • QID =

EXCEPTIONS

CLIENT_INVALID = 1

DESTINATION_INVALID = 2

GROUP_INVALID = 3

GROUP_IS_LOCKED = 4

HOLDDATE_INVALID = 5

INTERNAL_ERROR = 6

QUEUE_ERROR = 7

RUNNING = 8

SYSTEM_LOCK_ERROR = 9

USER_INVALID = 10

OTHERS = 11

.

IF sy-subrc <> 0.

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

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

ENDIF.

endform. " open_session

&----


*& Form populate_bdctable

&----


form populate_bdctable .

loop at itab.

perform bdc_dynpro using 'SAPMF02D' '0105'.

perform bdc_field using 'BDC_CURSOR'

'RF02D-KTOKD'.

perform bdc_field using 'BDC_OKCODE'

'/00'.

perform bdc_field using 'RF02D-BUKRS'

'0001'.

perform bdc_field using 'RF02D-KTOKD'

'0001'.

perform bdc_dynpro using 'SAPMF02D' '7105'.

perform bdc_field using 'RF02D-KTOKD'

'0001'.

perform bdc_dynpro using 'SAPMF02D' '0110'.

perform bdc_field using 'BDC_CURSOR'

'KNA1-SPRAS'.

perform bdc_field using 'BDC_OKCODE'

'=UPDA'.

perform bdc_field using 'KNA1-NAME1'

itab-name1.

perform bdc_field using 'KNA1-SORTL'

Itab-sortl.

perform bdc_field using 'KNA1-STRAS'

itab-stras.

perform bdc_field using 'KNA1-LAND1'

itab-land1.

perform bdc_field using 'KNA1-SPRAS'

itab-spras.

perform bdc_dynpro using 'SAPMF02D' '0210'.

perform bdc_field using 'BDC_CURSOR'

'KNB1-AKONT'.

perform bdc_field using 'BDC_OKCODE'

'=UPDA'.

perform bdc_field using 'KNB1-AKONT'

'120000'.

perform bdc_dynpro using 'SAPLRSFH' '0100'.

perform bdc_field using 'BDC_OKCODE'

'/EBACK'.

perform bdc_field using 'BDC_CURSOR'

'RSIODYNP4-LOW(01)'.

perform bdc_insert.

clear it_bdc.

refresh it_bdc.

endloop.

endform. " populate_bdctable

&----


*& Form bdc_dynpro

&----


form bdc_dynpro using value(p_program)

value(p_screen).

it_bdc-program = p_program.

it_bdc-dynpro = p_screen.

it_bdc-dynbegin = 'X'.

append it_bdc.

clear it_bdc.

endform. " bdc_dynpro

&----


*& Form bdc_insert

&----


form bdc_insert .

CALL FUNCTION 'BDC_INSERT'

EXPORTING

TCODE = 'FD01'

  • POST_LOCAL = NOVBLOCAL

  • PRINTING = NOPRINT

  • SIMUBATCH = ' '

  • CTUPARAMS = ' '

TABLES

dynprotab = it_bdc

EXCEPTIONS

INTERNAL_ERROR = 1

NOT_OPEN = 2

QUEUE_ERROR = 3

TCODE_INVALID = 4

PRINTING_INVALID = 5

POSTING_INVALID = 6

OTHERS = 7

.

IF sy-subrc <> 0.

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

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

ENDIF.

endform. " bdc_insert

&----


*& Form close_session

&----


form close_session .

CALL FUNCTION 'BDC_CLOSE_GROUP'

EXCEPTIONS

NOT_OPEN = 1

QUEUE_ERROR = 2

OTHERS = 3

.

IF sy-subrc <> 0.

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

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

ENDIF.

endform. " close_session

&----


*& Form bdc_field

&----


form bdc_field using value(p_fieldname)

value(p_fieldvalue).

IT_BDC-FNAM = P_FIELDNAME.

IT_BDC-FVAL = P_FIELDVALUE.

APPEND IT_BDC.

CLEAR IT_BDC.

endform. " bdc_field

hope this will be of use to u.

reward if helpful.

regards,

keerthi.

Former Member
0 Kudos

Hi David,

Please check that your internal table data comes at last from work area is upload only and use append command it may be the problem try it.

Regards.

Ankur Garg.

Former Member
0 Kudos

Hi David,

For creating the BDC sessions, before looping into the data open the session ( You have put it after the loop), then with in the loop use your bdc insert then refresh the bdc table, after the endloop close the session. I hope this is clear.

Prabhu.