用户和组概述
Salesforce中对于用户的定义主要体现于两个对象:用户(User)和组(Group)。组的成员可以是用户也可以是另一个组。
Salesforce中的组可以有多种表示方法,比如队列(Queue)等,它们在数据库中都是以组(Group)的形式储存。
Salesforce中的多种组件包含关于用户和组的查找类型(Lookup)字段。由于这些字段只存储了一个ID值,所以这些ID既可能是用户的ID,也可能是组的ID。
Apex代码示例
public class UserGroupExample {
// 判断一个ID的值是否是用户
public static Boolean isUserId(Id id) {
return id.getSObjectType().getDescribe() == SObjectType.User;
}
// 判断一个ID的值是否是组
public static Boolean isGroupId(Id id) {
return id.getSObjectType().getDescribe() == SObjectType.Group;
}
// 从一个组中获取所有用户成员的ID
// 由于组的成员可能是另一个组,所以必须用循环递归来得到所有的用户成员
public static Set<Id> getAllUserIdFromGroup(Id groupId) {
App.verifyNotNull('groupId', groupId);
Set<Id> userIds = new Set<Id>();
List<GroupMember> groupMembers = [SELECT UserOrGroupId FROM GroupMember WHERE GroupId = :groupId];
for(GroupMember gm : groupMembers) {
if(UserGroupExample.isUserId(gm.UserOrGroupId)) {
userIds.add(gm.UserOrGroupId);
} else if(UserGroupExample.isGroupId(gm.UserOrGroupId)){
userIds.addAll(getAllUserIdFromGroup(gm.UserOrGroupId));
}
}
return userIds;
}
}