詳細情報:
ストリーミング API による変更の登録
Codey Outfitters が Bayeux クライアントを実行すると、クライアントは商品公開チャネルで Streaming API に登録します。
Codey Outfitters は、価格や在庫の更新情報、新商品や取り扱いを中止したアウトドア用品に関する情報などを Visualforce ページで顧客に提供しています。この Visualforce ページのサンプルソースコードは Github で提供されており、自分の OData 4.0 プロデューサーに合わせて変更できます。
登録メカニズムの中心は src/js/channel/ServerConnection.js の _subscribeChannels メソッドです。
cometd.subscribe(channelName, function(event) {
if (event && event.data && event.data.payload &&
event.data.payload.ChangeEventHeader) {
var header = event.data.payload.ChangeEventHeader;
var entityName = header.entityName;
var recordId = header.recordIds[0];
var timestamp = header.commitTimestamp;
var changeType = header.changeType;
switch (changeType) {
case "UPDATE":
// Update logic ...
break;
case "CREATE":
// Create logic
break;
case "DELETE":
// Delete logic
break;
}
}
}
Codey Outfitters の商品用の channelName は /data/Products__ChangeEvent です。チャネルで公開される各変更イベント通知は Bayeux 形式であり、商品在庫で更新されたレコードを表します。data.payload には、変更イベントデータと変更イベントの性質を示すヘッダーが含まれます。次のイベント通知例では、Codey Outfitters の商品レコードへの変更を記述しています。
{
schema=”lswW55LyUCYeU7raSrmZ5A”,
payload={
ChangeEventHeader={
commitUser=”005xx000001SvAn”,
sequenceNumber=15,
entityName=”Products__x”,
changeType=”UPDATE”,
changeOrigin=”Products?$deltaToken=3779”,
transactionKey=”f158f145-a...”,
commitTimestamp=1507759119826,
recordIds=[“x03xx0000000008”]
},
Name__c=”Camping Stove”,
ExternalId=7801,
UnitPrice__c=10.0,
Stock__c=1500.0,
OrderLimit__c=12.0,
ProductId__c=7801.0
},
event={replayId=15}
}
各変更イベント通知は次の構造となります。
| 項目 | 説明 |
|---|---|
| schema | 変更イベントを定義する、バージョン管理されたスキーマ参照。 |
| payload | 変更イベントの詳細。
|
| event | チャネルのイベントストリームにおけるイベント通知の位置を参照する再生 ID。 |
各変更イベントヘッダーには次の項目が含まれます。
| 項目 | 説明 |
|---|---|
| commitUser | イベントを公開したユーザー。 |
| sequenceNumber | 変更イベントの連番。変更は、受信した順序で発生します。 |
| entityName | 外部オブジェクトの API 参照名。 |
| changeType | レコードに対して更新、作成、または削除のどれが行われたかを指定します。 |
| changeOrigin | 変更を要求するために使用するデルタリンク。OData プロデューサーは、前回の変更要求の実行中にデルタトークンを計算します。 |
| transactionKey | トランザクションの一意の識別子。 |
| commitTimestamp | 1970 年 1 月 1 日を起点としてミリ秒数として表される、変更イベント通知が公開されたタイムスタンプ。 |
| recordIds | 更新、作成、または削除された外部オブジェクトレコードの Salesforce ID。レコード項目の現在の値を見るには、このレコード ID を使用して外部オブジェクトに対してクエリを実行します。 |
| nulledFields | null に設定されている項目のリスト。 |
