我已经导出了一个带有事务SE16的表的内容,方法是选择所有条目,然后选择Download,未转换。
我希望将这些条目导入到另一个系统中(在该系统中,存在相同的表并处于活动状态)。
此外,当我导入时,有可能一些条目(旧条目)已经存在特定的键。
其他条目在要导入它们的表中没有一个具有相同键的字段(新条目)。
是否有一种方法可以轻松地用第一个系统提供的文件更新第二个系统中的表?如果需要,我可以导出其他3种格式类型的数据(电子表格、富文本格式和HTML格式)。但在我看来,似乎电子表格和丰富的文本格式有时会破坏数据,而html太冗长了。
根据流行的需求,编辑,我试图导出/导入的表是一个Z表,其字段都是数字、字符、日期或时间字段(平面数据类型)。
我试图这样做,因为客户端没有任何基本资源来帮助他们传输,并且希望"kinna“自动化更新一个系统中的一个表的过程。
目前这样做是一个商业要求,但我愿意接受建议(而且客户也是开放的)
发布于 2013-08-26 02:34:31
编辑
好吧,我怀疑你在评论中所描述的东西是不存在的,但是你可以很容易地写出这样的东西:
创建一个接受以下条件的方法(如果浮动您的船,则创建一个函数模块):
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.如果任何键已经存在,您将得到subrc=4的返回代码,但任何新条目都将被插入。
备注有很多原因说明为什么您不会在SAP标准表中这样做。最突出的是,数据模型几乎总是比我们所知道的更多。另外,在创建事务性数据时,经常会有后续事件或工作流启动,如果您直接更新数据库,情况就不会如此。根据经验,直接更新SAP标准表通常是个坏主意。
在这种情况下,尝试找到一个BADI,或者如果它不可用,记录一个BDC并以这种方式进行更新。
发布于 2013-08-28 12:06:56
如果系统场景设置正确,您的客户端将不需要任何类型的基本操作支持来执行传输。因此,与其重新发明车轮,我强烈建议在CTS和TMS设置合理的情况下,尽快了解它们能做些什么。
https://stackoverflow.com/questions/18404082
复制相似问题