在 Cache Objectscript 中访问实例变量
Access instance variables in Cache Objectscript
我有一个使用反射动态实例化持久对象的例程。当我尝试使用反射 ($属性) 实例化它时,该对象的一个属性(也是一个持久对象)失败了。它失败了,因为 属性 已从数据库中删除。这是有道理的,但我似乎无法获得 属性 (23) 的 ID。当我 ZWrite 对象时,我可以在打印输出中看到 属性 id。
+----------------- swizzled references ---------------
| i%PropID = 23
| r%PropID = ""
我无法弄清楚如何访问 i%ProdID 值。如果有人可以提供帮助,我将不胜感激。
我正在使用递归来获取对象的属性和每个 属性 的后续属性(如果它们扩展持久化)等等,但在 属性 实际上没有持久化的情况下(不知何故被删除),我还是想得到这个ID。我考虑过使用 sql,但如果可能的话,我想远离它。
i%<PropertyName>
以及 r%<PropertyName>
只是 special syntax 获取此 属性 的原始数据。如果您想获得此 属性 的值,您必须使用原始 属性 名称,在您的情况下为 PropID
。
要获取特定 class 的属性列表,您可以使用 classes %Dictionary.ClassDefinition
和 %Dictionary.PropertyDefinition
,任何您可能感兴趣的方式来阅读 [=19] 的完整定义=] 以编程方式做任何你想做的事。
您可以使用未记录的调用来获取 i% 值,但甚至 i% 属性的存在以及访问其值的函数也是未记录的。
获取从数据库中删除的子对象的 ID 的最佳记录方法是调用 GetStored:
write ##class(parent.Class).ProdIDGetStored(ParentID)
应该return 来自数据库的儿童 ID(在您的情况下为 23)
解决方案是覆盖 属性 对象的 getter 并在此处解释:
https://docs.intersystems.com/latest/csp/docbook/DocBook.UI.Page.cls?KEY=GOBJ_propmethods
S getter = propertyName_"GetObjectId"
try {
S id = $METHOD(object, getter)
} catch (ex) {}
return $G(id)
我有一个使用反射动态实例化持久对象的例程。当我尝试使用反射 ($属性) 实例化它时,该对象的一个属性(也是一个持久对象)失败了。它失败了,因为 属性 已从数据库中删除。这是有道理的,但我似乎无法获得 属性 (23) 的 ID。当我 ZWrite 对象时,我可以在打印输出中看到 属性 id。
+----------------- swizzled references ---------------
| i%PropID = 23
| r%PropID = ""
我无法弄清楚如何访问 i%ProdID 值。如果有人可以提供帮助,我将不胜感激。
我正在使用递归来获取对象的属性和每个 属性 的后续属性(如果它们扩展持久化)等等,但在 属性 实际上没有持久化的情况下(不知何故被删除),我还是想得到这个ID。我考虑过使用 sql,但如果可能的话,我想远离它。
i%<PropertyName>
以及 r%<PropertyName>
只是 special syntax 获取此 属性 的原始数据。如果您想获得此 属性 的值,您必须使用原始 属性 名称,在您的情况下为 PropID
。
要获取特定 class 的属性列表,您可以使用 classes %Dictionary.ClassDefinition
和 %Dictionary.PropertyDefinition
,任何您可能感兴趣的方式来阅读 [=19] 的完整定义=] 以编程方式做任何你想做的事。
您可以使用未记录的调用来获取 i% 值,但甚至 i% 属性的存在以及访问其值的函数也是未记录的。
获取从数据库中删除的子对象的 ID 的最佳记录方法是调用 GetStored:
write ##class(parent.Class).ProdIDGetStored(ParentID)
应该return 来自数据库的儿童 ID(在您的情况下为 23)
解决方案是覆盖 属性 对象的 getter 并在此处解释:
https://docs.intersystems.com/latest/csp/docbook/DocBook.UI.Page.cls?KEY=GOBJ_propmethods
S getter = propertyName_"GetObjectId"
try {
S id = $METHOD(object, getter)
} catch (ex) {}
return $G(id)