通过选择所有条目并选择下载,未转换,我已导出事务SE16的表的内容。
我想将这些条目导入另一个系统(同一个表存在且处于活动状态)。
此外,当我导入时,对于许多条目(旧条目),特定密钥可能已经存在。
其他条目不会在表中存在具有相同键的字段(新条目)。
有没有办法使用第一个系统提供的文件轻松更新第二个系统中的表格?如果需要,我可以导出其他3种格式类型的数据(电子表格,富文本格式和HTML格式)。在我看来,虽然电子表格和富文本格式有时会破坏数据,但html太冗长了。
[编辑] 根据大众需求,我试图导出/导入的表是一个Z表,其字段都是数字,字符,日期或时间字段(平面数据类型)。
我正在尝试这样做,因为客户端没有任何基础资源来帮助他们传输,并希望“kinna”自动化更新一个系统中的一个表的过程。
目前这是一个业务请求,这样做,但我愿意接受建议(客户也是开放的)
答案 0 :(得分:0)
修改强>
好的,我怀疑你在评论中描述的内容是开箱即用的,但你可以轻松地写出类似的内容:
创建一个接受以下内容的方法(或浮动你的船的功能模块):
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,或者如果没有BADI,请记录BDC并以此方式进行更新。
答案 1 :(得分:0)
如果系统架构设置正确,您的客户端将不需要任何类型的基础操作支持来执行传输。因此,我强烈建议不要重新发明轮子,以便了解CTS和TMS在设置合理设置后可以做些什么。