Function Imports(/iwbep/if_mgw_appl_srv_runtime~execute_action)

SAPの文書:Function Imports – SAP NetWeaver Gateway Foundation (SAP_GWFND) – SAP Library

The Open Data Protocol(OData)には、HTTPメソッドPOST、GET、PUT / MERGE、およびDELETEにマップされる標準のCRUD(Create, Retrieve, Update, and Delete)操作が含まれています。

さらに、ODataは、標準のCRUD操作にマップできないものについては、HTTPメソッドGETまたはPOSTによって呼び出すことができるさらなるサービス操作(関数インポート)をサポートします。 データモデル内に関数インポートを作成することにより、Service Builderでそのような追加のサービス操作を実装できます。

たとえば、次のカスタム操作用の関数インポートを作成できます。

  • Confirm Work Item
  • Check Flight Availability

カスタム操作を呼び出すために新しい関数インポートを作成するのは簡単ですが、使用する操作が標準のCRUD操作を使用して呼び出すことができる場合は、関数インポートを作成しないでください。 つまり、標準操作では呼び出せないカスタム操作に対してのみ関数インポートを作成する必要があります。

簡単に言えば、操作がCRUDシナリオに収まらない場合は、関数インポートで実行できます。

  

手順:

テーブルZUSERINFOが以下のようになっているとします。

/wp-content/uploads/2014/03/gw18_403352.jpg

そして特定の国別にユーザーを取得したいのであれば、関数インポートを実装できます。 関数インポートをUsersByCountryと呼びましょう。

データモデルを右クリックして関数インポートを作成します。 適切な名前を入力してください.

  又はCreating High-Quality OData Services – SAP NetWeaver Gateway Foundation (SAP_GWFND) – SAP Library

/wp-content/uploads/2014/03/gw19_403353.jpg

下記のような必要事項を記入してください。 ここで覚えておいて欲しいのは、私たちはユーザのコレクションを返したいので、戻りエンティティセットとHTTPメソッドタイプをGETとして、戻りカーディナリティを0..nとして選択したことです。

/wp-content/uploads/2014/03/gw20_403354.jpg

関数インポートパラメータをクリックして、以下に示すようにインポートパラメータを作成します。 この場合、国の値を渡したいだけなので、国として1つのパラメータを指定します。

/wp-content/uploads/2014/03/gw21_403355.jpg

最後にプロジェクトを保存し、プロジェクトの一貫性をチェックしてランタイムオブジェクトを生成します。 すべて問題ないかどうかをチェックするには、GWクライアントで/ sap / opu / odata / sap / ZUSERINFO_SRV / $ metadataのようにサービスメタデータURLを実行します。

/wp-content/uploads/2014/03/gw22_403356.jpg

今度は関数インポート操作を実装します。 DPC_EXTクラスに移動して、メソッド/ IWBEP / IF_MGW_APPL_SRV_RUNTIME〜EXECUTE_ACTIONを再定義してください。

 

関数インポートを実装するためのコードを下に置きます。

METHOD /iwbep/if_mgw_appl_srv_runtime~execute_action.

  DATA: ls_parameter  TYPE /iwbep/s_mgw_name_value_pair,

        lv_country    TYPE string,

        lt_userinfo   TYPE TABLE OF zuserinfo,

        ls_userinfo   TYPE zuserinfo,

        ls_entity     TYPE  zcl_zuserinfo_mpc=>ts_user,

        lt_entityset  TYPE zcl_zuserinfo_mpc=>tt_user.

  IF iv_action_name = 'UsersByCountry'. " Check what action is being requested

    IF it_parameter IS NOT INITIAL.

* Read Function import parameter value

      READ TABLE it_parameter INTO ls_parameter WITH KEY name = 'Country'.

      IF sy-subrc = 0.

        lv_country = ls_parameter-value.

      ENDIF.

      IF lv_country IS NOT INITIAL.

        SELECT  * FROM zuserinfo INTO TABLE lt_userinfo WHERE country = lv_country.

        LOOP AT lt_userinfo INTO  ls_userinfo .

          ls_entity-userid   = ls_userinfo-userid.

          ls_entity-firstname = ls_userinfo-firstname.

          ls_entity-lastname = ls_userinfo-lastname.

          ls_entity-email    = ls_userinfo-email.

          ls_entity-phone    = ls_userinfo-phone.

          ls_entity-country  = ls_userinfo-country.

          APPEND ls_entity TO lt_entityset.

        ENDLOOP.

* Call methos copy_data_to_ref and export entity set data

        copy_data_to_ref( EXPORTING is_data = lt_entityset

                CHANGING cr_data = er_data ).

      ENDIF.

    ENDIF.

  ENDIF.

ENDMETHOD.

 

関数インポートをテストするには、/ sap / opu / odata / sap / ZUSERINFO_SRV / UsersByCountry?Country = 'US'としてクエリを実行します

 

複数のパラメータがある場合は、カンマで区切ります。

/wp-content/uploads/2014/03/gw23_403357.jpg

Here IO_TECH_REQUEST_CONTEXT refers to /IWBEP/IF_MGW_REQ_FUNC_IMPORT

 

OData QueryMethod ParameterAlternative way to get the valueCoding required to implement Query Operation
/sap/opu/odata/sap/ZUSERINFO_SRV/UsersByCountry?Country=’US’ IT_PARAMETER DATA: my_parameter TYPE  /iwbep/t_mgw_name_value_pair. my_parameter = io_tech_request_context->get_parameters( ). Yes

 

 

参考文献:

 

Creating High-Quality OData Services – SAP NetWeaver Gateway Foundation (SAP_GWFND) – SAP Library

 

posted @ 2019-06-19 08:03  Park_SAP  阅读(205)  评论(0)    收藏  举报