首页 > 解决方案 > 访问缓存 Objectscript 中的实例变量

问题描述

我有一个例程,我使用反射动态实例化持久对象。当我尝试使用反射 ($Property) 对其进行实例化时,该对象的属性之一(也是持久对象)失败。它失败,因为该属性已从数据库中删除。这是有道理的,但我似乎无法获得该属性的 ID (23)。当我 ZWrite 对象时,我可以在打印输出中看到属性 id。

+----------------- swizzled references ---------------
|      i%PropID = 23
|      r%PropID = ""

我无法弄清楚如何访问 i%ProdID 值。如果有人可以提供帮助,我将不胜感激。

我正在使用递归来获取对象的属性和每个属性的后续属性(如果它们具有持久性)等等,但是如果属性实际上没有持久化(以某种方式被删除),我仍然想获取 id . 我曾考虑过使用 sql,但如果可能的话,我想远离它。

标签: intersystems-cacheintersystemsobjectscript

解决方案


i%<PropertyName>以及访问此属性的原始数据的r%<PropertyName>特殊语法。如果要获取此属性的值,则必须使用原始属性名称PropID
要获取特定类的属性列表,您可以使用 classes%Dictionary.ClassDefinition%Dictionary.PropertyDefinition,以任何您可能感兴趣的方式以编程方式阅读类的完整定义并做任何您想做的事情。


推荐阅读