ゴーストエンティティの作成および削除
ゴーストエンティティについて
ゴーストエンティティは、エラーが原因で作成できなかったエンティティのメモリ内表現です。
ゴーストエンティティは、ThingWorx が次に再起動するまで残ります。
失敗したエンティティはデータベースに保存されません。
一般的に、ゴーストエンティティは、プログラムによって Create<Entity> サービス (CreateUserCreateThing など) を呼び出すサービスでの不適切な例外処理の結果です。
カスタム ThingWorx サービスの実行中に例外が発生した場合、作成されたエンティティはデータベースに保存されません。
ゴーストエンティティが存在する場合、タイプ (Thing、ユーザー、グループなど) と名前が同じエンティティを作成することはできません。
Composer でスポットライトサーチを使用してゴーストエンティティをサーチすることはできません。
ゴーストエンティティは、専用の ThingWorx サービスを使用することによってのみ検出できます。
ゴーストエンティティは、いくつかの専用の ThingWorx サービスを使用する場合を除き、Composer から操作することはできません。
ゴーストエンティティの例
ゴーストエンティティは、プラットフォームのメモリに存在しますがデータベースには存在しない ThingWorx 内のエンティティです。これらは Composer では表示されませんが、同じ名前とタイプで新しいエンティティを作成しようとすると、そのエンティティがすでに存在するというエラーが表示されます。プラットフォームを再起動すると、ゴーストエンティティは消えます。
ゴーストエンティティは、あるサービスでエンティティが作成され、そのサービスが例外を発生させた場合に作成されます。例外が発生した場合、エンティティを保存したデータベーストランザクションはロールバックしますが、エンティティはプラットフォームのメモリから除去されません。ゴーストエンティティが作成される可能性があるサービスの例を以下に示します。
var params = {
name: "GhostThing" /* STRING */,
description: "Ghost" /* STRING */,
thingTemplateName: "GenericThing" /* THINGTEMPLATENAME */
};
Resources["EntityServices"].CreateThing(params); var makeError;
makeError.notThere = 1
上の例では、存在しない 'makeError' のプロパティを最後の行が参照しているので、例外が発生し、GhostThing を作成したトランザクションはロールバックします。ただし、GhostThing はまだメモリに存在しており、"GhostThing" という名前の新しいエンティティを作成しようとすると、プラットフォームはこれがすでに存在すると見なしているので、エラーが発生します。
* 
GhostThing は Composer では表示されません。
ゴーストエンティティが作成されないようにするには、例外が発生する可能性のあるコードの前後に try/catch 文を配置して、ゴーストエンティティが作成された場合の回復処理を行います。上のコードを以下のように更新することで、ゴーストエンティティが作成されないようにすることができます。
try {
let params = {
name: "GhostThing" /* STRING */,
description: "Ghost" /* STRING */,
thingTemplateName: "GenericThing" /* THINGTEMPLATENAME */
};
Resources["EntityServices"].CreateThing(params);
var makeError;
makeError.notThere = 1;
} catch (err) {
let params = {
name: "GhostThing" /* THINGNAME */
};
Resources["EntityServices"].DeleteThing(params);
}
ゴーストエンティティサービス
プラットフォームサブシステムで以下のサービスを使用して、ゴーストエンティティを処理できます。
DeleteGhostEntities - 永続化されていないすべてのエンティティを削除します。現在の ThingWorx インスタンスでゴーストエンティティを削除するにはパラメータ deleteGhostEntitiesInAllInstances を false に設定し、すべてのインスタンスでゴーストエンティティを削除するには true に設定します。
GetGhostEntities - 現在の ThingWorx インスタンスで永続化されていないゴーストエンティティの名前のリストを返します。エンティティを識別するため、エンドポイントはスポットライトサーチを実行し、ID がないエンティティを選択します。
これは役に立ちましたか?