【ABAP】VL10*系の一括処理ログ情報取得後、メッセージテキストを作成する一覧結果
こんにちは。 受注伝票の一覧アドオンに、出荷伝票のバッチ登録結果を表示したい、という要望があり、 サンプルコードを作ってみました。まあそれだけだと面白くもなんともないので、
- OO ABAPライクに(インスタンスを使っているわけでもないのですが(笑))
- メッセージの各値を渡すとメッセージテキストを返すメソッド(cl_sat_t100_message_svc=>get_text)を使用
ということをやってみました。
本当は、SELECT文の抽出の際にメソッドを呼び出しメッセージテキストも取得して LOOPレスにしたかったのですが、今の自分の知識ではできませんでした。 FIELDS句にメソッドのRETURNINGパラメータを持たせることはできそうなのですが、 引き渡しパラメータとしてテーブル項目(T2~MSGIDなど)を設定しようとするとエラーが出てしまいました。 ラッパメソッドを作って間接的に呼び出せば…?と試したりもしましたが、自分の知識不足なのか、うまくいきませんでした。
テストコードなので命名方法がバラバラなのはご容赦願います(笑)
CLASS test DEFINITION. PUBLIC SECTION. TYPES: BEGIN OF typ_data, sammg TYPE vbsk-sammg, smart TYPE vbsk-smart, ernam TYPE vbsk-ernam, erdat TYPE vbsk-erdat, uzeit TYPE vbsk-uzeit, vbnum TYPE vbsk-vbnum, ernum TYPE vbsk-ernum, vstel TYPE vbsk-vstel, vtext TYPE vbsk-vtext, vbeln TYPE vbfs-vbeln, posnr TYPE vbfs-posnr, etenr TYPE vbfs-etenr, zaehl TYPE vbfs-zaehl, msgid TYPE vbfs-msgid, msgno TYPE vbfs-msgno, msgty TYPE vbfs-msgty, msgv1 TYPE vbfs-msgv1, msgv2 TYPE vbfs-msgv2, msgv3 TYPE vbfs-msgv3, msgv4 TYPE vbfs-msgv4, errmsg TYPE string, END OF typ_data, ttyp_data TYPE TABLE OF typ_data. CLASS-DATA: itab_data TYPE ttyp_data, "静的データ定義 w_msg TYPE symsg. CLASS-METHODS: "Static Methodの定義 main, add_msg CHANGING table_data TYPE STANDARD TABLE, disp_data IMPORTING results TYPE STANDARD TABLE. ENDCLASS. CLASS test IMPLEMENTATION. METHOD main. SELECT FROM vbsk AS t1 INNER JOIN vbfs AS t2 ON t1~sammg = t2~sammg FIELDS t1~sammg, t1~smart, t1~ernam, t1~erdat, t1~uzeit, t1~vbnum, t1~ernum, t1~vstel, t1~vtext, t2~vbeln, t2~posnr, t2~etenr, t2~zaehl, t2~msgid, t2~msgno, t2~msgty, t2~msgv1, t2~msgv2, t2~msgv3, t2~msgv4, @space AS errmsg WHERE t1~smart = 'L' ORDER BY t1~smart, erdat, uzeit INTO TABLE @itab_data. * メッセージテキストを付与 add_msg( CHANGING table_data = itab_data ). * Static Methodを同クラスから呼び出し * disp_data( results = itab_data ). disp_data( itab_data ). "必須のIMPORTパラメータなのでパラメータ名省略可 ENDMETHOD. * メッセージテキストをテーブルの各データに追加 METHOD add_msg. FIELD-SYMBOLS <line> TYPE typ_data. "インライン定義すると項目がないとエラー LOOP AT table_data ASSIGNING <line>. w_msg-msgty = <line>-msgty. w_msg-msgid = <line>-msgid. w_msg-msgno = <line>-msgno. w_msg-msgv1 = <line>-msgv1. w_msg-msgv2 = <line>-msgv2. w_msg-msgv3 = <line>-msgv3. w_msg-msgv4 = <line>-msgv4. <line>-errmsg = cl_sat_t100_message_svc=>get_text( w_msg ). ENDLOOP. ENDMETHOD. * 結果出力 METHOD disp_data. cl_demo_output=>display( results ). ENDMETHOD. ENDCLASS. START-OF-SELECTION. test=>main( ).