Salesforce学习 Lightning(二)【RecordType】

2021-01-04 10:24:35 浏览数 (2)

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出力结果:

0 人点赞