注: 以下の翻訳の正確性は検証されていません。AIPを利用して英語版の原文から機械的に翻訳されたものです。
サブスクリプションは現在、TypeScript OSDKのベータ機能です。この機能を使用するには、Developer ConsoleでTypeScriptのベータ設定を有効にし、SDKの 2.1.x-beta.x
バージョンを生成してください。
プロジェクトに @osdk/client
パッケージの対応するベータバージョンをインストールしていることを確認してください。以下の例では、SDKを生成したSDKジェネレーターのバージョンに 2.1.x-beta.x
を置き換えてください。
Copied!1
npm install @osdk/client@2.1.x-beta.x
このコマンドは、@osdk/client
のバージョン 2.1.x-beta.x
をインストールします。npm
はNode.jsのパッケージ管理ツールです。
このページでは、TypeScript OSDK を使用してオントロジー内のオブジェクトの変更に関するリアルタイム更新を受け取る方法についてのドキュメントを提供します。
TypeScript OSDK のサブスクリプション機能を使用すると、指定されたオブジェクトセット内のオブジェクトが変更されたときに更新を受け取ることができます。これには、新しいオブジェクトの追加や削除、およびオブジェクトセット内のオブジェクトのプロパティの変更が含まれます。
以下のセクションの例では、@subscribe-osdk-example/sdk
パッケージ名を持つ Country
オブジェクトタイプを使用しています。例のパッケージ名とオブジェクトタイプをユーザーが作成したパッケージと選択したオブジェクトタイプに置き換えてください。最後に、population
へのリファレンスをユーザーのオブジェクトタイプのプロパティに置き換えてください。
.subscribe
オブジェクトセットをサブスクライブするには、OSDK オブジェクトセットに .subscribe
をチェーンします。.subscribe
関数は、サブスクリプションのライフサイクル中のさまざまなイベントに対してトリガーされる多数の関数を受け入れます。これらの関数には、特定のイベントに対して実行したい任意のロジックを含めることができます。
サブスクライブ関数は、サブスクリプションを終了するための関数を含むオブジェクトを返します。
Copied!1 2 3 4 5 6 7 8 9 10 11 12
import { Country } from "@subscribe-osdk-example/sdk" // サブスクリプションを作成し、必要なコールバック関数を指定 const subscription = client(Country).subscribe({ onChange: (update) => {}, // データが変更されたときに呼び出されるコールバック onSuccessfulSubscription: () => {}, // サブスクリプションが成功したときに呼び出されるコールバック onOutOfDate: () => {}, // データが古くなったときに呼び出されるコールバック onError: () => {} // エラーが発生したときに呼び出されるコールバック }, {properties: []}) // サブスクリプションを解除 subscription.unsubscribe();
さらに、サブスクライブされているオブジェクトセットをフィルター処理することが可能です。これにより、更新情報を受け取るオブジェクトセットを絞り込むことができます。
Copied!1 2
client(Country).where({ "population": { "geq": "1000000" }}).subscribe({}) // populationが100万人以上のCountryを条件にデータを取得し、subscribeでその結果を購読する
.pivotTo
を使用して構築されたオブジェクトセットはサブスクリプションではサポートされていません。
onChange
指定されたオブジェクトセット内のオブジェクトが追加、変更、または削除されたときに onChange
ハンドラーがトリガーされます。
ハンドラー関数は 2 個のプロパティで構成されるオブジェクトを提供します。
Osdk.Instance
オブジェクトと、提供されたオブジェクトに何が起こったかを示す列挙型。このオブジェクトは、オブジェクトセットの .fetchPage
メソッドから返されるオブジェクトタイプと同じです。ADDED_OR_UPDATED
: 提供されたオブジェクトがオブジェクトセットに追加されたか、提供されたオブジェクトのプロパティが変更された。DELETED
: 提供されたオブジェクトが削除された。以下は onChange
ハンドラーの使用例です。
Copied!1 2 3 4 5 6 7 8 9 10 11 12
const populations: { [key: string]: number } = {} // 国ごとの人口を格納するオブジェクト client(Country).subscribe({ onChange: (update) => { if (update.state === "ADDDED_OR_UPDATED") { // 国の情報が追加または更新された場合 populations[update.object.$primaryKey] = update.object.population ?? populations[update.object.$primaryKey] } else if (update.state === "DELETED") { // 国の情報が削除された場合 delete populations[update.object.$primaryKey] } }, })
ハンドラーに提供されるOsdk.Instance
オブジェクト上のプロパティは、そのオブジェクトの最新の値を表しています。主キーのプロパティとオブジェクト上の$primaryKey
フィールドは常に定義されています。
Osdk.Instance
オブジェクト上の任意のプロパティが未定義である可能性があります。これは必ずしもそのプロパティが未定義に更新されたことを示すわけではなく、単にそのプロパティが返されなかったことを示しています。
SDKが最後に生成されてからオブジェクトタイプにさらにプロパティが追加された場合、提供された値のプロパティが変更されていなくても更新を受け取ることがあります。これは、SDKが認識していないプロパティがオブジェクト上で変更されたことを示しています。
geotime seriesプロパティを持つオブジェクトタイプに対してサブスクリプションが要求された場合、そのシリーズに新しい値があるときに更新がトリガーされます。この値は、返されたオブジェクトのlastFetchedValue
プロパティで利用可能です。
onSuccessfulSubscription
このハンドラーは、OSDKがサブスクリプションを正常に確立し、更新を受信し始めると実行されます。このハンドラーがトリガーされる前の更新は、他のハンドラーへの呼び出しに反映されない場合があります。
onOutOfDate
このハンドラーは、オブジェクトセットに発生した更新について最新情報を提供できなかった場合に実行されます。これにより、最新の情報を受け取るために.fetchPage
を呼び出してオブジェクトセット全体を再読み込みする必要があることを示しています。
onError
このハンドラーはサブスクリプションプロセスにエラーが発生した場合に実行され、サブスクリプションが閉じられたことを示します。
.subscribe
メソッドでは、更新から返されるオブジェクトのどのプロパティを受け取るかを指定できます。これにより、ネットワーク接続を介して送信される情報量を減らしてパフォーマンスを向上させることができます。これを指定するには、メソッドの第 2 パラメーターに必要なプロパティの配列を渡します。
Copied!1 2
client(Country).subscribe({}, {properties: ["population"]}) // client関数を使用してCountryオブジェクトにサブスクライブし、人口データ(populationプロパティ)を取得する。