salesforce中,有的时候咱们须要将一组用户放进一个Group,用来实现如下主要功能:spa
1.经过sharing rule设置默认的共享访问;debug
2.将记录分享给其余用户;code
3.指定同步的联系人,这些联系人的onwer属于其余user;blog
4.分配Group中用户到指定的动做,好比审批流程等。get
Group做为系统表,其字段信息以下所示:同步
其中Type做为PickList字段,他的取值能够经过Schema方式取出。it
public with sharing class GroupPickList { public static List<String> getGroupPickList() { Schema.DescribeFieldResult groupTypeResult = Group.Type.getDescribe(); List<Schema.PicklistEntry> groupTypePickListValues = groupTypeResult.getPicklistValues(); List<String> groupTypeValues = new List<String>(); for(Schema.PicklistEntry groupTypePickListValueItem : groupTypePickListValues) { groupTypeValues.add(groupTypePickListValueItem.getValue()); } return groupTypeValues; } }
调用后显示结果以下:io
[
"AllCustomerPortal",
"CollaborationGroup",
"Manager",
"ManagerAndSubordinatesInternal",
"Organization",
"PRMOrganization",
"Queue",
"Regular",
"Role",
"RoleAndSubordinates",
"RoleAndSubordinatesInternal",
"SharingRuleGroup",
"Territory",
"TerritoryAndSubordinates"
]
经过结果能够看出Group能够有不少种Type。其中,Public Group对应的Type为Regular,Queue对应的Type为Queue。取相应类型时的Group时只须要添加检索条件便可。class
除了Group表外还须要介绍另一个系统表--GroupMember。此表用来存储某个Group对应的成员或者子Group的信息,主要字段有:GroupId, Id,UserOrGroupId。基础
应用:
1.查询Name 为ceo group的Public Group中包含的User或者Group
SELECT GroupId, Id, SystemModstamp, UserOrGroupId FROM GroupMember where GroupId in (select Id from Group where Name = 'ceo group' and Type = 'regular')
2.当Group做为审批流程的一部分,查询当前是否到Public Group审批的处理
List<Group> groupList = [select Id from Group where Name = 'ceo group']; if(groupList != null && groupList.size() > 0) { Id groupId = groupList.get(0).Id; List<ProcessInstance> pis = [SELECT TargetObjectId FROM ProcessInstance WHERE isDeleted = false AND id in ( SELECT processInstanceId FROM ProcessInstanceworkitem WHERE isdeleted = false AND ActorId = :groupId )]; if(pis.size() > 0) { system.debug('当前Group用户审批'); } }
总结:Group在record sharing以及做为审批流程的审批者常常会用到,掌握相关基础信息便可很好的操做,若是篇中有错误的地方欢迎批评指正,若是有问题欢迎留言。