0

現在ログインしているユーザーの役割の下にあるすべての役割を取得しようとしています。階層のレベルはわかりません。ログインしているユーザーによって異なります。

一般的な方法でこれを達成する方法についての指針

  currentUserRoleId= userInfo.getUserRoleId();

currentUserRoleId の下のすべてのロールと、各レベルの下のロールを表示したいと考えています。

ありがとう

4

1 に答える 1

3

残念ながら、これを行うための事前に構築された方法はないようです。ただし、次のように再帰的に実行するコードを記述できるはずです。

public static set<Id> getSubordinateRoles(Id roleId) {
    map<Id, set<Id>> parentAndChildren = new map<Id, set<Id>>();
    set<Id> children;
    for(UserRole ur : [select Id, ParentRoleId from UserRole]) {
        children = parentAndChildren.containsKey(ur.ParentRoleId) ? parentAndChildren.get(ur.ParentRoleId) : new set<Id>();
        children.add(ur.Id);
        parentAndChildren.put(ur.ParentRoleId, children);
    }
    return getSubordinateRoles(role, parentAndChildren);
}

public static set<Id> getSubordinateRoles(Id roleId, map<Id, set<Id>> parentAndChildren) {
    set<Id> subordinateRoles = new set<Id>();
    set<Id> remainingSubordinateRoles = new set<Id>();
    if(parentAndChildren.containsKey(roleId)) {
        subordinateRoles.addAll(parentAndChildren.get(roleId));
        for(Id subRoleId : subordinateRoles) {
            remainingSubordinateRoles.addAll(getSubordinateRoles(subRoleId, parentAndChildren));
        }
    }
    subordinateRoles.addAll(remainingSubordinateRoles);
    return subordinateRoles;
}

私はこれをテストしていないので、動作しない場合はお知らせください。

于 2012-06-02T14:46:19.820 に答える