今日の学習内容

今日は昨日作った「My First iFlow」を改造(かいぞう)して、SAP のサンドボックス API から実際の受注データを取得する iFlow を作りました。さらに Router(ルーター)ステップを使った条件分岐(じょうけんぶんき)の実装にも挑戦(ちょうせん)しました。

① Request Reply ステップとは

Request Reply は iFlow の中から外部 API を呼び出すステップです。

HTTPS リクエスト受信
    ↓
Content Modifier(API Key ヘッダーを設定)
    ↓
Request Reply(外部 API を呼び出す)
    ↓ HTTP アダプター → SAP サンドボックス API
End(レスポンスを返す)

② iFlow の設定手順

Content Modifier で API Key を設定

SAP サンドボックス API には API Key が必要です。Content Modifier の Message Header タブで設定します。

Content Modifier → Message Header タブ
  Action      : Add
  Name        : APIKey
  Source Type : Constant
  Source Value: [api.sap.com で取得した API Key]

HTTP アダプターの設定(重要)

HTTP アダプターの設定で注意点があります。URL のクエリパラメータ(?以降)は Address フィールドに入れられません。

フィールド
Addresshttps://sandbox.api.sap.com/s4hanacloud/sap/opu/odata4/.../SalesOrder
Query$top=3
MethodGET
Proxy TypeInternet
AuthenticationNone
Request HeadersAPIKey

⚠️ ハマりポイント①?$top=3 を Address に入れると「Address field must not contain a query part」エラーが出ます。Query フィールドに分けて入力してください。

③ SAP 受注データの取得成功

iFlow をデプロイして Bruno からリクエストを送ると、SAP S/4HANA のサンドボックスデータが返ってきました:

{
  "@odata.context": "$metadata#SalesOrder",
  "value": [
    {
      "SalesOrder": "1",        ← VBAK-VBELN
      "SalesOrderType": "TA",   ← VBAK-AUART
      "SoldToParty": "17100001", ← VBAK-KUNNR
      "TotalNetAmount": 52.65,  ← VBAK-NETWR
      "TransactionCurrency": "USD"
    },
    ...
  ]
}

④ Router(ルーター)ステップとは

Router はリクエストの内容によって処理を分岐(ぶんき)させるステップです。

Start → Router
           ├── Route 1(条件あり)→ 処理A
           └── Route 2(Default)→ 処理B

⑤ Router の条件式の設定

Router の条件式(じょうけんしき)は Non-XML モードで設定します。

項目
Expression TypeNon-XML
Condition(Route 1)${header.orderId} != '12345'
Route 2Default Route にチェック ✅

⚠️ ハマりポイント②:Router の条件式で空白チェックをする場合、以下の書き方は動作しませんでした:

❌ ${header.orderId} != ''      → 動作しない
❌ ${header.orderId} != null    → 動作しない
❌ ${header.orderId} != ${null} → 動作しない
✅ ${header.orderId} != '12345' → 具体的な値で比較すると動作する

Cloud Integration の Non-XML 条件式では、ヘッダーの存在確認より具体的な値との比較が確実です。

⑥ 完成した iFlow の構造

【SAP API 連携 iFlow】
Sender(HTTPS)→ Start
    → Content Modifier(API Key 設定)
    → Request Reply → HTTP アダプター → SAP Sandbox API
    → End

【Router iFlow】
Sender(HTTPS)→ Start → Router
    → Route 1(orderId あり)→ Content Modifier 1 → End
    → Route 2(Default)   → Content Modifier 2 → End

今日のエラーまとめ

エラー 原因 解決方法
Address field must not contain a query part URL に ?$top=3 を含めていた Address と Query フィールドを分けて入力
条件に関係なく Route 1 に入る 空白チェックの条件式が動作しない 具体的な値で比較する条件式を使う
全部 Default ルートに入る 条件式の書き方が違う ${header.orderId} != '12345' の形式で記述

この記事は「SAP BTP 学習」シリーズの第11回です。6ヶ月間の独学で SAP BTP 開発へのキャリアチェンジを目指しています。