Salesforce Apex触发器中的列表重复ID

3
在我的订单插入触发器中,我需要更新订单信息的联系人。我知道我的联系人列表中有重复的记录。所以我使用了“Contact[] contactToUpdate = new List(new Set(contactList))”来删除重复项。
但是仍然收到错误消息:“列表中有重复项”。
有什么想法吗?
谢谢。

嗨李,我没有更好的地方告诉你这个消息,我们将在下下周举行我们的第一次墨尔本开发者团体聚会- http://www.meetup.com/Melbourne-Salesforce-Platform-Developer-Users-Group/。 - Matt Lacey
嗨,马特,非常感谢你组织这样的活动!我一定会去参加的。干杯! - Lee Fang
1个回答

6

您说的是对的,集合包含唯一元素,但问题在于您正在处理联系人的实例:即使两个实例引用数据库中的同一联系人,它们仍然是内存中不同的对象实例,因此是唯一的,结果是您可以具有表示具有相同id的相同联系人的两个集合条目。

最简单的方法是使用id到联系人的映射:

map<Id, Contact> contactMap = new map<id, Contact>();

对于每个您处理的订单,您可以使用联系人查找作为键来访问地图以达到您想要更新的联系人。在处理结束时,您只需调用以下内容即可更新联系人:

update mapContacts.values(); 

非常感谢,但我有另一个问题:那么何时将记录识别为实例,何时将其识别为记录? - Lee Fang
2
在代码中,它从未被视为“记录”,而是表示数据库对象的类的实例。如果您从数据库中选择了一个联系人,并将其存储在变量c中,然后将c添加到集合中两次,它只会出现一次,因为它是一个实例。两次查询到两个变量中会创建两个不同的实例,这两个实例都可以添加。 - Matt Lacey
有人告诉过你吗,你很棒吗?非常感谢。 - Lee Fang

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接