Triggers Salesforce:相关列表上的触发器

Triggers Salesforce:相关列表上的触发器,triggers,salesforce,Triggers,Salesforce,假设我有两个对象 1.Account-标准对象[它有一个字段名Status_c,它是一个选择列表,具有值inprogress和closed] 2.Client_c-自定义对象[它还具有相同的字段名Status_uc,它是一个选择列表,具有值inprogress和closed] 而Client__;c有对Account name的查找,这意味着Account有一个相关的Client对象列表 我的问题是: 我想写一个触发器,如果我将帐户状态设置为“已关闭”,我就不能将客户端状态设置为“已关闭”,它应

假设我有两个对象
1.Account-标准对象[它有一个字段名Status_c,它是一个选择列表,具有值inprogress和closed]
2.Client_c-自定义对象[它还具有相同的字段名Status_uc,它是一个选择列表,具有值inprogress和closed]

而Client__;c有对Account name的查找,这意味着Account有一个相关的Client对象列表

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


有谁能帮我写一个触发器吗?

从概念上讲,我想你要做的是在这两个对象上设置验证规则。您在客户端上的验证规则应该非常简单:TEXT(Status_c)=“Closed”&&TEXT(Account_c.Status_c)=“Closed”

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

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


从这个结果中,您将迭代所有条目,将它们扔到由帐户Id键入的映射中,其中值是客户端列表。完成后,运行一个查询,根据前面的“accounts”列表获取所有帐户(这只是一个字符串列表,而不是实际帐户),然后迭代与该帐户关联的所有客户端,如果某个客户端被标记为Closed,您将相应地更新该帐户的元数据。如果没有关闭任何客户,帐户将被标记为关闭。完成后,运行update语句以更新已修改的帐户列表。

感谢您的回复…我可以使用汇总汇总和验证规则来满足上述要求,但在这种情况下我希望使用触发器。如果您纯粹希望触发器中的逻辑,可以编程方式将错误添加到字段中
SELECT Account__c.Id FROM Client__c WHERE Id =: Trigger.new OR Id =: Trigger.old
SELECT Account__c.Id, Status__c FROM Client__c WHERE Account__c.Id =: accounts