【问题标题】:Want to capture fields which get updated in Salesforce想要捕获在 Salesforce 中更新的字段
【发布时间】:2018-12-18 17:59:18
【问题描述】:

我希望创建一个通用组件,它可以将对象名称和字段名称与旧值和新值一起保存在 BigObject 中。 蛮力算法说,在每个对象的每次更新时,使用描述获取字段 API 名称并检查这些字段的旧值和新值。如果它被修改,则将其插入新的 BigObject。 但它会消耗大量的 CPU 时间,我正在寻找一个最佳的解决方案来处理这个问题。 任何建议表示赞赏。

【问题讨论】:

    标签: salesforce salesforce-lightning salesforce-communities


    【解决方案1】:

    嗯,你已经写好了代码吗?也许对它进行基准测试,然后看看你可以优化什么,而不是从一开始就对其进行过度设计......保持简单,编写测试工具,然后尝试优化(不破坏单元测试)。

    几个随机的想法:

    • 你会在触发器中这样做吗?所以你的“描述”只能发生一次。您不需要描述每个字段,您只需要在触发器的主循环之外进行一次操作。

      Set<String> fieldNames = Account.sObjectType.getDescribe().fields.getMap().keyset(); System.debug(fieldNames);

      这将为您提供“唯一”字段名称,但这已经足够了。您不在乎它们是选择列表还是日期或什么。将它与通用 sObject.get('fieldNameHere') 一起使用,这是一个好的开始。

    • 或者可能根本没有描述。 sObject 的getPopulatedFieldsAsMap() 会给你很酷的地图,你可以轻松地迭代和比较。

    • JSON.serialize对象的旧版本和新版本,如果它们不相同 - 你知道该怎么做。不知道它们是否总是以相同的字段顺序进行序列化,因此检查地图是否相同可能会更好

    • 您真的需要像那样手工制作这个字段历史跟踪吗?您有 100 万条记录的免费存储空间,但它在繁忙的 SF 组织中很容易爆炸。特别是如果您有工作流、流程和其他触发器,这些触发器会在同一事务中转换为多个更新(= 多个触发器运行)。也许普通的字段历史跟踪 + 聊天提要跟踪 + 甚至 salesforce shield(我认为它附带了 60 个以上跟踪的字段)会更适合您的业务需求。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2012-07-11
      • 1970-01-01
      • 1970-01-01
      • 2012-01-29
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多