假设我有两个对象
1.Account-标准对象[它有一个字段名称Status_ c,这是一个有进展和关闭值的选项列表]
2.Client _c - 自定义对象[它也有相同的字段名称Status__c,这是一个有进展和关闭值的选项列表]
并且Client__c已查找帐户名称,这意味着帐户具有客户对象的相关列表。
我的问题是:
我想写一个触发器,如果我将帐户状态设置为“关闭”我不能将客户端状态设置为“关闭”,它应该在客户端对象上抛出一条错误消息,或者如果我将客户端状态设置为关闭我无法设置帐户状态反之亦然。
任何人都可以帮我写一个触发器吗?
答案 0 :(得分:1)
从概念上讲,我认为您要做的是在这两个对象上设置验证规则。 Client_ c上的验证规则应该非常简单:TEXT(Status _c)=='Closed'&& TEXT(Account_ c.Status _c)=='已关闭'
更有趣的一点是,当您将帐户移至关闭时,如何处理以确保没有关闭任何相关项目。我倾向于在帐户上创建一个跟踪相关项状态(复选框)的字段,该字段基本上告诉我是否有效更改我的状态。在这种情况下,验证规则变得非常简单。为了设置该布尔值,我最终在Client__c上使用Trigger,它基本上只是在批处理中修改客户端时抓取所有帐户(同时考虑插入,upsert和删除):
SELECT Account__c.Id FROM Client__c WHERE Id =: Trigger.new OR Id =: Trigger.old
然后创建一个所有帐户ID的集合(在此示例中为命名帐户),并运行查询以检索与这些ID相关的所有客户端(在单个查询中以确保您不会达到SOQL限制)。 / p>
SELECT Account__c.Id, Status__c FROM Client__c WHERE Account__c.Id =: accounts
从结果中,您将遍历所有条目,将它们放入由帐户ID键入的地图中,其中值为客户列表。完成后,运行查询以根据之前的“帐户”列表获取所有帐户(这只是一个字符串列表,而不是实际帐户),随后迭代与该帐户关联的所有客户端,以及客户端被标记为已关闭,您将相应地更新该帐户的元数据。如果没有客户关闭,账户将被标记为这样。完成后,运行更新语句以更新已修改的帐户列表。