フロー内のグループメンバーからメールアドレスを取得する方法

なかなか、うまく行かないですね。


[How to get the email adress from groupmember within the flow](https://trailhead.salesforce.com/ja/trailblazer-community/feed/0D54S00000HDsGa)
追記: 何とこのコードを回答として添付し、ロールを確認するように促したところベストアンサーをつけてくれましたが、何と速攻で質問を丸ごと削除して逃亡されました。自分が欲しい回答を得たらささっと消して無かったことにするんですね。


そこで、Apexで書いてみたら... なんとうまく行かないです。何故だろう？　ロールをグループの中に記述した時にうまくいってない。
よく見るとロールってGroupMemberオブジェクトにないんですねぇ。どこにあるかと言えばGroupオブジェクトのRelatedIdというフィールド...
見事に騙されました。


最終的には以下のようなApexコードで実現できましたが、これをフローにする気にはなれません。


```
public class GroupMemberTest {

    public static Set<String> getAddoress(Id GroupId) {
    
        Set<String> AddoressSet = new Set<String>();
        Set<String> UserIdSet = new Set<String>();
        Set<String> RoleIdSet = new Set<String>();
        
        List<GroupMember> Loop1 = [SELECT Id,UserOrGroupId,Group.RelatedId FROM GroupMember WHERE GroupId =: GroupId];
        system.debug(Logginglevel.INFO,' ===== Loop1 ====== '+Loop1 );
        String MyId;
        Set<String> GroupSet2 = new Set<String>();
        for ( GroupMember g : Loop1  ){
            MyId = g.UserOrGroupId;
            if (myId.left(3) == '005') {
                UserIdSet.add(g.UserOrGroupId);
            } else {
                GroupSet2.add(g.UserOrGroupId);                
            }
            system.debug(Logginglevel.INFO,' ===== g.Group.RelatedId ====== '+g.Group.RelatedId );
            if (g.Group.RelatedId != null ) RoleIdSet.add(g.Group.RelatedId);
        }
        system.debug(Logginglevel.INFO,' ===== GroupSet2 ====== '+GroupSet2 );
        system.debug(Logginglevel.INFO,' ===== RoleIdSet ====== '+RoleIdSet );
        Set<String> GroupSet3 = new Set<String>();
        if (GroupSet2.size()> 0) {
            List<GroupMember> Loop2 = [SELECT Id,UserOrGroupId,Group.RelatedId FROM GroupMember WHERE GroupId =: GroupSet2];            
            
            for ( GroupMember g : Loop2  ){
                MyId = g.UserOrGroupId;
                if (myId.left(3) == '005') {
                    UserIdSet.add(g.UserOrGroupId);
                } else {
                    GroupSet3.add(g.UserOrGroupId);                
                }
                if (g.Group.RelatedId != null ) RoleIdSet.add(g.Group.RelatedId);
            }
        }
        system.debug(Logginglevel.INFO,' ===== GroupSet3 ====== '+GroupSet3 );
        Set<String> GroupSet4 = new Set<String>();
        if (GroupSet3.size()> 0) {
            List<GroupMember> Loop3 = [SELECT Id,UserOrGroupId,Group.RelatedId FROM GroupMember WHERE GroupId =: GroupSet3];            
            
            for ( GroupMember g : Loop3  ){
                MyId = g.UserOrGroupId;
                if (myId.left(3) == '005') {
                    UserIdSet.add(g.UserOrGroupId);
                } else {
                    GroupSet4.add(g.UserOrGroupId);                
                }
                if (g.Group.RelatedId != null ) RoleIdSet.add(g.Group.RelatedId);
            }
        }

        system.debug(Logginglevel.INFO,' ===== UserIdSet ====== '+UserIdSet );
        if( UserIdSet.size() >0 ){
            List<User> userList = [SELECT Id,email FROM User WHERE Id =: UserIdSet] ;
            
            IF(userList.size() >0 ) {
                for (User u : userList ){
                    AddoressSet.add(u.email);
                    system.debug(Logginglevel.INFO,' ===== vvvv ====== '+ u.email );
                }
            }
        }
        
        system.debug(Logginglevel.INFO,' ===== RoleIdSet ====== '+RoleIdSet );
        if( RoleIdSet.size() >0 ){
            List<User> userList2 = [SELECT Id,email FROM User WHERE UserRoleId =: RoleIdSet] ;
            
            IF(userList2.size() >0 ) {
                for (User u : userList2 ){
                    AddoressSet.add(u.email);
                    system.debug(Logginglevel.INFO,' ===== vvv2 ====== '+ u.email );
                }
            }
        }
        
    
        return AddoressSet;
    }
}
```