salesforce中,有的時候我們需要將一組用戶放進一個Group,用來實現以下主要功能:
1.通過sharing rule設置默認的共享訪問;
2.將記錄分享給其他用戶;
3.指定同步的聯系人,這些聯系人的onwer屬於其他user;
4.分配Group中用戶到指定的動作,比如審批流程等。
Group作為系統表,其字段信息如下所示:
其中Type作為PickList字段,他的取值可以通過Schema方式取出。
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; } }
調用后顯示結果如下:
[
"AllCustomerPortal",
"CollaborationGroup",
"Manager",
"ManagerAndSubordinatesInternal",
"Organization",
"PRMOrganization",
"Queue",
"Regular",
"Role",
"RoleAndSubordinates",
"RoleAndSubordinatesInternal",
"SharingRuleGroup",
"Territory",
"TerritoryAndSubordinates"
]
通過結果可以看出Group可以有很多種Type。其中,Public Group對應的Type為Regular,Queue對應的Type為Queue。取相應類型時的Group時只需要添加檢索條件即可。
除了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以及作為審批流程的審批者經常會用到,掌握相關基礎信息即可很好的操作,如果篇中有錯誤的地方歡迎批評指正,如果有問題歡迎留言。