- Java锁的逻辑(结合对象头和ObjectMonitor)
- 还在用饼状图?来瞧瞧这些炫酷的百分比可视化新图形(附代码实现)⛵
- 自动注册实体类到EntityFrameworkCore上下文,并适配ABP及ABPVNext
- 基于Sklearn机器学习代码实战
本篇参考:
salesforce零基础学习(一百一十一)custom metadata type数据获取方式更新 。
https://developer.salesforce.com/docs/atlas.en-us.apexref.meta/apexref/apex_methods_system_custom_metadata_types.htm 。
https://help.salesforce.com/s/articleView?id=sf.custommetadatatypes_overview.htm&language=en_US&type=5 。
https://trailhead.salesforce.com/content/learn/modules/custom_metadata_types_dec/cmt_overview 。
https://developer.salesforce.com/docs/atlas.en-us.224.0.apexcode.meta/apexcode/apex_class_Metadata_Operations.htm 。
我们在之前的篇中简单描述了 custom metadata type的使用,最开始的 custom metadata type是来建议取代 list custom setting,好处是可以基于metadata进行部署,不用像custom setting基于数据方式,容易出现漏部署情况,所以基于当时的版本来说, custom metadata type相对 list custom setting来说好处是基于metadata部署避免遗漏.
随着 custom metadata type的不断升级,目前增加了很多吸引人的点,主要是针对 Metadata Relationship字段类型的展开,接下来我们看一下这个新的类型可以实现的内容和场景.
当我们在 custom metadata type创建字段时,目前字段类型增加了Metadata Relationship类型,此种类型可以设置两类的关联关系.
关联到其他的custom metadata type,比如metadata type中维护省和市的信息,可以在市的metadata type中关联到省的metadata type.
关联到salesforce标准的表或者自定义表/字段的实例中,比如关联到 Account表的 Industry字段(场景可以基于配置方式设置 default value).
当我们点击此类型创建的下一步,会让你选择系统已经存在的 custom metadata type还是选择 Entity Definition。需要注意的是,如果你的系统曾经已经创建过 Entity Definition,那样以后的步骤中,还会再列表中可以选择 Field Definition以及 Entity Particle,这个在下面图中会有涉及.
demo中会创建这两种类型,其中关联自定义 metadata type的创建步骤不在此处罗列,主要讲一下 Entity Definition相关的关联,当我们创建了关联到 Entity Definition的字段以后,我们继续创建 Metadata Relationship类型的字段,就可以看到下图内容。其中:
当我们选择 Field Definition类型以后,点击下一步会选择 controling field,这样就会实现当选择某个表信息以后,就可以选择到当前这个表的字段.
当我们创建表相关的表数据以后,我们就可以为custom metadata type设置数据,下图demo中维护了Account Customer Priority(自定义字段)默认值的一条数据,我们可以看到当Object Name选择了 Account以后,Field Name就可以自动的基于Account(作为 controling field)选择到 Account表中的字段.
这里针对父子的场景不做一步一步处理,感兴趣的可以基于下图进行数据的创建.
1. 字段default value: 我们在项目上,有时需要在字段级别或者后台代码设置字段的默认值。原有方式是可以基于类型进行设置,比如picklist可以通过选择,其他类型就在 Default Value处设置初始值。apex端设置可以通过Custom Label或者hardcode方式写。除此以外,我们建议使用 Custom Metadata Type来统一维护初始值设置。UI方面可以基于指定的写法进行设置,格式如下图所示.
。
2. 用于validation rule / formula / process builder: 这里只针对validation rule进行举例,写法相同。举个例子,当系统validation rule需要配置的规则用于很多表,并且这个值可能是动态修改的,我们不能每次变更都修改所引用到的所有的validation rule,这时我们可以基于custom metadata type进行配置来更好的可配置化管理.
1. 获取 field Definition类型的metadata type数据 。
基于 apex端,我们可以通过基于metadata的方式,或者基于SOQL搜索方式获取到这条数据,然后获取这条数据的信息,下方的demo仅供参考.
1). 通过 custom metadata type的getInstance方式获取。此方法前提是你需要了解到这个metadata type的 Name信息.
Default_Value__mdt defaultValue = Default_Value__mdt.getInstance('Account_Customer_Priority_Default'
);
system.debug('*** default value: ' + defaultValue.Default_Value__c);
2). 通过表字段的名称获取(这里代码可以进行优化,目前demo中的场景为有且仅有一条配置)。这里我们通过 FieldDefinition获取了当前表的 DurableId,原因是custom metadata type返回的 Field Definition是 DurableId,这个表会在下一篇博客做一些介绍.
List<Default_Value__mdt> defaultValueList =
Default_Value__mdt.getAll().values();
Default_Value__mdt defaultValue;
List<FieldDefinition> fieldDefinitionList =
[SELECT Id, DeveloperName, DurableId FROM FieldDefinition WHERE DeveloperName = 'Customer_Priority' AND EntityDefinition.QualifiedApiName = 'Account' ]; //TODO 实际项目中禁止此种写法,需要非空判断 String customerPriorityDurableId = fieldDefinitionList.get(0 ).DurableId; for (Default_Value__mdt valueItem : defaultValueList) { if('Account' .equalsIgnorecase(valueItem.Object_Name__c) && customerPriorityDurableId.equalsIgnorecase(valueItem.Field_Name__c)) { defaultValue = valueItem; } } if(defaultValue != null ) { system.debug('*** default value : ' + defaultValue.Default_Value__c); }
2. 获取到关联其他metadata type的数据 。
1). 通过 custom metadata type的getInstance方式获取,方式同上,不做说明.
2) 通过关联父表的数据的developerName进行获取(这里代码可以进行优化,目前demo中的场景为有且仅有一条配置).
List<Default_Value__mdt> defaultValueList = Default_Value__mdt.getAll().values(); Default_Value__mdt targetDefaultValue; for (Default_Value__mdt valueItem : defaultValueList) { if (String.isNotBlank(valueItem.Parent_Metadata_Type__c) && 'test_parent' .equalsIgnorecase(valueItem.Parent_Metadata_Type__r.DeveloperName)) { targetDefaultValue = valueItem; } } system.debug(JSON.serialize(targetDefaultValue));
我们看一下目标数据通过 getAll返回的JSON结构,我们会发现如果有负责结构内容,会将复结构的信息同样返回.
{
"MasterLabel": "TEST_RELATION_WITH_PARENT",
"NamespacePrefix": null,
"QualifiedApiName": "TEST_RELATION_WITH_PARENT",
"Parent_Metadata_Type__c": "m005g000002FMry",
"Language": "zh_CN",
"attributes": {
"type": "Default_Value__mdt",
"url": "/services/data/v57.0/sobjects/Default_Value__mdt/m025g000000rtgz"
},
"DeveloperName": "TEST_RELATION_WITH_PARENT",
"Id": "m025g000000rtgz",
"Parent_Metadata_Type__r": {
"attributes": {
"type": "Parent_Metadata_Type__mdt"
},
"DeveloperName": "test_parent"
},
"Field_Name__c": null,
"Object_Name__c": null,
"Label": "TEST_RELATION_WITH_PARENT",
"SystemModstamp": "2023-03-15T10:00:03.000+0000",
"Default_Value__c": null
}
总结: 本篇主要是介绍了一下 metadata type除取代list custom setting以外的其他的使用场景以及使用apex获取的方式。篇中的demo也仅用于获取数据用,对判断,逻辑,可行性操作都可以进一步优化。篇中有错误地方欢迎指出,有不懂欢迎留言.
最后此篇关于salesforce零基础学习(一百二十七)CustomMetadataType篇二的文章就讲到这里了,如果你想了解更多关于salesforce零基础学习(一百二十七)CustomMetadataType篇二的内容请搜索CFSDN的文章或继续浏览相关文章,希望大家以后支持我的博客! 。
关闭。这个问题是opinion-based .它目前不接受答案。 想要改进这个问题? 更新问题,以便 editing this post 可以用事实和引用来回答它. 关闭 9 年前。 Improve
介绍篇 什么是MiniApis? MiniApis的特点和优势 MiniApis的应用场景 环境搭建 系统要求 安装MiniApis 配置开发环境 基础概念 MiniApis架构概述
我正在从“JavaScript 圣经”一书中学习 javascript,但我遇到了一些困难。我试图理解这段代码: function checkIt(evt) { evt = (evt) ? e
package com.fastone.www.javademo.stringintern; /** * * String.intern()是一个Native方法, * 它的作用是:如果字
您会推荐哪些资源来学习 AppleScript。我使用具有 Objective-C 背景的传统 C/C++。 我也在寻找有关如何更好地开发和从脚本编辑器获取更快文档的技巧。示例提示是“查找要编写脚本的
关闭。这个问题不满足Stack Overflow guidelines .它目前不接受答案。 想改善这个问题吗?更新问题,使其成为 on-topic对于堆栈溢出。 4年前关闭。 Improve thi
关闭。这个问题不满足Stack Overflow guidelines .它目前不接受答案。 想改善这个问题吗?更新问题,使其成为 on-topic对于堆栈溢出。 7年前关闭。 Improve thi
关闭。这个问题不符合 Stack Overflow guidelines 。它目前不接受答案。 想改善这个问题吗?更新问题,以便堆栈溢出为 on-topic。 6年前关闭。 Improve this
我是塞内加尔的阿里。我今年60岁(也许这是我真正的问题-笑脸!!!)。 我正在学习Flutter和Dart。今天,我想使用给定数据模型的列表(它的名称是Mortalite,请参见下面的代码)。 我尝试
关闭。这个问题是off-topic .它目前不接受答案。 想改进这个问题? Update the question所以它是on-topic对于堆栈溢出。 9年前关闭。 Improve this que
学习 Cappuccino 的最佳来源是什么?我从事“传统”网络开发,但我对这个新框架非常感兴趣。请注意,我对 Objective-C 毫无了解。 最佳答案 如上所述,该网站是一个好地方,但还有一些其
我正在学习如何使用 hashMap,有人可以检查我编写的这段代码并告诉我它是否正确吗?这个想法是有一个在公司工作的员工列表,我想从 hashMap 添加和删除员工。 public class Staf
我正在尝试将 jQuery 与 CoffeScript 一起使用。我按照博客中的说明操作,指示使用 $ -> 或 jQuery -> 而不是 .ready() 。我玩了一下代码,但我似乎无法理解我出错
还在学习,还有很多问题,所以这里有一些。我正在进行 javascript -> PHP 转换,并希望确保这些做法是正确的。是$dailyparams->$calories = $calories;一条
我目前正在学习 SQL,以便从我们的 Magento 数据库制作一个简单的 RFM 报告,我目前可以通过导出两个查询并将它们粘贴到 Excel 模板中来完成此操作,我想摆脱 Excel 模板。 我认为
我知道我很可能会因为这个问题而受到抨击,但没有人问,我求助于你。这是否是一个正确的 javascript > php 转换 - 在我开始不良做法之前,我想知道这是否是解决此问题的正确方法。 JavaS
除了 Ruby-Doc 之外,哪些来源最适合获取一些示例和教程,尤其是关于 Ruby 中的 Tk/Tile?我发现自己更正常了 http://www.tutorialspoint.com/ruby/r
我只在第一次收到警告。这正常吗? >>> cv=LassoCV(cv=10).fit(x,y) C:\Python27\lib\site-packages\scikit_learn-0.14.1-py
按照目前的情况,这个问题不适合我们的问答形式。我们希望答案得到事实、引用或专业知识的支持,但这个问题可能会引发辩论、争论、投票或扩展讨论。如果您觉得这个问题可以改进并可能重新打开,visit the
As it currently stands, this question is not a good fit for our Q&A format. We expect answers to be
我是一名优秀的程序员,十分优秀!