QueryImplementingThings サービスの使用
ThingWorx 高可用性クラスタを実行している場合、以前はインメモリプロセスであった特定の状態 (プロパティ値、Thing の状態、接続ステータスなど) をクラスタ全体で共有する必要があります。このため、Thing プロパティはインメモリ Apache Ignite キャッシュに保存されるようになりましたが、これによるパフォーマンスやプロパティ取り込みへの大きな影響はありません。
クエリーでの遅延の影響を最小限に抑えるための改善が行われました。サービスが変更され、関連付けられている Thing Shape または Thing Template に存在するプロパティの値だけが返されるようになりました。実装 Thing に存在するプロパティをフィルタすることもできますが、新しい GetThingPropertyValues API を使用して、実装している Thing に関するデータを返す必要があります。
* 
ThingWorx 9.4.0 以降では、新しいブール型パラメータ isSortFirstQueryImplementingThings サービスに追加されました。isSortFirst パラメータのデフォルト値は false で、サービスは 以前と同様に動作し続けます。isSortFirsttrue に設定されている場合、QueryImplementingThings サービスは最初に結果セットを並べ替え、次に制限を適用します。
* 
フィルタを制限し、Thing Shape または Thing Template で定義されているプロパティのみを並べ替えます。実装している Thing に存在するプロパティに対してフィルタや並べ替えを行わないでください。Thing からプロパティを移動して、実装されている Thing Shape または Thing Template に配置することも考えられます。
GetThingPropertyValues
GetThingPropertyValues は、返されたデータセットを取り込むために必要なキャッシュ呼び出しの回数を減らすためにプロパティ値を一括で取得する新しい API です。入力は thingRefrence (Thing の名前とタイプのインフォテーブル) および dataShapeName (必要なプロパティのデータシェイプを識別する文字列) です。GetThingPropertyValues は、入力 thingReference で指定された各 Thing のプロパティ値のインフォテーブルを返します。
たとえば、この API を使用するには、以下の操作を行います。
1. Thing Shape または Thing Template に対して QueryImplementingThings または QueryImplementingThingsWithData を実行します。
最適なパフォーマンスを得るには、Thing の名前とベースフィールドを返す QueryImplementingThings を使用します。
2. QueryImplementingThings からすべての Thing 名を収集します。
3. すべての Thing のすべてのプロパティを含むデータシェイプを作成します。
4. ステップ 2 で取得した Thing 名のコレクションとステップ 3 で作成したデータシェイプ名を指定して getThingPropertyValues を呼び出します。
この例の JavaScript は以下のとおりです。
var result = ThingShapes["testThingShapeOneForQITService<>626037"].QueryImplementingThings({
maxItems: undefined /* NUMBER */,
nameMask: undefined /* STRING */,
query: undefined /* QUERY */,
tags: undefined /* TAGS */
});
var resultQIT = result;
var params = {
infoTableName : "InfoTable",
dataShapeName : "ThingRefDataShape"
};
// CreateInfoTableFromDataShape(infoTableName:STRING("InfoTable"), dataShapeName:STRING):INFOTABLE(ThingRefDataShape)
result = Resources["InfoTableFunctions"].CreateInfoTableFromDataShape(params);
var thingRef = result;
for(var x=0 ; x<resultQIT.length ; x++){
var thingName = resultQIT[x].name;
var newEntry = new Object();
newEntry.name = thingName; // STRING
newEntry.type = "Thing"; // STRING
thingRef.AddRow(newEntry);
}
// result: INFOTABLE dataShape: "RootEntityList"
result = Resources["EntityServices"].GetThingPropertyValues({
thingReferences: thingRef /* INFOTABLE */,
dataShapeName: "QITDataShape<>392587" /* DATASHAPENAME */
});
これは役に立ちましたか?