编辑
好的,我怀疑您在评论中描述的内容是开箱即用的,但是您可以轻松地编写类似的内容:
创建一个接受以下内容的方法(或功能模块,如果它能让你的船漂浮):
iv_table name TYPE string and
iv_filename TYPE string
这将是方法:
method upload_table.
data: lt_table type ref to data,
lx_root type ref to cx_root.
field-symbols: <table> type standard table.
try.
create data lt_table type table of (iv_table_name).
assign lt_table->* to <table>.
call method cl_gui_frontend_services=>gui_upload
exporting
filename = iv_filename
has_field_separator = abap_true
changing
data_tab = <table>
exceptions
others = 4.
if sy-subrc <> 0.
"Some appropriate error handling
"message id sy-msgid type 'I'
" number sy-msgno
" with sy-msgv1 sy-msgv2
" sy-msgv3 sy-msgv4.
return.
endif.
modify (p_name) from table <table>.
"write: / sy-tabix, ' entries updated'.
catch cx_root into lx_root.
"lv_text = lx_root->get_text( ).
"some appropriate error handling
return.
endtry.
endmethod.
这仍然需要您确保导出的文件与您要导入的表匹配。但是,在这种情况下cl_gui_frontend_services=>gui_upload
应该返回sy-subrc > 0
,因此您可以在损坏任何数据之前退出。
原答案:
我假设您要更新 z 表而不是 SAP 标准表。
您可能需要稍微格式化您的数据文件以使其以制表符或逗号分隔。
然后,您可以使用上传数据文件cl_gui_frontend_services=>gui_upload
然后,如果您想覆盖表中的现有数据,您可以使用
modify zmydbtab from table it_importeddata.
如果您不想覆盖现有条目,您可以使用。
insert zmydbtab from table it_importeddata.
如果任何键已存在,您将获得 sy-subrc = 4 的返回码,但将插入任何新条目。
注意
有很多原因导致您不对 SAP 标准表执行此操作。最突出的是,数据模型几乎总是比我们所知道的要多。此外,在创建事务数据时,通常会启动后续事件或工作流,如果您直接更新数据库,则不会出现这种情况。根据经验,直接更新 SAP 标准表通常不是一个好主意。
在这种情况下,请尝试查找 BADI,或者如果不可用,请记录 BDC 并以这种方式进行更新。