コンテンツにスキップ

ビジネスイベントとアウトバウンド連携のパターン

  1. OIC で、ERP Cloud アダプタをトリガーにした統合を作り、購読するイベント(必要ならフィルタ)を選ぶ
  2. 統合を有効化(アクティブ化)すると、Fusion 側に購読(サブスクリプション)が登録される
  3. Fusion でイベントが発生すると、イベント名・フィルタ・購読の状態(有効)が一致する購読先へ、Fusion が SOAP で通知する
  4. OIC の統合が起動し、必要なら REST で詳細を取得して外部システムへ渡す

購読の登録状況は、Fusion の /soa-infra/PublicEvent/subscriptions、イベントの一覧は /soa-infra/PublicEvent/catalog で確認できます(ERP Cloud アダプタのトラブルシューティングに記載)。

対象イベントの例(公式で確認できたもの)

Section titled “対象イベントの例(公式で確認できたもの)”

ERP Cloud アダプタのガイドに、財務のイベント一覧(有効化の方法と提供開始リリース付き)があります。主なものは次のとおりです。

モジュール イベント例 有効化の方法 提供開始
Payables Payables Invoice Created/Approved/Validated/Cancelled、Invoice Hold Applied/Released、Payables Payment Created/Voided プロファイル・オプション「AP: Enable Business Events」(サイト・レベル) 18B〜19A
Payments Payment File Created プロファイル・オプション「IBY: Enable Business Events」(サイト・レベル) 18C
Receivables Receivables Invoice Completed/Paid、Standard Receipt Created/Applied/Reversed、Receivables Lockbox Batch Completed など ERP Business Events REST API 18C〜19A
General Ledger Accounting Period Opened/Closed/Reopened、Journal Batch Approved、Journal Batch Posting Completed ERP Business Events REST API 18C
Expenses Expense Report Submitted/Manager Approved/Auditor Approved/Paid など ERP Business Events REST API 19B
共通(Financials Common Module) ERP Integration Inbound、ERP Integration Outbound ERP Integrations REST API 17D
  • 調達では Purchase Order Event(既定で有効)、Supplier Created Event、Supplier Updated Event、Supplier Negotiation Invitation Event などがあります。
  • ERP Integration Inbound は、ERP Integration Service による一括取込(importBulkData)の完了を知らせるイベントです。OIC の FBDI コールバックはこのイベント(ErpImportBulkDataEvent)を使います。
  • Application Composer で作ったカスタム・ビジネスイベントも購読できます。
  • 対象イベントはリリースごとに増えます。最新の一覧は公式ガイドで確認してください。

AP(Payables)の場合

  1. Setup and Maintenance(設定および保守)作業領域で、プロファイル・オプション値を管理するタスクを開きます。
  2. 「AP: Enable Business Events」(コード ORA_AP_ENABLE_BUSINESS_EVENTS)をサイト・レベルで Y にします。
  3. AP のイベントが送られないときの手順は、My Oracle Support の Doc ID 2650773.1 が案内されています。

AR・GL・経費などの場合(ERP Business Events REST API)

  1. GET /fscmRestApi/resources/11.13.18.05/erpBusinessEvents で一覧を取得します。q=BusinessEventCode=<コード> で絞り込めます。
  2. 対象の ErpBusinessEventId を控えます。
  3. PATCH /erpBusinessEvents/{ErpBusinessEventId} に {"EnabledFlag": true} を送ります。
  4. 必要な権限は「Access FSCM Integration Rest Service(FUN_FSCM_REST_SERVICE_ACCESS_INTEGRATION_PRIV)」です。
  1. 統合ユーザーに、イベント受信に必要な SOAOperator ロールを付けます(認証・認可)。
  2. ERP Cloud アダプタの接続を作り、トリガーとして統合に追加します。
  3. 要求ページで Receive Business events raised within ERP Cloud を選び、イベントを選択します。
  4. 必要ならイベント・フィルタを書きます(次項)。
  5. 統合を有効化すると購読が登録されます。フィルタを変えたら、保存して 有効化し直す と購読に反映されます。

公式のベストプラクティスの要点です。

  • フィルタは、OIC のマッパーのペイロードではなく、アクティビティ・ストリームに出る ワイヤー・ペイロード(TriggerWirePayload_tTextPayload) を見て書きます。
  • ADF サービスのペイロードは result/Value/<項目> のように、Value という包み要素が入ることがあります。これを省くと一致しません。
  • 名前空間 URI ごとに別の接頭辞を宣言します。同じ接頭辞を使い回すと、フィルタが常に false になります。
  • 文字列は引用符で囲み、数値は囲みません。
フィルタの形(接頭辞と項目名は例)
$eventPayload/ns1:result/ns2:Value/ns2:BusinessUnit = 'JP01 営業単位'

一致するデータと一致しないデータの両方でテストしてから本番に移します。

4. 統合を停止・移送するときの注意

Section titled “4. 統合を停止・移送するときの注意”
  • 統合を無効化(非アクティブ化)するとき、ダイアログの Delete Event Subscription で購読を削除するかを選びます。削除しなかった場合、6 時間以内に有効化し直すと、その間のイベントが再送 されます。
  • テスト環境の Fusion に、本番の OIC を指す購読が残ると、本番の統合がテスト環境のイベントを受け取ってしまいます。環境のコピー後や切替時には、購読の endpointURL を確認し、不要な購読を削除します。

アウトバウンド連携の 4 パターン

Section titled “アウトバウンド連携の 4 パターン”
パターン 即時性 データ量 仕組み 注意
イベント駆動 数秒〜数分 1 件ずつ・少量 ビジネスイベント → OIC → REST で詳細取得 欠落・重複への備え、定期突合が必要
BIP の定期出力 日次・時間単位 少〜中量 ESS ジョブ(BIP レポート)→ 出力ファイル 帳票向け。大量抽出には使わない
BICC(Data Extraction ツール) 日次・数時間単位 大量・差分 増分抽出 → UCM・Object Storage → 取得 高頻度の実行(5 分ごとなど)には不向き
REST ポーリング 数分〜 少量 LastUpdateDate などで差分を定期取得 1 回 500 件まで。重複取得を前提にする
  • イベントのペイロードは、対象を特定できる最小限の情報と考え、最新の状態は REST で取得 します。Oracle A-Team も、イベントと REST 呼び出しを組み合わせる設計と、大量データでの使用を避けることを勧めています。
  • エクスポート系では、exportBulkData の jobOptions に EnableEvent=Y を付けると、完了時に ERP Integration Outbound イベントが発行されます。OIC でこのイベントを(フィルタなしで)購読し、ペイロードの DOCUMENTID を使って UCM から出力ファイルを取得します。
ERP Integration Outbound イベントのペイロード(公式の例を簡略化。値は例)
{
"JOBS": [
{ "JOBNAME": "XX Supplier Extract Job", "REQUESTID": "9519", "STATUS": "SUCCEEDED",
"DOCUMENTNAME": "ExportBulkData_XXSUPEXT_9519" }
],
"SUMMARYSTATUS": "SUCCEEDED",
"DOCUMENTID": "10174",
"DOCUMENTNAME": "ExportBulkData_XXSUPEXT_9519"
}
  • BIP レポートを ESS ジョブとして定期実行し、出力を exportBulkData+イベント、または downloadESSJobExecutionDetails で受け取ります(SOAP Web サービス)。
  • BIP のスケジュール・ジョブには出力先(配信先)を設定できます。配信先の種類には Content Server(WebCenter Content)などがあります。利用できる種類と設定は公式の「Report Output Destination Types」で確認してください。
  • 初回は全件、以降は前回からの増分を抽出します。抽出は CSV で、UCM または OCI Object Storage に出力されます。
  • 26D の Integration Playbook は BICC をレガシーとし、後継の Data Extraction ツールを推奨しています。詳しくは BICC によるデータ抽出 を参照してください。
  1. 前回の取得時刻(ハイウォーターマーク)を保存しておく
  2. q=LastUpdateDate >= '<前回時刻から少し前>' と orderBy=LastUpdateDate,<一意キー> で差分を取得する(重なりを持たせて取りこぼしを防ぐ)
  3. 一意キーで重複を除いて処理し、今回の最大の LastUpdateDate を次回の基準として保存する

冪等性・再送・順序保証の設計

Section titled “冪等性・再送・順序保証の設計”

今回確認した公式ドキュメントの範囲では、ビジネスイベントの配信回数や順序の保証は明記されていませんでした。また、ガイドには「6 時間以内の再有効化で再送される」「OIC は失敗したメッセージを自動では再送しない」という挙動が書かれています。したがって、重複・欠落・順不同のいずれも起こり得る 前提で設計します。

冪等性(同じ通知を 2 回処理しても結果が変わらない)

Section titled “冪等性(同じ通知を 2 回処理しても結果が変わらない)”
  • 処理済みのキー(例:オブジェクト ID+LastUpdateDate)を記録し、同じものは処理しない
  • 連携先への書き込みは「登録」ではなく「なければ作成・あれば更新(アップサート)」にする
  • 金額の加算など、繰り返すと結果が変わる処理は、キーを確認してから実行する

再送(失敗したときに確実にやり直す)

Section titled “再送(失敗したときに確実にやり直す)”
  • OIC は失敗したメッセージを自動では再送しません。手動の再送信は統合を最初から実行し直します。各ステップを冪等にしておけば、最初からの再実行でも安全です。
  • 呼び出し先のエラーをフォールト・ハンドラで捕まえて再試行する設計も、公式ガイドで案内されています(障害処理・監視)。
  • 再試行してもだめなものは、エラー記録(テーブルやファイル)に退避し、運用担当に通知します。

順序(古い更新で新しい状態を上書きしない)

Section titled “順序(古い更新で新しい状態を上書きしない)”
  • イベントの内容をそのまま使わず、受信時点の最新状態を REST で取得する(状態の転送)
  • 連携先に LastUpdateDate などの版情報を保存し、受け取った情報のほうが古ければ捨てる
  • 作成と更新の順序が重要な場合は、同じキーの処理を直列化する

突合(取りこぼしを見つける)

Section titled “突合(取りこぼしを見つける)”
  • 日次などで、BICC や REST で件数・キー・更新日時を突き合わせ、差分を補正する
  • イベント連携は「速報」、突合バッチは「確定」という役割分担にすると、運用が安定します
実機:Receivables Invoice Paid イベントを有効にする
API="$FA_HOST/fscmRestApi/resources/11.13.18.05"
# 1) コードで検索して ErpBusinessEventId と EnabledFlag を確認
curl -s -G -u "$FA_USER:$FA_PASS" "$API/erpBusinessEvents" \
--data-urlencode "q=BusinessEventCode=ReceivablesInvoicePaid" \
--data-urlencode "onlyData=true"
# 2) 有効化(ID は 1) の応答の値に置き換える)
curl -s -u "$FA_USER:$FA_PASS" -X PATCH "$API/erpBusinessEvents/<ErpBusinessEventId>" \
-H "Content-Type: application/vnd.oracle.adf.resourceitem+json" \
-d '{"EnabledFlag": true}'
実機:購読の登録状況を確認する(接続と同じ資格情報で)
curl -s -u "$FA_USER:$FA_PASS" "$FA_HOST/soa-infra/PublicEvent/subscriptions"
# endpointURL が正しい OIC の URL か、state が true か、filter が想定どおりかを確認する
モック API:更新日時で差分を取得する(REST ポーリングの練習)
export BASE="https://<このサイトのURL>/api/mock/fscmRestApi/resources/11.13.18.05"
curl -s -G -u learner:welcome1 "$BASE/invoices" \
-H "REST-Framework-Version: 2" \
--data-urlencode "q=LastUpdateDate >= '2026-10-01T00:00:00Z'" \
--data-urlencode "orderBy=LastUpdateDate,InvoiceId" \
--data-urlencode "fields=InvoiceId,InvoiceNumber,LastUpdateDate" \
--data-urlencode "limit=100" --data-urlencode "onlyData=true"
consumer.py:通知を冪等に処理する骨組み
import sqlite3
db = sqlite3.connect("processed.db")
db.execute("CREATE TABLE IF NOT EXISTS seen (obj_id TEXT PRIMARY KEY, last_update TEXT)")
def handle_event(obj_id: str, fetch_latest, upsert_target) -> str:
"""obj_id:イベントで通知されたキー。fetch_latest:REST で最新状態を取る関数。"""
latest = fetch_latest(obj_id) # イベントの内容ではなく最新状態を使う
row = db.execute("SELECT last_update FROM seen WHERE obj_id = ?", (obj_id,)).fetchone()
if row and row[0] >= latest["LastUpdateDate"]:
return "skip" # 処理済み、または古い通知
upsert_target(latest) # 連携先はアップサートで書く
db.execute("INSERT OR REPLACE INTO seen VALUES (?, ?)", (obj_id, latest["LastUpdateDate"]))
db.commit()
return "done"

LastUpdateDate の文字列比較は、同じ形式(同じタイムゾーン表記)で保存している場合だけ正しく動きます。実装ではタイムゾーンを含めて日時型に変換して比べます。

落とし穴とベストプラクティス

Section titled “落とし穴とベストプラクティス”
  • イベントの受信状況を監視する:OIC の監視(Observability)の Fusion Applications の画面で、Fusion がイベントを送ろうとしたか(イベント一覧)を確認できます。
  • アウトバウンドの設計書には「欠落時の補正方法」を書く:突合の頻度と、補正の手順(再抽出・再送)まで決めておきます(連携方式の全体像 の設計書項目を参照)。
  • 対応する試験:OIC 模擬テスト(ERP Cloud アダプタのトリガー、イベント・フィルタ、コールバック、再送・障害処理)。業務モジュールでは AP 模擬テスト・AR 模擬テスト などで連携の前提として問われることがあります。
  • 覚えるポイント
    • ビジネスイベントは発行・購読型の非同期通知。バッチや大量データには使わない。
    • AP のイベントは「AP: Enable Business Events」、Payments は「IBY: Enable Business Events」、AR・GL などは erpBusinessEvents で有効化。
    • FBDI のコールバックは ERP Integration Inbound(ErpImportBulkDataEvent)、exportBulkData の完了は ERP Integration Outbound(EnableEvent=Y)。
    • イベント受信には SOAOperator ロール。OIC は失敗メッセージを自動再送しない。
  • 手を動かして確認:OIC 演習2:ビジネスイベントで外部システムへ通知する、BICC 演習:増分抽出を設計・設定する

本サイトは学習目的で個人が作成した非公式の教材であり、Oracle Corporation およびその関連会社とは関係ありません。内容の正確性は保証しません。最新の仕様・試験範囲は必ず公式ドキュメントと Oracle University の情報で確認してください。

模擬テストの問題は公開されている出題範囲(Exam Topics)と公式ドキュメントをもとに独自に作成したもので、実際の試験問題ではありません。

Oracle、Java、MySQL は Oracle Corporation およびその子会社、関連会社の米国およびその他の国における登録商標です。その他の製品名・会社名は各社の商標です。

© 2026 Fusion ERP 実装ラボ