mcpField
O
odata

odata

github.com/likweitan開発7294 回インストール2 週間前に更新
リポジトリ

odata について

odataは、ODataサービスを構築または利用するABAP開発者向けのガイドです。RAPと従来型SEGWの実装、外部サービスの利用、Fioriアノテーション、トラブルシューティングを扱います。

主な機能

  1. 01RAP ODataサービスのガイダンス
  2. 02従来型SEGW V2の実装手順
  3. 03外部OData利用パターン
  4. 04Fioriアノテーション例
  5. 05トラブルシューティング案内

活用シーン

  1. 01RAPビジネスオブジェクトのOData公開
  2. 02従来型SEGW V2サービスの保守
  3. 03ABAPからの外部ODataサービス利用
  4. 04ODataエラーの診断

インストール

コマンドをコピーしてターミナルで実行します。

$npx skills add https://github.com/likweitan/abap-skills --skill odata

インストール後、Claude Code で/odataを入力して読み込まれたか確認します。

同梱ファイルreferences/odata-annotation-examples.md

詳細

OData サービスの開発

ABAP で OData サービスを作成および利用するためのガイドです。RAP ベース(V4/V2)と SEGW ベース(V2)の両方のアプローチを対象とします。

ワークフロー

  1. ユーザーの目的を判断します:

    • RAP BO を OData サービスとして公開する(推奨アプローチ)
    • クラシックな SEGW ベースの OData V2 サービスを作成する
    • ABAP から外部 OData サービスを利用する
    • Fiori UI 用の OData アノテーションを追加する
    • OData エラーのトラブルシューティングを行う
  2. アプローチを特定します:

    • RAP ベースのサービス(ABAP Cloud で推奨)
    • SEGW ベースのサービス(クラシック。Standard ABAP のみ)
    • OData の利用(クライアントプロキシ)
  3. SAP のベストプラクティスに従って実装をガイドします

RAP ベースの OData サービス(推奨)

アーキテクチャの流れ
CDS View Entity → Behavior Definition → Service Definition → Service Binding
                                                                    ↓
                                                              OData V4/V2 Endpoint
サービス定義

CDS エンティティとその振る舞いを、名前付きサービスとして公開します:

@EndUserText.label: 'Travel Service'
define service ZUI_TRAVEL_O4 {
  expose ZC_Travel as Travel;
  expose ZC_Booking as Booking;
  expose I_Currency as Currency;
  expose I_Country as Country;
}
主なルール
  • ルートビューではなく、プロジェクション CDS ビュー(慣例として C_ 接頭辞)を公開します
  • UI に必要な値ヘルプ CDS ビュー(I_* ビュー)を含めます
  • エイリアス名が OData エンティティセット名になります
  • 1 つのサービス定義を複数のプロトコルにバインドできます
サービスバインディング

サービス定義を特定の OData プロトコルにバインドし、URL を提供します:

バインディングの種類プロトコル用途
OData V4 - UIV4SAP Fiori Elements アプリ
OData V2 - UIV2レガシー Fiori アプリ、旧式のフロントエンド
OData V4 - Web APIV4API の利用(A2X シナリオ)
OData V2 - Web APIV2API の利用(レガシー)
InA - UIInA分析シナリオ
サービスバインディングの作成
  1. ADT で New → Other ABAP Repository Object → Business Services → Service Binding を選択します
  2. サービス定義を選択します
  3. バインディングの種類(例:OData V4 - UI)を選択します
  4. 有効化します
  5. Publish をクリックしてサービスを登録します
  6. Preview をクリックして Fiori Elements のプレビューを開きます

OData V4 と V2 の比較

機能OData V4OData V2
プロトコルデフォルトは JSONデフォルトは XML(Atom)、JSON も選択可能
バッチJSON を使用する $batchmultipart を使用する $batch
ディープオペレーションディープ作成/更新をサポート制限あり
アクション/関数バインドあり/なし関数インポート
フィルタリングlambda を使用する $filter基本的な $filter
ドラフト完全にサポート拡張機能を介してサポート
集計$apply 変換標準ではサポートされない
推奨新規開発で推奨既存のもののみを維持

SEGW ベースの OData V2 サービス(クラシック)

Standard ABAP のみで利用できます(ABAP Cloud では利用できません)。

アーキテクチャ
SEGW Project → Data Model (Entity Types, Sets, Associations)
             → Service Implementation (MPC/DPC classes)
             → Register & Activate in /IWFND/MAINT_SERVICE
手順
  1. SEGW トランザクションでプロジェクトを作成します
  2. データモデルを定義します:エンティティタイプ、プロパティ、ナビゲーションプロパティ
  3. ランタイムアーティファクトを生成します(MPC/DPC クラス)
  4. DPC 拡張メソッドを実装します:GET_ENTITYSET、GET_ENTITY、CREATE_ENTITY など
  5. /IWFND/MAINT_SERVICE でサービスを登録します
  6. /IWFND/GW_CLIENT またはブラウザーでテストします
DPC メソッド実装の例
METHOD travelset_get_entityset.
  SELECT * FROM ztravel_tab
    INTO TABLE @DATA(lt_travel)
    UP TO 100 ROWS.

  et_entityset = CORRESPONDING #( lt_travel ).
ENDMETHOD.

外部 OData サービスの利用

ABAP Cloud の場合(HTTP Client と Communication Arrangements を使用)
"1. Get HTTP client via communication arrangement
DATA(lo_dest) = cl_http_destination_provider=>create_by_comm_arrangement(
  comm_scenario  = 'Z_MY_OUTBOUND_SCENARIO'
  service_id     = 'Z_MY_HTTP_SERVICE' ).

DATA(lo_client) = cl_web_http_client_manager=>create_by_http_destination( lo_dest ).

"2. Build request
DATA(lo_request) = lo_client->get_http_request( ).
lo_request->set_uri_path( '/sap/opu/odata4/sap/api_business_partner/srvd_a2x/sap/api_business_partner/0001/A_BusinessPartner?$top=10' ).

"3. Execute and parse response
DATA(lo_response) = lo_client->execute( if_web_http_client=>get ).
DATA(lv_json) = lo_response->get_text( ).
lo_client->close( ).
OData Client Proxy の使用(V2/V4)
"Create OData client proxy for V4
DATA(lo_proxy) = /iwbep/cl_cp_client_proxy_fact=>create_v4_remote_proxy(
  iv_service_definition_name = 'Z_MY_ODATA_CDEF'
  io_http_client             = lo_client
  iv_relative_service_root   = '/sap/opu/odata4/sap/api_service/0001/' ).

"Build and execute read request
DATA(lo_request) = lo_proxy->create_resource_for_entity_set( 'ENTITYSETNAME' )->create_request_for_read( ).
lo_request->set_top( 10 ).
DATA(lo_response) = lo_request->execute( ).

"Get business data
DATA lt_data TYPE STANDARD TABLE OF z_entity_type.
lo_response->get_business_data( IMPORTING et_business_data = lt_data ).

Fiori 用 OData アノテーション

OData/Fiori の動作を制御する主な CDS アノテーション:

@UI.headerInfo: {
  typeName: 'Travel',
  typeNamePlural: 'Travels',
  title: { type: #STANDARD, value: 'TravelID' },
  description: { type: #STANDARD, value: 'Description' }
}

@UI.lineItem: [{ position: 10 }]
@UI.selectionField: [{ position: 10 }]
@UI.identification: [{ position: 10 }]
TravelID;

@UI.lineItem: [{ position: 20, importance: #HIGH }]
@UI.identification: [{ position: 20 }]
@Consumption.valueHelpDefinition: [{ entity: { name: 'I_Currency', element: 'Currency' } }]
CurrencyCode;

トラブルシューティング

エラー/問題解決策
/IWBEP/CX_MGW_BUSI_EXCEPTIONDPC の実装を確認し、入力データを検証します
/IWBEP/CX_MGW_TECH_EXCEPTIONデータモデルの整合性を確認し、成果物を再生成します
403 ForbiddenICF ノードの有効化と認可を確認します
404 Not Foundサービスが登録され、有効化されていることを確認します
$metadata returns emptyサービスバインディングを公開し、有効化を確認します
Draft not workingドラフトテーブルが存在し、BDEF に with draft があることを確認します
Deep create failsCDS と BDEF のコンポジションを確認します
CX_WEB_HTTP_CLIENT_ERROR通信アレンジメントと SSL 証明書を確認します

出力形式

OData に関するトピックを支援する場合は、次の形式で回答します。

## OData Service Guidance

### Approach

- Type: [RAP-based / SEGW-based / Consumption]
- Protocol: [OData V4 / OData V2]

### Implementation

[Step-by-step with code examples]

### Testing

[How to test the service]

参考資料

関連スキル

  • rap:OData サービスとして公開する RAP ビジネスオブジェクトの構築に使用します
  • cds-view-entities:OData サービスを支えるデータモデリングに使用します
  • authorization-iam:IAM アプリを使用した OData サービスの保護に使用します
  • btp-abap-environment:OData 消費のための通信アレンジメントの設定に使用します

コメント