RecordType是什么,有什么用途
我们做成的【PageLayout】,可以分配给某些Group的人去使用看,也就是通过【Profile】去设置【PageLayout】的权限,但是如果是同一个级别的Group的两个人想看不同的【PageLayout】的情况下,如何实现呢,例如面向【国企】和【民营企业】,需要显示不同风格的【PageLayout】,就可以用【RecordType】去区分。
除了上述情况,还有下边两种,
·Business process
专为协助销售过程而设计的Salesforce功能,可用于Leads,opportunities,cases,solution等Object
·PickList
定义每一个RecordType使用的PickList的值和显示的顺序。
1.RecordType做成方法
例:在AccountObject里,创建【民营企业】和【国企】两个RecordType
·PrivateEnterprise
For customers of private enterprises
·StateOwnedEnterprise
For customers of state-owned enterprises
Setup>Object Manager>Record Types>New >输入Name和Label>Active CheckOn>Make Available 选择分配的Profile>Next>选择分配的PageLayout
创建成功↓↓↓↓↓
※RecordType的做成数量虽然没有限制,但是Salesforce推荐最好不要超过200个,因为管理起来非常困难。
2.分配权限
点击【Page Layout Assignment】就可以进行上边说的,对于同一个Profile,不同的RecordType分配给不同的PageLayout
左边找到Profile,然后对应的RecordType列选择自己做成的PageLayout
3.下边做一条数据试一试↓↓↓↓↓↓
点击【New】会自动弹出对话框,可以选择自己想要创建的数据类型。
数据创建成功↓↓↓↓↓↓
开发者Console里可以查询↓↓↓↓↓↓
4.关于Object的【Id】
通过上边开发者Console的查询结果发现插入两条数据的Id分别是【0016g000016K7R2AAK】和【0016g000016K7R7AAK】,为了保证数据不重复,salesforce的机制是Id会自动生成,不可能会出现两条相同Id的数据。为了标识每个Object,用Id的前三位区分,例如【001】就是Account,【003】是Contact,在ApexClass中也可以通过下边方法取得
代码语言:javascript复制Schema.SObjectType.Account.getKeyPrefix()
下面用ApexClass代码取得一下试试↓↓↓↓↓↓
代码语言:javascript复制String keyPrefixAccount = Schema.SObjectType.Account.getKeyPrefix();
String keyPrefixOpportunity = Schema.SObjectType.Opportunity.getKeyPrefix();
String keyPrefixContact = Schema.SObjectType.Contact.getKeyPrefix();
String keyPrefixEvent = Schema.SObjectType.Event.getKeyPrefix();
String keyPrefixTask = Schema.SObjectType.Task.getKeyPrefix();
String keyPrefixBear = Schema.SObjectType.Bear__c.getKeyPrefix();
system.debug('keyPrefix>>Account>>::' keyPrefixAccount);
system.debug('keyPrefix>>Opportunity>>::' keyPrefixOpportunity);
system.debug('keyPrefix>>Contact>>::' keyPrefixContact);
system.debug('keyPrefix>>Event>>::' keyPrefixEvent);
system.debug('keyPrefix>>Task>>::' keyPrefixTask);
system.debug('keyPrefix>>Bear__c>>::' keyPrefixBear);
Log出力结果:
5.ApexClass中取得RecordTypeId
ApexClass中经常会用到RecordTypeId,例如SOQL查询,赋值操作等等,通过下边方法根据RecordType名称取得Id。
代码语言:javascript复制Schema.SObjectType.Account.getRecordTypeInfosByDeveloperName().get('xxx').getRecordTypeId()
ApexClass代码:↓↓↓↓↓↓
代码语言:javascript复制Id priEnterRTId = Schema.SObjectType.Account.getRecordTypeInfosByDeveloperName().get('PrivateEnterprise').getRecordTypeId();
Id stateOwnerEnterRTId = Schema.SObjectType.Account.getRecordTypeInfosByDeveloperName().get('StateOwnedEnterprise').getRecordTypeId();
Set<Id> rtIdSet = new Set<Id>();
rtIdSet.add(priEnterRTId);
rtIdSet.add(stateOwnerEnterRTId);
List<Account> accList = [SELECT Id,Name,RecordTypeId,RecordType.name,phone
FROM Account
where RecordTypeId IN :rtIdSet];
if (accList != null && accList.size() > 0) {
for (Account acc : accList) {
system.debug('Id:>>>>::' acc.Id 'Name:>>>>::' acc.Name);
}
}
Log出力结果: