通过选择所有条目并选择未转换的下载,我已通过事务SE16导出了表的内容。
我想将这些条目导入另一个系统(该表存在并且处于活动状态)。
此外,当我导入时,可能存在许多条目(旧条目)的特定键。
[其他条目将在要导入它们的表中没有具有相同键的字段(新条目)。
是否有一种方法可以使用第一个系统提供的文件轻松地在第二个系统中更新我的表?如果需要,我可以导出其他3种格式类型的数据(电子表格,RTF格式和HTML格式)。在我看来,尽管像电子表格和RTF格式有时会破坏数据,并且html太冗长。
[编辑]根据流行的需求,我要导出/导入的表是Z表,其字段均为数字,字符,日期或时间字段(平面数据类型)。
我正在尝试这样做,因为客户端没有任何基础资源来帮助他们进行传输,并且希望“ kinna”使在一个系统中更新表之一的过程自动化。
目前,这样做是一项业务要求,但我愿意接受建议(客户也很开放)
编辑
好吧,我怀疑您在评论中所描述的内容是开箱即用的,但您可以轻松地写出这样的内容:
创建一个接受以下内容的方法(或功能模块,如果它使您的船浮起):
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并以这种方式进行更新。
如果正确设置了系统格局,则您的客户端将不需要任何种类的基础操作支持即可执行传输。因此,我强烈建议不要赶快发明轮子,而要在CTS和TMS设置合理的设置后赶上它们。