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以及做爲審批流程的審批者常常會用到,掌握相關基礎信息便可很好的操做,若是篇中有錯誤的地方歡迎批評指正,若是有問題歡迎留言。