About Custom Setting
Tech ·简介
本文会介绍一下Custom Setting的使用
因为总是容易忘记,每次使用都要大脑扫描一遍记忆,索性写篇文章记录一下
- — Part 1: Custom Setting是个啥
- — Part 2: Custom Setting的调用
- — Part 3: 小结
Part 1: Custom Setting是个啥
Custom Setting的使用和Custom Object几乎一样,可以认为Custom Setting就是一种特殊的Custom Object
用户可以创建一组的数据,这些数据会被存储在app的缓存之中,方便Apex Trigger, Validation Rule, Flow, Formula等等每次快速调用,而不用再从系统的Database中query数据。
Salesforce系统提供两种Custom Settings:
-
List Custom Settings :
相当于声明了一组static的数据,里面维护的数据可以被整个orgnizatio调用,
一般当需要频繁调用某些数据的时候,会选择使用Custom Setting来承载,因为是cache在系统中的,这样会大大减少系统的消耗,提高运行效率。
List类型的Custom Settings里面的数据不会因为Profile或者User的不同而改变。 -
Hierarchy Custom Settings :
可以根据不同的Profile或者User来控制对于setting里面的data的可见性。其余用法和List类型的一致。
Part 2: Custom Setting的调用
代码中调用Custom Setting的时候,只需要把它当作是一个特殊的Object使用就行了,但是又不同于object,它有一些自己独有的方法。
Custom Setting可以支持创建自定义的字段,这就和Object下面创建自定义字段是一样的,用来存储额外的信息。
- getInstance()/getValues()
- getall()
举个例子,比如在系统中创建了如下的Custom Setting:
Label: test custom setting
API: test_custom_setting__c
这个Custom Setting有一个自定义的字段叫做testCustomField__c
此时该Custom Setting在系统中其实就是一个mapping关系,key是Name这个standard字段,Value对应的就是整个Custom Setting的记录值。
点击manage可以创建该Custom Setting的具体记录,比如创建一条记录,Name值给定‘123box’
还可以像一般的object页面一样创建一个list view来展示Custom Setting中的字段,方便查看。
1. getInstance()
test_custom_setting__c cus = test_custom_setting__c.getInstance(‘123box’);
system.debug(‘cus:’+ cus);
通过‘key’值就可以直接的取到对应的value,如下:
cus:
test_custom_setting__c:{
LastModifiedDate=2021-05-14 08:59:33,
IsDeleted=false,
CreatedById=0051T000008y8RMQAY,
CreatedDate=2021-05-14 08:59:33,
Id=a9D05000000YU6tEAG,
CurrencyIsoCode=CNY,
LastModifiedById=0051T000009u9RMQAY,
SetupOwnerId=00D050000007gCDEAY,
Name=123box,
testCustomField__c=test,
SystemModstamp=2021-05-14 08:59:33
}
其中LastModifiedDate,IsDeleted,CreatedById等都是系统的标准字段。 也可以通过链式关系直接取到你自定的字段的值。如下: system.debug(‘custom field value: ‘+ cus.testCustomField__c);
2. getall()
通过getall()方法则可以一次性的把该Custom Setting中所有的记录都取出来,当然如上所述,这些记录会在页面系统加载的时候,已经被存放在系统内存中了。
比如又往test_custom_setting__c中存储了几条数据,
执行test_custom_setting__c.getall() :
{
1033edg = test_custom_setting__c:{
LastModifiedDate=2021-05-14 08:58:30,
IsDeleted=false,
CreatedById=0051T000008y8RMQAY,
CreatedDate=2021-05-14 08:58:30,
Id=a9D05000000YU6eEAG,
CurrencyIsoCode=CNY,
LastModifiedById=0051T000009u9RMQAY,
SetupOwnerId=00D050000007gCDEAY,
Name=1033edg,
testCustomField__c=test1,
SystemModstamp=2021-05-14 08:58:30
},
123box = test_custom_setting__c:{
LastModifiedDate=2021-05-14 08:59:26,
IsDeleted=false,
CreatedById=0051T000008y8RMQAY,
CreatedDate=2021-05-14 08:59:26,
Id=a9D05000000Yu6oEAG,
CurrencyIsoCode=CNY,
LastModifiedById=0051T000008y8RMQAY,
SetupOwnerId=00D050000007gCDEAY,
Name=123box,
testCustomField__c=test2,
SystemModstamp=2021-05-14 08:59:26
},
456test = test_custom_setting__c:{
LastModifiedDate=2021-05-14 08:59:40,
IsDeleted=false,
CreatedById=0051T000008y8RMQAY,
CreatedDate=2021-05-14 08:59:40,
Id=a9D05000000YU6yEAG,
CurrencyIsoCode=CNY,
LastModifiedById=0051T000009u9RMQAY,
SetupOwnerId=00D050000007gCDEAY,
Name=456test,
testCustomField__c=test3,
SystemModstamp=2021-05-14 08:59:40
}
}
可以看到getall()放大执行之后,得到的其实是一个Map (<Name,CustomSetting>), Map的Key是该CustomSetting的Name Field,Value就是该CustomSetting记录本身。
所以可以通过test_custom_setting__c.getall().keySet()获取如下结果: {1033edg, 123.com, 123box, 456test}
通过test_custom_setting__c.getall().Values() 获取如下数据:
(
test_custom_setting__c:{
LastModifiedDate=2021-05-14 08:58:30,
IsDeleted=false,
CreatedById=0051T000008y8RMQAY,
CreatedDate=2021-05-14 08:58:30,
Id=a9D05000000YU6eEAG,
CurrencyIsoCode=CNY,
LastModifiedById=0051T000009u9RMQAY,
SetupOwnerId=00D050000007gCDEAY,
Name=1033edg,
testCustomField__c=test1,
SystemModstamp=2021-05-14 08:58:30
},
test_custom_setting__c:{
LastModifiedDate=2021-05-14 08:59:26,
IsDeleted=false,
CreatedById=0051T000008y8RMQAY,
CreatedDate=2021-05-14 08:59:26,
Id=a9D05000000Yu6oEAG,
CurrencyIsoCode=CNY,
LastModifiedById=0051T000008y8RMQAY,
SetupOwnerId=00D050000007gCDEAY,
Name=123box,
testCustomField__c=test2,
SystemModstamp=2021-05-14 08:59:26
},
test_custom_setting__c:{
LastModifiedDate=2021-05-14 08:59:40,
IsDeleted=false,
CreatedById=0051T000008y8RMQAY,
CreatedDate=2021-05-14 08:59:40,
Id=a9D05000000YU6yEAG,
CurrencyIsoCode=CNY,
LastModifiedById=0051T000009u9RMQAY,
SetupOwnerId=00D050000007gCDEAY,
Name=456test,
testCustomField__c=test3,
SystemModstamp=2021-05-14 08:59:40
}
)
获取到Values值之后,可以方便的进行链式调用。