创建和删除幻影实体
关于幻影实体
幻影实体为因错误而无法创建的实体在内存中的表示。
幻影实体仅在下次 ThingWorx 重新启动前持续存在。
创建失败的实体不会被提交至数据库。
通常情况下,幻影实体是在以编程方式调用 Create<Entity> 服务的服务中处理异常不当的结果 (例如 CreateUserCreateThing)。
如果在自定义 ThingWorx 服务的执行期间引发了异常,则所创建的任何实体均不会被提交至数据库。
如果存在幻影实体,则无法创建相同类型 (事物、用户、组等) 和名称的实体。
Composer 中的 Spotlight 搜索无法搜索幻影实体。
只能通过特定的 ThingWorx 服务来查找幻影实体。
除了通过若干特定的 ThingWorx 服务外,无法通过 Composer 与幻影实体进行交互。
幻影实体示例
幻影实体是 ThingWorx 中存在于平台内存而非数据库中的实体。它们不会出现在 Composer 中,但如果尝试创建具有相同名称和类型的新实体,则 Composer 会显示一条错误,表明该实体已存在。重新启动平台后,幻影实体便会消失。
在服务中创建实体且该服务引发异常时,便会创建幻影实体。在发生异常时,保存实体的数据库事务将回滚,但不会从平台内存中移除实体。以下是可创建幻影实体的示例服务:
var params = {
name: "GhostThing" /* STRING */,
description: "Ghost" /* STRING */,
thingTemplateName: "GenericThing" /* THINGTEMPLATENAME */
};
Resources["EntityServices"].CreateThing(params); var makeError;
makeError.notThere = 1
上述示例中发生了异常且创建 GhostThing 的事务回滚,因为最后一行引用了一个 ‘makeError’ 中不存在的属性。然而,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 - 删除所有尚未持久化的实体。将 deleteGhostEntitiesInAllInstances 参数设置为 false 以删除当前 ThingWorx 实例中的幻影实体,或设置为 true 以删除所有实例中的幻影实体。
GetGhostEntities - 返回尚未在当前 ThingWorx 实例中持久化的幻影实体名称的列表。为了标识实体,端点会执行 Spotlight 搜索并选择无 ID 的实体。
这对您有帮助吗?