07-18-2006 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.
07-18-2006 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.
07-18-2006 6:34 PM
07-18-2006 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.
07-18-2006 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.
07-18-2006 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.