使用其中一个属性

时间:2016-04-04 19:06:26

标签: intersystems-cache

我有一个具有唯一值的属性的对象。这可能不是一个好理由,但这个属性不是我的ID,因为它是一个列表,显示值由非打印字符组成。

我想检查是否存在具有此属性的特定值的对象。到目前为止我想到的选项是使它成为ID,然后使用内置的%ExistsID方法,使用SQL查询并手动搜索全局以获取相应的下标。

第一个解决方案的问题是我更喜欢拥有人类可读的ID。如果我很傻,请说出来。

第二种方法的问题在于,在我看来,虽然SQL对于这样的东西是好的,但在这种特殊情况下,在我看来,我开始运用这种繁琐的机制,需要大量的开销。得到一个我应该能够变得容易的结果。再说一遍,我可能对此很愚蠢。

最后一个问题是,作为主要由数字组成的LB的值存储为$ c(x,y,z)。我不确定如何搜索这个(即如何从我的列表中获取)。此外,它似乎有点混乱,而且我的水平太低了。

我觉得应该有一种更简单的OO方式来获取基于唯一(索引)值的对象,我几乎可以肯定有,但我似乎无法在文档中找到它。自动生成的%PropertyExists(UniqueValue)会很不错。

也许我应该编写自己的生成器方法? 感谢任何建议。

2 个答案:

答案 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