如何在不进行子类化的情况下使用我自己的%Library.RelationshipObject集合版本?

时间:2013-07-09 00:33:27

标签: intersystems-cache

我正在尝试使用类似于%Library.RelationshipObject的集合类,因为它管理保存和删除集合中的对象。我希望能够灵活地使用自己的对象执行此操作,因此我不想使用关键字关键字或子类%Library.RelationshipObject类。

我不能在持有此集合的父对象上调用我自己的Save()和Delete()方法,并让它调用我的集合类(并让我的类调用Save()而不是%Save())因为混合可能会直接调用%Save()。

我正在尝试的是在我的集合类和我的父类上使用%OnAddToSaveSet方法。当调用父类%OnAddToSaveSet时,父类将我的集合类放在存储集中。集合类调用会根据需要保存和删除集合中的项目。

在我的集合类中执行此操作的正确方法似乎是使用%OnAddToSaveSet()方法将要保存的集合项添加到存储集中,并使用%Delete删除需要删除的项( ),然后设置

%objTX(5,+oref) = oref

每个已删除的项目。

这是正确的方法吗?我错过了什么吗?这支持吗?我可以将任何不受支持的内容更改为更好的支持吗?

2 个答案:

答案 0 :(得分:1)

我相信%OnAddToSaveSet()中的代码应该调用yourObject.%AddToSaveSet()yourObject.%RemoveFromSaveSet()来控制哪些对象应该(或不应该)包含在当前的保存操作中。我相信你也应该能够对不再在集合中的对象调用%Delete(),如果这是你想要实现的行为。

答案 1 :(得分:0)

而不是直接使用%Library.RelationshipObject,更好地使用RelationShips
因此,您可以获得更多可能性,用于控制父母和儿童对象。