ipex

Salesforceの情報や趣味(ゲーム等)についてフリーに

共有グループに含まれるユーザのIdを取得する

共有グループのIdを受け取って、
その共有グループに含まれるユーザのIdを返すメソッド

ユーザだけでなく共有グループも含まれている可能性があるため、再帰的に記述する。

/** 
* グループメンバーの取得 
*/ 
public static Set<id> GetUserIdsFromGroup(Id groupId){ 
    Set<Id> result = new Set<Id>(); 

    String userType = Schema.SObjectType.User.getKeyPrefix(); 
    String groupType = Schema.SObjectType.Group.getKeyPrefix(); 

    // 指定のグループのグループメンバーを取得し、ループ 
    for (GroupMember m : [Select Id, UserOrGroupId From GroupMember Where GroupId =: groupId]) { 

        // グループメンバーがUserの場合、resultにadd 
        if (((String)m.UserOrGroupId).startsWith(userType)) { 
            result.add(m.UserOrGroupId);
        // グループメンバーがGroupの場合、再帰呼び出ししてUser単位まで処理してresultにadd 
        } else if (((String)m.UserOrGroupId).startsWith(groupType)) { 
            result.addAll(GetUSerIdsFromGroup(m.UserOrGroupId)); 
        }
    }

    return result; 
}