从概念上讲,我认为您要做的是在这两个对象上设置验证规则。您对 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 中,其中值是客户列表。完成后,根据之前的“帐户”列表运行查询以获取所有帐户(这只是字符串列表,而不是实际帐户),随后遍历与该帐户关联的所有客户,如果客户标记为已关闭,您将相应地更新该帐户的元数据。如果没有客户关闭,则该帐户将被标记为此类。完成后,运行更新语句以更新您已修改的帐户列表。