Eine Visualforce Page zeigt alle Queues, die den aktuell angemeldeten User enthalten. Das ist die Aufgabe. Es ist nicht besonders schwer, die entsprechende SOQL Abfrage zu bilden. Etwas komplizierter wird es dann, wenn einige Queues verschachtelte Gruppen enthalten, zu deren Mitgliedern unter anderem der aktuelle User gehört.
Die folgende Klasse enthält eine Methode, welche die Gruppenzugehörigkeit eines Salesforce Benutzers berechnet.
Die Methode computeUserGroups wird rekursiv aufgerufen, bis oberste Ebene, z.B. Queue erreicht ist.
Das Set setGIds enthält alle für den angemeldeten Benutzer relevanten Gruppen und Queue IDs.
/*----------------------------
Die folgende Klasse enthält eine Methode, welche die Gruppenzugehörigkeit eines Salesforce Benutzers berechnet.
Die Methode computeUserGroups wird rekursiv aufgerufen, bis oberste Ebene, z.B. Queue erreicht ist.
Das Set setGIds enthält alle für den angemeldeten Benutzer relevanten Gruppen und Queue IDs.
public without sharing class userGroups{
public Set<Id> setGIds;
/*
CONSTRUCTOR
*/
public userGroups(ApexPages.StandardSetController stdController){
uId = UserInfo.getUserId();
//*** User's queue membership **************/
setGIds
= new set<Id>();
computeUserGroups(new Set<Id>{uId});
}
computeUserGroups
*/
public void computeUserGroups(Set<Id> setUserOrGroupIds){
// return all group/queue ids the user belongs to via direct or indirect
membership
Set<Id> setNestedGroupIds = new Set<Id>();
// query groups and queues
for(GroupMember gm:[select id, GroupId, UserOrGroupId, Group.Name
from GroupMember
where UserOrGroupId =:setUserOrGroupIds and UserOrGroupId != null]){
// remember the group id for next run
setNestedGroupIds.add(gm.GroupId);
// put found group to the set with all available groups
setGIds.add(gm.GroupId);
}
// call self to get nested groups we found
if(setNestedGroupIds.size() > 0){
computeUserGroups(setNestedGroupIds);
}
}
}
Kommentare
Kommentar veröffentlichen