メソッドの実装
11.4 メソッドの実装
単一データを取得するメソッド
①トランザクションコード:「SEGW」でSAP Gateway Service Builderを実行します。
②対象のプロジェクト直下にある、Runtime Artifactsをダブルクリックします。
③ZCL_ZODATA_YYMMnnn_DPC_EXTをダブルクリックします。
④メソッド>継承メソッドを押下します。
CUSTOSET_GET_ENTITYを右クリックし、再定義を押下します。
⑤デフォルトのコードを削除します。
⑥以下内容を入力します。
(テーブルKNA1から1件のデータを取得する処理)
CUSTOSET_GET_ENTITYのコード補足
記述したコードは以下の通りです。
DATA LV_KUNNR TYPE KUNNR.
得意先を条件に内部テーブルからデータ抽出
TRY.
“得意先を変数に格納
LV_KUNNR = IT_KEY_TAB[ 1 ]-VALUE.
CATCH CX_SY_ITAB_LINE_NOT_FOUND.
ENDTRY.
格納した変数(得意先)を条件にテーブルKNA1から1件のデータ取得
SELECT SINGLE *
FROM KNA1
INTO ER_ENTITY
WHERE KUNNR = LV_KUNNR.
内部テーブル読み込み
IT_KEY_TABは名前の通り、エンティティで設定したキー項目の項目名と値を格納した内部テーブルです。
VALUE(得意先コード)を変数LV_KUNNRに格納します。
データベースから1件のデータを取得
SELECT SINGLE * ← 1件だけ
FROM KNA1 ← テーブルKNA1から取得し
INTO ER_ENTITY ← ER_ENTITYに格納する
WHERE KUNNR = LV_KUNNR. ← KUNNR(得意先コード)が変数LV_KUNNRの値と一致する行を検索する
格納した変数と同じ得意先のデータをER_ENTITYに格納し、呼び出し元に返します。
ER_ENTITYは1件のデータを返すための出力パラメータです。どのような型のデータでも格納できます。
⑦有効化ボタンを押下します。
⑧続行ボタンを押下します。(EnterでもOK)
※全項目デフォルトのままでOK
⑨有効化できたことを確認します。
(画面下部に以下のようなメッセージ、または画面右部に有効と表示できればOK)
実装したメソッドをテストする(単一データ取得)
メソッドを有効化できたら、テスト実行します。
※対象サービスの検索方法はP29参照
※トランザクションコード:/N/IWFND/MAINT_SERVICE
①対象のサービスを選択します。
☞ZODATA_YYMMnnn_SRV(検索アイコンをクリックし、文字列検索で探しましょう。)
②SAP Gateway Clientボタンを押下します。
③以下内容を入力します。
/sap/opu/odata/sap/ZODATA_YYMMnnn_SRV/CUSTOSet(‘3200000014’)
④実行ボタンを押下します。
⑤テストが成功すると、ステータスコード「200」が表示されます。
⑥1件のデータが返ってきていることが確認できます。(得意先コード3200000014のデータ)
実装したメソッドをデバッグする
実装したメソッドはデバッグすることが可能です。
①トランザクションコード「SEGW」でSAP Gateway Service Builderを実行
②対象のプロジェクト直下にある、Runtime Artifactsをダブルクリックします。
③対象のプロジェクト直下にある、Runtime Artifactsをダブルクリックします。
④メソッド>継承メソッドを押下します。
「再定義」フォルダにある、「CUSTOSET_GET_ENTITY」をダブルクリックします。
⑤対象のメソッドを表示し、行をダブルクリックしてブレークポイントを置きます。
※変更モードでもOK
⑥外部ブレークポイントの設定/削除ボタンを押下します。
複数データを取得するメソッド
単一データを取得するメソッド実装時とおおむね同じ流れで作成します。
①トランザクションコード:「SEGW」でSAP Gateway Service Builderを実行します。
②対象のプロジェクト直下にある、Runtime Artifactsをダブルクリックします。
③ZCL_ZODATA_YYMMnnn_DPC_EXTをダブルクリックします。
④メソッド>継承メソッドを押下します。
CUSTOSET_GET_ENTITYSETを右クリックし、再定義を押下します。
⑤デフォルトのコードを削除します。
⑥以下内容を入力します。
(テーブルKNA1から5件のデータを取得する処理)
CUSTOSET_GET_ENTITYSETのコード補足
記述したコードは以下の通りです。
テーブルKNA1から5件のデータ取得
SELECT *
UP TO 5 ROWS
FROM KNA1
INTO TABLE ET_ENTITYSET
テーブルKNA1から5件のデータをET_ENTITYSETに格納し、呼び出し元に返します。
ET_ENTITYSETは複数データを返すための出力パラメータです。
単一データを取得するメソッドと同様にどのような型のデータでも格納できます。
⑦有効化ボタンをクリックします。
⑧続行ボタンを押下します。(EnterでもOK)
※全項目デフォルトのままでOK
⑨有効化できたことを確認します。
(画面下部に以下のようなメッセージ、または画面右部に有効と表示できればOK)
実装したメソッドをテストする(複数データ取得)
メソッドを有効化できたら、テスト実行します。
※対象サービスの検索方法はP29参照
①対象のサービスを選択します。
②SAP Gateway Clientボタンを押下します。
③以下内容を入力します。
/sap/opu/odata/sap/ZODATA_YYMMnnn_SRV/CUSTOSet
⑤テストが成功すると、ステータスコード「200」が表示されます。
⑥5件のデータが返ってきていることが確認できます。
様々なメソッド
先述の通り、ODataでは様々なメソッドを実装することができます。
ODataサービスでは、各エンティティ(データの種類ごとに定義されたもの)に対して
「どのような操作を行うか」を、以下のようなメソッドで定義します。
また、CRUD(作成・取得・更新・削除)以外の処理を実装することも可能です。
代表的な実装方法の1つが、Function Import(ファンクションインポート) です。
登録済みデータを集計する、サーバー側で特別な処理(在庫更新、承認、請求など)を実行するなど
独自のメソッドを呼び出すことができます。
当研修でもFunction Importの実装方法を紹介します。
ただし、※研修環境ではFunction Import が日本語対応していません。
Function Import の定義だけ、英語でログインして設定します。
※2025年時点
①ログオン言語:ENでログインします。
②トランザクションコード:「SEGW」でSAP Gateway Service Builderを実行します。
③Data Model>Create>Function Importを押下します。
④Function Import Nameを入力し、Continueを押下します。(EnterでもOK)
⑤Function Importを定義します。
Function Import定義手順の補足
入力値の説明は以下の通りです。
- Name:呼び出すときのURL
- Return Type Kind,Return Type:実行後に受け渡すOData
- Return Cardinality:受け渡すODataの多重度(受け渡すデータが1件なのか、複数なのかを設定
- HTTP Method Type: GET、POSTなど使用するHTTPメソッド(指定なしの場合、Not specified)
※多重度、HTTPメソッドは後述にて説明あり
⑥Generate Runtime Objectsを押下します。
オブジェクト生成メッセージが表示されれば、Function Importの定義完了です。
※ログオン言語:ENは定義部分のみでOK
また、2つ目以降のFunction Importはログオン言語:JAで定義可能
⑦「Runtime Artifacts」フォルダ内の「ZCL_ZODATA_YYMMnnn_DPC_EXT」を開き、
メソッド>継承メソッド>/IWBEP/IF_MGW_APPL_SRV_RUNTIMEの中から「EXECUTE_ACTION」を右クリックし、再定義を押下します。
⑧ポップアップ画面が表示されるのでマスタ言語更新ボタンを押下します。
⑨処理を記述し、有効化ボタンを押下します。
method /IWBEP/IF_MGW_APPL_SRV_RUNTIME~EXECUTE_ACTION.
CASE IV_ACTION_NAME.
WHEN ‘Action’.
* 処理を記述
WHEN OTHERS.
ENDCASE.
endmethod.
⑩新規セッション(Ctrl+N)で「 /n/IWFND/GW_CLIENT 」起動します。
その後、
「ZODATA_ YYMMnnn_SRV」を検索し、クリックして「SAP Gateway Client」クリック
「 /sap/opu/odata/sap/ZODATA_YYMMnnn_SRV/Action(定義したURL)」と入力し、実行ボタンを押下します。
テストが成功すると、ステータスコード「200」が表示されます。