0

すべてのエントリを選択し、[ダウンロード、未変換] を選択して、トランザクション SE16 でテーブルの内容をエクスポートしました。

これらのエントリを別のシステム (同じテーブルが存在し、アクティブなシステム) にインポートしたいと考えています。

さらに、インポートすると、多数のエントリ (古いエントリ) に対して特定のキーが既に存在する可能性があります。

他のエントリには、それらがインポートされるテーブルに存在する同じキーを持つフィールドがありません (新しいエントリ)。

最初のシステムから提供されたファイルを使用して、2 番目のシステムのテーブルを簡単に更新する方法はありますか? 必要に応じて、他の 3 つの形式 (スプレッドシート、リッチ テキスト形式、HTML 形式) でデータをエクスポートできます。スプレッドシートやリッチ テキスト形式がデータを破損することがあり、html が冗長すぎるように思えます。

[編集] 一般的な要求に従って、エクスポート/インポートしようとしているテーブルは、フィールドがすべて数値、文字、日付、または時刻フィールド (フラット データ型) である Z テーブルです。

クライアントには転送に役立つ基本リソースがなく、1 つのシステム内のテーブルの 1 つを更新するプロセスを「キンナ」自動化したいため、私はこのようにしようとしています。

現時点では、このようにするのはビジネス上の要求ですが、私は提案を受け付けています (クライアントもオープンです)。

4

2 に答える 2

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=>gui_uploadは戻る必要があるため、データが破損する前に救済できます。sy-subrc > 0

元の回答:

SAP 標準テーブルではなく、Z テーブルを更新すると仮定します。

タブまたはカンマで区切られるように、おそらくデータファイルを少しフォーマットする必要があります。

その後、次を使用してデータ ファイルをアップロードできます。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 を記録し、その方法で更新を行います。

于 2013-08-26T02:34:31.927 に答える
0

システム ランドスケープが正しく設定されていれば、クライアントは、トランスポートを実行するためにいかなる種類の基本操作サポートも必要としません。したがって、車輪を再発明する代わりに、CTS と TMS が適切な設定でセットアップされたら何ができるかを把握することを強くお勧めします。

于 2013-08-28T12:06:56.567 に答える