注: 以下の翻訳の正確性は検証されていません。AIPを利用して英語版の原文から機械的に翻訳されたものです。

TypeScript OSDK [ベータ版] でオブジェクトセットの変更をサブスクライブする

サブスクリプションは現在、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 個のプロパティで構成されるオブジェクトを提供します。

  • Object: Osdk.Instance オブジェクトと、提供されたオブジェクトに何が起こったかを示す列挙型。このオブジェクトは、オブジェクトセットの .fetchPage メソッドから返されるオブジェクトタイプと同じです。
  • State: 提供されたオブジェクトに何が起こったかを示す列挙型。
    • 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] } }, })

プロパティのnull許容性

ハンドラーに提供されるOsdk.Instanceオブジェクト上のプロパティは、そのオブジェクトの最新の値を表しています。主キーのプロパティとオブジェクト上の$primaryKeyフィールドは常に定義されています。

Osdk.Instanceオブジェクト上の任意のプロパティが未定義である可能性があります。これは必ずしもそのプロパティが未定義に更新されたことを示すわけではなく、単にそのプロパティが返されなかったことを示しています。

SDKが最後に生成されてからオブジェクトタイプにさらにプロパティが追加された場合、提供された値のプロパティが変更されていなくても更新を受け取ることがあります。これは、SDKが認識していないプロパティがオブジェクト上で変更されたことを示しています。

Geotime seriesの更新

geotime seriesプロパティを持つオブジェクトタイプに対してサブスクリプションが要求された場合、そのシリーズに新しい値があるときに更新がトリガーされます。この値は、返されたオブジェクトのlastFetchedValueプロパティで利用可能です。

onSuccessfulSubscription

このハンドラーは、OSDKがサブスクリプションを正常に確立し、更新を受信し始めると実行されます。このハンドラーがトリガーされる前の更新は、他のハンドラーへの呼び出しに反映されない場合があります。

onOutOfDate

このハンドラーは、オブジェクトセットに発生した更新について最新情報を提供できなかった場合に実行されます。これにより、最新の情報を受け取るために.fetchPageを呼び出してオブジェクトセット全体を再読み込みする必要があることを示しています。

onError

このハンドラーはサブスクリプションプロセスにエラーが発生した場合に実行され、サブスクリプションが閉じられたことを示します。

プロパティの指定

.subscribeメソッドでは、更新から返されるオブジェクトのどのプロパティを受け取るかを指定できます。これにより、ネットワーク接続を介して送信される情報量を減らしてパフォーマンスを向上させることができます。これを指定するには、メソッドの第 2 パラメーターに必要なプロパティの配列を渡します。

Copied!
1 2 client(Country).subscribe({}, {properties: ["population"]}) // client関数を使用してCountryオブジェクトにサブスクライブし、人口データ(populationプロパティ)を取得する。