3

MESSAGEABAPオブジェクトクラスのヘッダー情報に、ステートメントで使用するメッセージクラスを入力することができます。これMESSAGE-IDは、レポートまたは関数プールのステートメントのように機能します。生成されたセクションのどこにもヘッダーデータに入力したメッセージクラスが見つからないため、CLASS-POOLどこかのトップレベルステートメントに生成されたと思います。

一部のライブラリ(BALアプリケーションロギングなど)では、変数またはメソッドパラメータを使用してメッセージクラスを指定する必要があります。これまで、メッセージクラスを指定する定数を定義し、その定数を使用してきました。ヘッダーデータで指定されたメッセージクラスに他の方法でアクセスして、その冗長な変数を取り除くことができるかどうか疑問に思っています。

誰かがそうする方法を見つけましたか?

編集:新しい方法は古い方法よりも簡単なはずです-私は、その定数を取り除くためだけにCLASS-CONSTRUCTORデータベースアクセスまたは関数呼び出しを追加して実行するほど夢中ではありません。SEO_*

4

3 に答える 3

5

CLASS-CONSTRUCTORメッセージクラスでクラス属性を設定する必要があると思います。

MESSAGEステートメント with句には、システム変数を設定するというINTO副作用があります。SY-したがって、次のようなものを入れることができますCLASS-CONSTRUCTOR

DATA: lf_dummy TYPE string.
MESSAGE s999 INTO lf_dummy.
af_msgid = sy-msgid.
于 2012-10-24T09:15:23.693 に答える
4

あなたが求めていることを行うための構文に出くわしていません。以下に概説する理由から、SAP はそのような機能を含める必要性を認識していなかったと考えられます。

私の経験では、メッセージ クラスはメッセージの属性であり、それを生成するオブジェクトの属性ではないため、メッセージの型、数、および変数と一緒に保持する必要があります。たとえば、オブジェクトがエラーの番号を返す場合、id (クラス) も返す必要があります。

この観点から、ABAP-OO クラスに割り当てられたメッセージ クラスを知る必要がある理由がわかりません。ABAP-OO クラスによって返されるメッセージのメッセージ クラスを知る必要があるだけです。

これを管理する通常の方法は、メッセージをダミー フィールドに入れ、サブルーチンを使用してsy-msg*フィールドの内容をBAPIRETURN構造体に入力することです。BAPIRETURN次に、この構造体を呼び出し元に返します。このようにして、メッセージのタイプ、ID、番号、および変数がすべて一緒に保持されます。

于 2012-10-26T18:11:19.520 に答える
4

クラス ビルダー API を使用できます。

data the_class type ref to cl_oo_class.
create object the_class
  exporting
    clsname = `ZCL_SOMECLASS`.
data message_class type arbgb.
message_class = the_class->class-msg_id.
于 2012-10-28T19:37:54.123 に答える