salesforce零基础学习(一百一十一)custom metadata type数据获取方式更新

本篇参考:

//developer.salesforce.com/docs/atlas.en-us.234.0.apexref.meta/apexref/apex_methods_system_custom_metadata_types.htm

//trailhead.salesforce.com/en/content/learn/modules/platform-developer-i-certification-maintenance-winter-22/learn-whats-new-for-platform-developers-22

我们都知道salesforce里面 custom setting的使用方法,不了解的小伙伴可以开启时空门:salesforce 零基础学习(四十)Custom Settings简单使用

custom setting好用是好用,但是理解起来可以理解成特殊的表,数据还是要维护的,所以针对不同的sandbox或者生产环境,可能会有一些 manual action来维护数据或者初期的导入。所以针对 list类型的 custom setting,官方更建议使用 custom metadata type来维护。我们可以通过metadata的方式来部署这些内容,这样可以尽最大的可能去减少因为遗漏导致的数据不完整从而导致业务处理有问题的情况。

那我们之前在使用 custom metadata type特别烦人的地方是,我们需要通过搜索数据的方式来获取数据,使用方式很类似我们object的query。比如下面的demo

System.debug(LoggingLevel.INFO, '*** Limits.getQueryRows(): ' + Limits.getQueryRows());
Country_Code__mdt countryCode = [
  SELECT Id, MasterLabel, Country_Code__c
  FROM Country_Code__mdt
  WHERE MasterLabel = 'Canada'
  LIMIT 1
];
System.debug(LoggingLevel.INFO, '***after Limits.getQueryRows(): ' + Limits.getQueryRows());

使用这种方式是需要消耗SOQL的查询数量的,所以我们在实际使用时,偶尔还是会考虑取舍,使用 list custom setting而不是 custom metadat type。

 针对新的release出来以后,custom metadata同样也支持了类似 custom setting的查询方式,这种既不计算了SOQL的查询数,也使得结果获取更快。方法提供了getInstance以及 getAll,demo中我们使用getInstance()方法,感兴趣的小伙伴可以查看一下上面链接的其他的方法。

System.debug(LoggingLevel.INFO, '*** Limits.getQueryRows(): ' + Limits.getQueryRows());
// Country_Code__mdt countryCode = [
//   SELECT Id, MasterLabel, Country_Code__c
//   FROM Country_Code__mdt
//   WHERE MasterLabel = 'Canada'
//   LIMIT 1
// ];
Country_Code__mdt countryCode = Country_Code__mdt.getInstance('Canada');
System.debug(LoggingLevel.INFO, '***after Limits.getQueryRows(): ' + Limits.getQueryRows());

使用getInstance方法以后的执行结果

注意点:当前的这个getInstance方法是基于winter22的更新,对应的API version为API 53,当然你如果设置API version为API52也可以正常使用的。所以如果apex中如果使用此功能,一定要记得version设置为52及以上,否则会报错。

总结:篇中简单的介绍了一下 custom metadata type的新取法,对于代码中深受 limitation所头疼的小伙伴可以考虑去进行性能调优了。当然,salesforce每一期的release都惊喜不断,大家也要多关注关注 release note哦,有用的内容找机会可以慢慢的更新一下用法。篇中有错误地方欢迎指出,有不懂欢迎留言。