‎2006 Jul 18 6:30 PM
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.
‎2006 Jul 18 6:35 PM
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.
‎2006 Jul 18 6:34 PM
‎2006 Jul 18 6:35 PM
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.
‎2006 Jul 18 6:38 PM
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.
‎2006 Jul 18 6:44 PM
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.