0

假设我有两个对象
1.Account- 标准对象[它有一个字段名称 Status_c这是一个具有值 inprogress 和已关闭的选项列表]
2.Client
_c - 自定义对象[它也有相同的字段名称 Status__c 这是一个具有值的选项列表进行中并关闭]

并且 Client__c 具有对 Account name 的查找,这意味着 Account 具有 client object 的相关列表。

我的问题是:
我想写一个触发器,如果​​我将帐户状态设置为“关闭”,我不能将客户端状态设置为“关闭”,它应该在客户端对象上抛出错误消息,或者如果我将客户端状态设置为关闭,我可以不要将帐户状态设置为关闭,反之亦然。

任何人都可以帮我写一个触发器吗?

4

1 回答 1

1

从概念上讲,我认为您要做的是在这两个对象上设置验证规则。您对 Client_ c 的验证规则应该非常简单: TEXT(Status _c) == 'Closed' && TEXT(Account_ c.Status _c) == 'Closed'

更有趣的部分是当您将帐户移至已关闭时,您如何处理确保没有任何相关项目已关闭。我倾向于在帐户上创建一个字段来跟踪相关项目的状态(复选框),它基本上告诉我更改我的状态是否有效。在这种情况下,验证规则变得非常简单。为了设置该布尔值,我最终在 Client__c 上使用了一个触发器,它基本上只是在批量修改客户端时抓取所有帐户(考虑到插入、更新插入和删除):

SELECT Account__c.Id FROM Client__c WHERE Id =: Trigger.new OR Id =: Trigger.old

然后创建一个包含所有帐户 ID 的集合(在本示例中为命名帐户),并运行查询以检索与这些 ID 相关的所有客户(在单个查询中以确保您不会达到 SOQL 限制)。

SELECT Account__c.Id, Status__c FROM Client__c WHERE Account__c.Id =: accounts

根据此结果,您将遍历所有条目,将它们扔到由 Account Id 键入的 Map 中,其中值是客户列表。完成后,根据之前的“帐户”列表运行查询以获取所有帐户(这只是字符串列表,而不是实际帐户),随后遍历与该帐户关联的所有客户,如果客户标记为已关闭,您将相应地更新该帐户的元数据。如果没有客户关闭,则该帐户将被标记为此类。完成后,运行更新语句以更新您已修改的帐户列表。

于 2012-08-08T01:44:20.737 回答