我有一个具有唯一值的属性的对象。这可能不是一个好理由,但这个属性不是我的ID,因为它是一个列表,显示值由非打印字符组成。
我想检查是否存在具有此属性的特定值的对象。到目前为止我想到的选项是使它成为ID,然后使用内置的%ExistsID方法,使用SQL查询并手动搜索全局以获取相应的下标。
第一个解决方案的问题是我更喜欢拥有人类可读的ID。如果我很傻,请说出来。
第二种方法的问题在于,在我看来,虽然SQL对于这样的东西是好的,但在这种特殊情况下,在我看来,我开始运用这种繁琐的机制,需要大量的开销。得到一个我应该能够变得容易的结果。再说一遍,我可能对此很愚蠢。
最后一个问题是,作为主要由数字组成的LB的值存储为$ c(x,y,z)。我不确定如何搜索这个(即如何从我的列表中获取)。此外,它似乎有点混乱,而且我的水平太低了。
我觉得应该有一种更简单的OO方式来获取基于唯一(索引)值的对象,我几乎可以肯定有,但我似乎无法在文档中找到它。自动生成的%PropertyExists(UniqueValue)会很不错。
也许我应该编写自己的生成器方法? 感谢任何建议。
答案 0 :(得分:4)
如果查看inline element,您会发现,类中的每个唯一索引都有一些生成的方法,例如Open和Exists和Delete。使用这些方法中的任何一种,您都可以通过已知的唯一值打开任何对象 所以,如果你有像这样的索引
set obj=##class(your.class).SomeIndOpen(prop1val, prop2val)
你可以打开对象,所以
if ##class(your.class).SomeIndExists(prop1val, prop2val, .id) {
//
}
或检查此对象是否已存在,并获取此对象的ID和。
{{1}}
我希望这对你来说已经足够了,如果没有,请随意提出更多。
答案 1 :(得分:1)
您可以使用COUNT()函数使用更简单的SQL查询,如果计数为1则返回。 为此,请查看此主题: Select count(*) from result query