本帖最后由 wyzlt216123 于 2011-7-18 11:04 编辑
最近参照一些资料,总结了BDC的思路,这里共享一段代码,可以实现简单的BDC处理,和刚刚接触abap的朋友们一起学习下!(注:要上传的文件,为一个txt文档),代码中往bdcdata中加录屏所产生的数据的前提是通过录屏产生,在录屏时,只填写了物料描述和计量单位!至于要实现更为复杂的BDC处理,还请高手们,多多指导我们啊!!
简单的BDC代码
*定义存储录屏数据的内部表
DATA it_bdcdata TYPE STANDARD TABLE OF bdcdata.
DATA wa_bdcdata TYPE bdcdata.
*定义出消息的内部表
DATA it_bdcmsg TYPE STANDARD TABLE OF bdcmsgcoll.
DATA wa_bdcmsg TYPE bdcmsgcoll.
*如果用函数拼接消息,这个变量存储最后拼接好的变量
DATA g_message TYPE char200.
*要批量处理的数据存储的内表表
TYPES: BEGIN OF ty_upload,
maktx(20) TYPE c, "物料描述
vrkme(4) TYPE c, "计量单位
END OF ty_upload.
DATA:it_upload TYPE STANDARD TABLE OF ty_upload.
DATA:wa_upload TYPE ty_upload.
PARAMETERS p_file TYPE rlgrap-filename OBLIGATORY.
*为屏幕定义的输出框添加搜索帮助
AT SELECTION-SCREEN ON VALUE-REQUEST FOR p_file.
*动态选择要上传的文件
PERFORM p_upload_data.
START-OF-SELECTION.
*上传数据到内部表
PERFORM p_upload_table.
*批量导入数据
PERFORM p_bdc_data.
END-OF-SELECTION.
*输出处理消息
PERFORM p_bdcmsg.
*&---------------------------------------------------------------------*
*& Form P_upload_data
*&---------------------------------------------------------------------*
FORM p_upload_data .
DATA: l_wk_rc TYPE i,
l_it_file TYPE filetable,
l_wa_ftbl TYPE file_table.
CLEAR: l_wk_rc.
REFRESH: l_it_file.
CALL METHOD cl_gui_frontend_services=>file_open_dialog
EXPORTING
initial_directory = 'C:'
CHANGING
file_table = l_it_file
rc = l_wk_rc
EXCEPTIONS
file_open_dialog_failed = 1
cntl_error = 2
error_no_gui = 3
not_supported_by_gui = 4
OTHERS = 5.
IF sy-subrc = 0.
READ TABLE l_it_file INDEX 1 INTO l_wa_ftbl.
p_file = l_wa_ftbl-filename.
ELSE.
MESSAGE e999(fz) WITH 'Error for opening the dialog'.
ENDIF.
ENDFORM. " P_upload_data
*&---------------------------------------------------------------------*
*& Form P_upload_table
*&---------------------------------------------------------------------*
FORM p_upload_table .
DATA: l_filename TYPE string.
l_filename = p_file.
CALL FUNCTION 'GUI_UPLOAD'
EXPORTING
filename = l_filename
filetype = 'ASC'
has_field_separator = 'X'
TABLES
data_tab = it_upload
EXCEPTIONS
file_open_error = 1
file_read_error = 2
no_batch = 3
gui_refuse_filetransfer = 4
invalid_type = 5
no_authority = 6
unknown_error = 7
bad_data_format = 8
header_not_allowed = 9
separator_not_allowed = 10
header_too_long = 11
unknown_dp_error = 12
access_denied = 13
dp_out_of_memory = 14
disk_full = 15
dp_timeout = 16
OTHERS = 17 .
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. " P_upload_table
*&---------------------------------------------------------------------*
*& Form P_BDC_DATA
*&---------------------------------------------------------------------*
FORM p_bdc_data .
LOOP AT it_upload INTO wa_upload.
*往bdcdata中加录屏所产生的数据
PERFORM p_append_bdcdata USING:'SAPLMGMM' '0060' 'X' '' '',
'' '' '' 'BDC_CURSOR' 'RMMG1-MATNR',
'' '' '' 'BDC_OKCODE' '/00',
'' '' '' 'RMMG1-MBRSH' 'M',
'' '' '' 'RMMG1-MTART' 'VOLL',
'SAPLMGMM' '0070' 'X' '' '',
'' '' '' 'BDC_CURSOR' 'MSICHTAUSW-DYTXT(01)',
'' '' '' 'BDC_OKCODE' '=ENTR',
'' '' '' 'MSICHTAUSW-KZSEL(01' 'X',
'SAPLMGMM' '4004' 'X' '' '',
'' '' '' 'BDC_OKCODE' '=BU',
'' '' '' 'MAKT-MAKTX' wa_upload-maktx,
'' '' '' 'BDC_CURSOR' 'MARA-MEINS',
'' '' '' 'MARA-MEINS' wa_upload-vrkme,
'' '' '' 'MARA-MTPOS_MARA' 'VOLL'.
CALL TRANSACTION 'MM01' USING it_bdcdata
MODE 'N'
MESSAGES INTO it_bdcmsg.
ENDLOOP.
ENDFORM. " P_BDC_DATA
*&---------------------------------------------------------------------*
*& Form P_BDCMSG
*&---------------------------------------------------------------------*
FORM p_bdcmsg .
*函数MESSAGE_TEXT_BUILD实现将消息转化成文本,可以直接输出。
LOOP AT it_bdcmsg INTO wa_bdcmsg.
CLEAR g_message.
CALL FUNCTION 'MESSAGE_TEXT_BUILD'
EXPORTING
msgid = wa_bdcmsg-msgid
msgnr = wa_bdcmsg-msgnr
msgv1 = wa_bdcmsg-msgv1
msgv2 = wa_bdcmsg-msgv2
msgv3 = wa_bdcmsg-msgv3
msgv4 = wa_bdcmsg-msgv4
IMPORTING
message_text_output = g_message.
WRITE :/ wa_bdcmsg-msgtyp,g_message.
ENDLOOP.
ENDFORM. " P_BDCMSG
*&---------------------------------------------------------------------*
*& Form p_append_bdcdata
*&---------------------------------------------------------------------*
FORM p_append_bdcdata USING p_program
p_dynpro
p_dynbegin
p_fnam
p_fval.
CLEAR wa_bdcdata.
wa_bdcdata-program = p_program.
wa_bdcdata-dynpro = p_dynpro.
wa_bdcdata-dynbegin = p_dynbegin.
wa_bdcdata-fnam = p_fnam.
wa_bdcdata-fval = p_fval.
APPEND wa_bdcdata TO it_bdcdata.
ENDFORM. " p_append_bdcdata |