SAP BTP 学習日記 Day11 —— iFlow 応用:Request Reply で S/4HANA API 連携・Router で条件分岐を実装
今日の学習内容
今日は昨日作った「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 フィールドに入れられません。
| フィールド | 値 |
|---|---|
| Address | https://sandbox.api.sap.com/s4hanacloud/sap/opu/odata4/.../SalesOrder |
| Query | $top=3 |
| Method | GET |
| Proxy Type | Internet |
| Authentication | None |
| Request Headers | APIKey |
⚠️ ハマりポイント①:
?$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 Type | Non-XML |
| Condition(Route 1) | ${header.orderId} != '12345' |
| Route 2 | Default 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 開発へのキャリアチェンジを目指しています。