【问题标题】:Salesforce: trigger on related listSalesforce:在相关列表上触发
【发布时间】:2012-08-05 19:52:11
【问题描述】:

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

并且 Client__c 具有对 Account name 的查找,这意味着 Account 具有相关的客户端对象列表。

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

谁能帮我写一个触发器?

【问题讨论】:

    标签: triggers salesforce


    【解决方案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 中,其中值是客户列表。完成后,根据之前的“帐户”列表运行查询以获取所有帐户(这只是字符串列表,而不是实际帐户),随后遍历与该帐户关联的所有客户,如果客户标记为已关闭,您将相应地更新该帐户的元数据。如果没有客户关闭,则该帐户将被标记为此类。完成后,运行更新语句以更新您已修改的帐户列表。

    【讨论】:

    • 感谢您的回复...我可以使用汇总汇总和验证规则来满足上述要求,但我想在这种情况下使用触发器。
    • 如果您纯粹想要触发器中的逻辑,您可以以编程方式将错误添加到字段salesforce.com/us/developer/docs/apexcode/Content/…
    猜你喜欢
    • 1970-01-01
    • 2014-01-02
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2017-01-16
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多