1

内部テーブルを自分の PC にダウンロードしようとしましたが、ダウンロードには変換出口を使用する必要があります。

例: テーブルT002には、1 文字 (T0002-SPRAS) の言語キーが含まれています。

WRITE T0002-SPRAS.変換ルーチンをISOLA使用して 2 文字の言語キーを取得すると ( EENに...)、この変換ルーチンをエクスポートに使用する必要があります。

私のテストレポート:

REPORT  Y_MY_DOWNLOAD_TEST.

CONSTANTS: c_filename type string VALUE 'C:\temp\test.txt'.
data: it_table type table of t002.

start-of-selection.

  SELECT * from t002 into table it_table.

* Start file download
  CALL METHOD cl_gui_frontend_services=>gui_download
    EXPORTING
      filename                  = c_filename
      filetype                  = 'ASC' "or DAT
      WRITE_FIELD_SEPARATOR     = 'X'
      WRITE_LF                  = 'X'
*      DAT_MODE                  = SPACE
      codepage                  = '4110'        "UNICODE
      SHOW_TRANSFER_STATUS      = 'X'
      WRITE_LF_AFTER_LAST_LINE  = 'X'
    CHANGING
      data_tab                  = it_table
    EXCEPTIONS
      OTHERS                    = 99.

  write: 'end'.

結果は、変換出口を使用しないファイルです (英語はEを保持します)。

SAPのドキュメントには、次のパラメーターが記載されていますdat_mode

このフラグが設定されている場合 .... 変換出口は実行されません。

フラグを設定していないので、変換が完了していると思います。dat_modeさまざまな組み合わせ (オン/オフ、filetypeASC および DAT)を試しましたが、変換が見つかりませんでした。

備考:

  • SAP リリース 7.01、サポート パッケージ SAPKB70107 を使用しています。ユニコードシステムです。
  • T002 は一例です。私の実際のデータは、言語キーを含む他のデータです。

gui_download(または別の標準メソッド/関数モジュール)を使用したソリューションを探しています。

次のような独自のエクスポート ファイルを作成したくありません。

data: 
  tmp type string,
  targetline type string,
  targettable type table of string.
loop at it_table into sourceline.
  "This could be done dynamic with field symbols and ASSIGN COMPONENT
  write sourceline-field1 to tmp. 
  CONCATENATE targetline ';' tmp into targetline.
  "...
  APPEND targetline to targettable.
endloop.

これは可能な解決策ですが、この場合、エクスポート ファイルのコンシューマーを適応させる方が簡単です。

4

3 に答える 3

1

ありえないと思います。ただし、フィールドのタイプを含むクエリでLAISO値 (SPRAS出力変換関数が返す値) を結合し、タイプ フィールドをタイプでSPRAS置き換えるクエリにカスタム タイプを使用することができます。テーブル を使用した例を次に示します。SPRASLAISO
T003P

types: begin of ty_t003p,
         client type mandt,
         spras type laiso,
         auart type aufart,
         txt type auarttext,
       end of ty_t003p.

data ta_t003p type standard table of ty_t003p.

select t003p~client t002~laiso t003p~auart t003p~txt into table ta_t003p from t003p inner join t002 on t002~spras = t003p~spras.

cl_gui_frontend_services=>gui_download(
  exporting
    filename = 'C:\temp\test.txt'
    filetype = 'DAT'
  changing
    data_tab = ta_t003p ).
于 2012-05-12T10:43:06.730 に答える
0

わかった、

次に、SE11を使用してテーブルに移動し、変換ルーチンでデータ要素をダブルクリックしてデータ要素を表示します。次に、ドメインをダブルクリックしてドメインを表示し、コンバースをダブルクリックします。ルーチン名。(この場合はISOLA)出力値(入力値はdbにあります)が必要なので、各テーブルエントリのsprasフィールドでCONVERSION_EXIT_ISOLA_INPUTを実行します。

何かのようなもの

data: wa_table type t002.

loop at it_table into wa_table.
CALL FUNCTION 'CONVERSION_EXIT_ISOLA_OUTPUT'
  EXPORTING
    input         = wa_table-spras
 IMPORTING
    OUTPUT        = wa_table-spras.

modify it_table from wa_table index sy-tabix.

endloop.

この時点で、it_tableでcl_gui_frontend_services=>gui_downloadを引き続き使用できます。

WRITEステートメントで問題が発生することを除けば、これはWRITEステートメントの使用に近いことを理解しています。

私の仕事で行ったことは、データディクショナリを使用してアップロードダウンロードプログラムを生成するプログラムを作成することです。

テーブルDD04Lには、各テーブルフィールドの変換出口が含まれており、次のように実行します。

  CONCATENATE 'wa_db-' wa_field-fieldname INTO g_string.

  SELECT SINGLE * FROM dd03l INTO wa_dd03l WHERE tabname EQ p_tab AND fieldname EQ wa_field-fieldname.
  SELECT SINGLE * FROM dd04l INTO wa_dd04l WHERE rollname EQ wa_dd03l-rollname.

  IF wa_dd04l-lowercase IS INITIAL.
    _repl 'translate wa_field to upper case.' g_string.
  ENDIF.
  _add 'if g_oops is initial.'.
  IF wa_dd04l-convexit IS NOT INITIAL.

    _add  'try.'.
    _repl 'move wa_field to &.' g_string.
    _add  'CATCH CX_DYNAMIC_CHECK into gcl_dynamic_check.'.
    _add  'l_error = gcl_dynamic_check->get_text( ).'.
    _add  'l_long_error = gcl_dynamic_check->GET_LONGTEXT( ).'.
    _repl 'concatenate ''Conversion error'' wa_field ''into & ->'' l_error into l_error separated by space.' g_string.
    _add  'condense l_error.' .
    _add  'write l_error. new-line.' .
    _add  'write l_long_error. new-line.' .
    _add  'ENDTRY.'.


    CONCATENATE 'CONVERSION_EXIT_' wa_dd04l-convexit '_INPUT' INTO g_fm.

    _repl '    CALL FUNCTION ''&''' g_fm.
    _add  '      EXPORTING'.
    _repl '        input             = &' g_string.
    _add  '      IMPORTING'.
    _repl '        output            = &' g_string.
    _add  '     EXCEPTIONS'.
    _add  '       length_error       = 1'.
    _add  '       OTHERS             = 2.'.

    IF sy-subrc <> 0.
      MESSAGE ID sy-msgid TYPE sy-msgty NUMBER sy-msgno
              WITH sy-msgv1 sy-msgv2 sy-msgv3 sy-msgv4.
    ENDIF.

生成されたABAPにコードを追加する定義がいくつかあります

DEFINE _repl.
  wa_prog = &1.
  replace all occurrences of '&' in wa_prog with &2.
  append wa_prog to it_prog.
END-OF-DEFINITION.

DEFINE _add.
  append &1 to it_prog.
END-OF-DEFINITION.

書くのはとても楽しいです。

于 2012-05-10T19:23:47.497 に答える