【问题标题】:Can I import SAP tables that were exported by SE16?我可以导入由 SE16 导出的 SAP 表吗?
【发布时间】:2013-08-23 13:28:30
【问题描述】:

我通过选择所有条目并选择“下载,未转换”,导出了带有事务 SE16 的表的内容。

我想将这些条目导入另一个系统(同一个表存在并且处于活动状态)。

此外,当我导入时,有可能特定键已经存在于多个条目(旧条目)。

其他条目在要导入它们的表中没有具有相同键的字段(新条目)。

有没有办法用第一个系统提供的文件轻松更新我在第二个系统中的表?如果需要,我可以以 3 种其他格式类型(电子表格、富文本格式和 HTML 格式)导出数据。在我看来,电子表格和富文本格式有时会破坏数据,而且 html 过于冗长。

[编辑] 根据大众的需求,我试图导出/导入的表是一个 Z 表,其字段都是数字、字符、日期或时间字段(平面数据类型)。

我正在尝试这样做,因为客户没有任何基础资源来帮助他们传输,并且希望“kinna”自动化更新一个系统中的一张表的过程。

目前这是业务要求,但我愿意接受建议(客户也愿意)

【问题讨论】:

  • ...又一次尝试破坏系统而不是使用工厂提供的工具? :-)
  • 好吧,我想将条目附加到传输将是标准方式。但是没有理由不能导入数据,就像导出数据一样:)
  • @vwegert 我是否可以使用系统提供的工具?或者我的一些标准选项是什么?
  • 您没有给出任何提示,说明您为什么要将哪种数据从哪个系统移动到哪个系统 - 我们准备如何回答这个问题?例如,如果您的原始表格包含 RAW 或 FLTP 内容甚至 STRING,您可能永远无法再次上传数据。一切尽在细节之中……
  • @vwegert 已更新。该表仅包含字符和数字类型。

标签: data-migration replicate sap-basis sap-data-dictionary


【解决方案1】:

编辑

好的,我怀疑您在评论中描述的内容是开箱即用的,但是您可以轻松地写出这样的内容:

创建一个接受以下内容的方法(或功能模块,如果它能让你的船漂浮):

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=&gt;gui_upload 在这种情况下应该返回 sy-subrc &gt; 0,因此您可以在损坏任何数据之前退出。

原答案:

我假设您要更新 z 表而不是 SAP 标准表。

您可能需要稍微格式化您的数据文件以使其以制表符或逗号分隔。

然后您可以使用cl_gui_frontend_services=&gt;gui_upload上传数据文件

那么如果要覆盖表中已有的数据可以使用

modify zmydbtab from table it_importeddata.

如果您不想覆盖现有条目,您可以使用。

insert zmydbtab from table it_importeddata.

如果任何键已存在,您将获得 sy-subrc = 4 的返回码,但将插入任何新条目。

注意 对于 SAP 标准表,您不这样做的原因有很多。最突出的是,数据模型几乎总是比我们所知道的要多。此外,在创建事务数据时,通常会启动后续事件或工作流,如果您直接更新数据库,则不会出现这种情况。根据经验,直接更新 SAP 标准表通常是个坏主意。

在这种情况下,请尝试查找 BADI,或者如果不可用,请记录 BDC 并以这种方式进行更新。

【讨论】:

  • 感谢信息。最终我完成了你建议的操作,但我希望会有这样的东西 gui_upload -> magic_fuba -> internal_table_of_comparible_type -> 从 internal_table_of_compatible_type 修改 zmytab。所以我会给你+1,但不能接受你当前形式的答案。谢谢!
  • 您的解决方案不起作用 :P 在以表格格式转换数据时它搞砸了。无论如何,我确实做到了,它有点复杂。如果您仍然想发布代码,我仍然会奖励“正确”答案:)
  • 是assign lt_table->*​​ to 语句失败还是调用cl_gui_frontend_services=>gui_upload?
【解决方案2】:

如果系统环境设置正确,您的客户端将不需要任何类型的基本操作支持来执行传输。因此,与其重新发明轮子,我强烈建议在 CTS 和 TMS 设置合理的设置后了解它们可以做什么。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2022-06-22
    • 1970-01-01
    • 2011-03-17
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2023-04-03
    • 2022-10-21
    相关资源
    最近更新 更多