2012-05-10 10 views
0

私は自分のPCに内部テーブルをダウンロードしようとしています。ダウンロードには変換終了を使用する必要があります。SAP:変換終了のデータをダウンロードするにはどうすればよいですか?

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

私はISOLA変換ルーチンWRITE T0002-SPRAS.使用し、私はこの変換ルーチンは、私の輸出のために使用すべきである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 documentationは、パラメータdat_modeに言及します。

私はフラグを設定しないので、変換は行われます。 異なる組み合わせ(dat_modeオン/オフ、filetype ASCと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. 

これは可能な解決策になりますが、私は、エクスポート・ファイルの消費者を適応させるため、この場合には、それは容易になるだろう。

+0

Plsはこの[リンク](http://www.sdn.sap.com/irj/scn/index?rid=/library/uuid/840ad679-をチェック0601-0010-cd8e-9989fd650822#q-18) – Dhivya

+0

興味深いヒントですが、私の問題は何も見つかりませんでした。 3つのタイトルが見つかりました* Microsoft Excel形式*で内部テーブルを保存していますが、ABAPからのダウンロードではなく、他のトピック(デバッグ時のダウンロード、プログラムのスキャン、プログラムの比較)を処理します。 – knut

答えて

1

私はそれが可能ではないと思います。ただし、SPRASの出力変換関数が返す値であるLAISO値(SPRASの出力変換関数が返す値)をSPRAS型のフィールドに含めることができ、タイプのフィールドをタイプのフィールドに置き換えるクエリのカスタムタイプを使用することができます。 。ここ
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). 
+1

ビューは良い考えです。私は一般的な選択を使用しますが、私は 'SE11'でビューを定義し、元のテーブルを代わりに使用することができます。アイデアをありがとう。 – knut

0

さて、ここで

が行く、テーブルに行き、SE11を使用し、ダブル・データ・エレメントを表示するには、変換ルーチンでデータ要素をクリックしてください。次に、ドメインをダブルクリックしてドメインを表示し、次に対話をダブルクリックします。ルーチン名。 (この場合はISOLA)各テーブルエントリのsprasフィールドでCONVERSION_EXIT_ISOLA_INPUTを実行する出力値(入力値はdb)を必要とします。あなただけit_table上cl_gui_frontend_services => gui_downloadを継続して使用することができます。この時点で

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. 

よう

何か。

これは、WRITE文が問題になることを除いて、WRITE文の使用に近いことを認識しています。

私たちの仕事では、データダウンロードを使用してダウンロードダウンロードプログラムを生成するプログラムを作成しています。

表DD04Lは、各テーブルのフィールドの変換出口が含まれ、その後、私たちは何かがこの好き:生成された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. 

にコードを追加し、いくつかの定義と

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. 

それはトンです

+0

しかし、テーブルフィールドの内部の長さは1です。変換された結果(2文字)は、1文字の長さのフィールドと短縮で移動されます。私が避けたい別の2文字のフィールドで別のテーブルを使用すると、 'WRITE wa_table-spras to wa_table2-spras'を簡単に使うことができます。' call function'経由でcenversion exitを呼び出す必要はありません。 – knut

+0

ええ、それは発電機でさえも欠陥です。あなたのカウンターパートは本当に2文字必要ですか? – tomdemuyt

+0

私はどちら側が変換を行わなければならないか選択します。私は1文字と2文字のコード(= T002)のリストを提供し、相手がフラグを変換することができます。しかし、私がそうする前に、SAPで簡単に可能性があるかどうかをチェックしたいと思っていました。過去に私はSE16エクスポートを使用しました。変換の問題はありませんでした。他の問題を避けるため、私はSE16を小さなレポートに置き換えました - 今私はこの変換の問題があります。 – knut

関連する問題