减少for循环以从顶级处理程序中的salesforce org获取每个组的组成员

时间:2017-02-22 22:42:27

标签: list dictionary set salesforce apex

所以我现在有点难过......我想要的功能涉及4个分层的for循环,这给了我带顶点的CPU超时错误。

我要做的是:获取salesforce组织中所有组的地图,其中键是组ID。然后获取所有组成员,然后查找哪些组成员属于每个组并添加到列表中,以便我可以通过组成员获取组的大小,但是无法通过阻止嵌套的映射找到方法for loops ...

我觉得2层循环几乎是必要的吗?

执行此操作后,我需要检查salesforce事件(事件关系)的所有受邀与会者与我刚刚找到的组的组成员列表,以及是否在与会者中找到所有人,然后将该组添加为在javascript端过滤的与会者。

但是,如果我能够有效地找出每个小组的小组成员,我或许可以弄清楚与会者的位置。

有没有人有任何建议使用地图,集和/或列表来执行此操作?或者为每个小组获得小组成员的任何不同方法?

提前谢谢! (P.S.在Apex工作,负责销售人员发展)。

这是我迄今为止所拥有的一种。第一个循环确实有嵌套循环,我改变了一点,但我的修改并不能完全解决问题。 **这些for循环集也已经在循环遍历所有事件的for循环中。

for(Integer x = 0; x < groupMemberList.size(); x++){
                    if(groupMap.containsKey(groupMemberList[x].GroupId)){
                        collectMembers.add(groupMemberList[x])
                    }   
                    if(attendeeMap.containsKey(groupMemberList[x].UserOrGroupId)){
                        groupMembersInEvent.add(groupMemberList[x].UserOrGroupId);
                    }
                }
                    for(Integer x = 0; x < relations.size(); x++){
                        for(Id memId : collectMembers){
                            if(relations[x].attendeeId == memId){
                                groupMembersInEvent.add(memId);
                            }
                        }
                        if(groupMembersInEvent.size() == collectMembers.size()){
                            attendee = new attendeeInfo();
                            //Another loop to loop through groups to get name for this group id? Is it necessary?
                            attendee.attendeeName = 'group';
                            attendee.attendeeId = uniqueGroupId;
                            relations.add(attendee);
                        }
                    }
                    groupMembersInEvent = new List<Id>();
                    collectMembers = new List<Id>();
                }

0 个答案:

没有答案