SAP資格過去問ならSAPnavi

NoteやStripe決済で安全にSAP過去問を購入することができます。
領収書発行可能 / 即時入手可能

SAP過去問 (SAP Exam)

Receiving AMC Messages

アプリケーションサーバABAPのユーザセッションは、ABAPメッセージングチャネル(AMC)に登録して、別のユーザセッションによって公開されたメッセージを受信することができます。

レシーバーオブジェクトの作成

コンシューマーインターフェイスが関連付けられたレシーバーオブジェクトの作成

セッションは、メッセージングチャネルにサブスクライブすることにより、AMCメッセージを受信できます。レシーバーオブジェクトを作成するには、ファクトリメソッドCL_AMC_CLINET_MANAGER => CREATE_MESSAGE_CONSUMERを使用します。これにより、次のパラメーターが渡されます。

  • I_APPLICATION_ID:メッセージングチャネルのコンテナとして使用されるABAPメッセージングチャネルアプリケーションのIDを参照します。

  • I_CHANNEL_ID:メッセージのディスパッチに使用する必要があるメッセージングチャネルを定義します。

  • I_CHANNEL_EXTENSION_ID(オプション):チャネル拡張IDは実行時に作成され、特定のオブジェクトのみがAMCメッセージを受信できるようにします。同じチャネル内線IDを指定した送信者オブジェクトからのメッセージのみが受信されます。

  • I_CHANNEL_FILTER(オプション):フィルター要素を定義することにより、受信するメッセージをフィルター処理できます。プロデューサーのフィルター値がコンシューマーのフィルター基準に一致する場合にのみ、メッセージが配信されます。

このメソッドは、コンシューマーインターフェイスIF_AMC_MESSAGE_CONSUMERを参照変数として返します。これには、次のメソッドが含まれます。

  • START_MESSAGE_DELIVERYは、プログラムがチャネルを介してAMCメッセージを受信できるようにします。メソッドを呼び出した後でのみ、プログラムは実際にメッセージを受信できます。

  • STOP_MESSAGE_DELIVERYは、メッセージの受信を停止します。

コンシューマーインターフェイスのメソッドを使用すると、メッセージ配信を制御できます。これらは、関連するレシーバーインターフェイスを参照します。メソッドが呼び出された後、セッションはAMCにサブスクライブし、受信フェーズが開始されます。レシーバーオブジェクトは、ローカルクラスまたはグローバルクラスからインスタンス化され、タイプ固有のインターフェイスの少なくとも1つを実装します。

  • IF_AMC_MESSAGE_RECEIVER_TEXT

  • IF_AMC_MESSAGE_RECEIVER_BINARY

  • IF_AMC_MESSAGE_RECEIVER_PCP

これらの各インターフェイスには、関連付けられたメッセージタイプごとにコールバックメソッドRECEIVEが含まれています。

待機するメッセージを選択できます。選択に対応して、 WAITステートメントは、メッセージによってトリガーされるコールバックルーチンでそれぞれのフィールド<text_message><binary_message>、および<pcp_message>が提供されるまで続く待機状態を生成します。待機時間は、指定できる秒数に制限されています。トランザクションSMAMCは、待機時間中に登録されたAMCコンシューマーを表示します。

プログラミング例

サンプルプログラムdemo_receive_amcでは、グローバルクラスのレシーバーオブジェクトが、パッケージSABAPDEMOSのAMCアプリケーションDEMO_AMCのメッセージングチャネル/ demo_text/ demo_binary、および/demo_pcpにサブスクライブされています。

プログラムdemo_send_amcを使用して、現在のASABAPの任意のユーザセッションから必要なメッセージを送信することができます。メッセージを受信すると、その内容が表示されます。詳細については、 AMCメッセージの送信をご覧ください

REPORT demo_receive_amc.CLASS message_receiver DEFINITION.  PUBLIC SECTION.    INTERFACES:      if_amc_message_receiver_text,      if_amc_message_receiver_binary,      if_amc_message_receiver_pcp.    DATA: text_message   TYPE string,          binary_message TYPE xstring,          pcp_message    TYPE REF TO if_ac_message_type_pcp.ENDCLASS.CLASS message_receiver IMPLEMENTATION.  METHOD if_amc_message_receiver_text~receive.    text_message = i_message.  ENDMETHOD.  METHOD if_amc_message_receiver_binary~receive.    binary_message = i_message.  ENDMETHOD.  METHOD if_amc_message_receiver_pcp~receive.    pcp_message = i_message.  ENDMETHOD.ENDCLASS.CLASS amc_demo DEFINITION.  PUBLIC SECTION.    CLASS-METHODS main.ENDCLASS.CLASS amc_demo IMPLEMENTATION.  METHOD main.    DATA(receiver) = NEW message_receiver( ).    TRY.        cl_amc_channel_manager=>create_message_consumer(            i_application_id = 'DEMO_AMC'            i_channel_id     = '/demo_text'            )->start_message_delivery( i_receiver = receiver ).      CATCH cx_amc_error INTO DATA(text_exc).        cl_demo_output=>display( text_exc->get_text( ) ).    ENDTRY.    TRY.        cl_amc_channel_manager=>create_message_consumer(            i_application_id = 'DEMO_AMC'            i_channel_id     = '/demo_binary'            )->start_message_delivery( i_receiver = receiver ).      CATCH cx_amc_error INTO DATA(binary_exc).        cl_demo_output=>display( binary_exc->get_text( ) ).    ENDTRY.    TRY.        cl_amc_channel_manager=>create_message_consumer(            i_application_id = 'DEMO_AMC'            i_channel_id     = '/demo_pcp'            )->start_message_delivery( i_receiver = receiver ).      CATCH cx_amc_error INTO DATA(amc_exc).        cl_demo_output=>display( amc_exc->get_text( ) ).    ENDTRY.    WAIT FOR MESSAGING CHANNELS         UNTIL receiver->text_message   IS NOT INITIAL AND               receiver->binary_message IS NOT INITIAL AND               receiver->pcp_message    IS BOUND         UP TO 60 SECONDS.    TYPES:      BEGIN OF struct,        name  TYPE string,        value TYPE string,      END OF struct,      fields TYPE STANDARD TABLE OF struct WITH EMPTY KEY.    TRY.        DATA(fields) = VALUE fields(          ( name = 'Field1'            value = receiver->pcp_message->get_field( 'Field1' ) )          ( name  = 'Field2'            value = receiver->pcp_message->get_field( 'Field2' ) ) ).        DATA(body) = cl_abap_codepage=>convert_from(          receiver->pcp_message->get_binary( ) ).      CATCH cx_ac_message_type_pcp_error INTO DATA(pcp_exc).        cl_demo_output=>display( pcp_exc->get_text( ) ).    ENDTRY.    cl_demo_output=>new(      )->begin_section( receiver->text_message      )->begin_section( 'Direct Message'      )->write_json( receiver->binary_message      )->next_section( 'Push Channel Protocol (PCP)'      )->write( fields      )->write_html( body      )->display( ).  ENDMETHOD.ENDCLASS.START-OF-SELECTION.  amc_demo=>main( ).

タイトルとURLをコピーしました