【问题标题】:How to check if records related to fields in custom metadata are changed如何检查与自定义元数据中的字段相关的记录是否已更改
【发布时间】:2022-09-23 16:47:11
【问题描述】:

我有一个场景,如果元数据中提到的机会的特定字段值是否发生更改,我需要检查机会更新,如果这些值发生更改,则意味着将考虑更新该记录。我已经用字段集做到了这一点,但不确定我们如何使用自定义元数据来实现同样的目标。在此处附加用于字段集的代码

Public static boolean isValuesChanged(List<Opportunity> newOpportunitiesList, Map<id,Opportunity> oldOpportunityMap)
{
    for(Opportunity oppRecord : newOpportunitiesList)
    {
         
       
            for(Schema.FieldSetMember fieldSetMemberObj : SObjectType.Opportunity.FieldSets.Opportunity_Comparision_FieldSet.getFields()) 
            {
                if(oppRecord.get(fieldSetMemberObj.getFieldPath()) != oldOpportunityMap.get(oppRecord.id).get(fieldSetMemberObj.getFieldPath()) && oppRecord.Amount > 0)
                {
                    return true;
                }
            }
        
    }
    return false;
}

这是我在使用字段集时所做的。我想使用自定义元数据做同样的事情。如何检查 Apex 中的更改? 提前致谢

    标签: salesforce salesforce-lightning salesforce-communities


    【解决方案1】:

    把它分成2个问题。

    1. 给定一组带有字段 api 名称的字符串 - 如何检测更改
      Set<String> fields = new Set<String>{'Name', 'CloseDate', 'StageName'};
      Set<Id> oppsToProcess = new Set<Id>();
      
      for(Opportunity opp: newList){
          Opportunity old = oldMap.get(opp.Id);
          for(String field : fields){
              if(opp.get(field) != old.get(field)){
                  oppsToProcess.add(opp.Id);
                  break;
              }
          }
      }
      
      1. 给定带有字段名称的自定义元数据 - 我如何从中创建一组字符串。

      这个解决方案取决于您在自定义元中到底有什么:

      • 包含多个记录的列表,每个记录都有一个字段的名称?
      • 1 条记录,其字段名称保存在 Field1__c、Field2__c、Field3__c 等列中
      • 1 条记录,其中包含以逗号分隔的字段列表,例如 Fields__c = 'Name,CloseDate,StageName'

      你必须自己做,查询并循环第一个,或者在最后一个上调用String.split(',');,或者......

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2019-09-27
      • 1970-01-01
      • 2010-11-24
      • 2021-02-27
      相关资源
      最近更新 更多