Apex 批处理作业启动和执行未运行(没有显示来自它们的调试语句)

问题描述 投票:0回答:1

我的批处理作业类如下:

global class GroupMemberSearch implements Database.Batchable<SObject>{

global String groupQuery;
global final Map<Id, Group> groupIdMap;

global GroupMemberSearch(String groupQuery){
    system.debug(groupQuery);
    this.groupQuery = groupQuery;
}

global Database.QueryLocator start(Database.BatchableContext BC){
    system.debug('In batch start');
    return Database.getQueryLocator(groupQuery);
}
global void execute(Database.BatchableContext BC, List<SObject> scope){
    system.debug(scope);
    List<groupInfo> grpMemberList = new List<groupInfo>();
    for(Group s : (List<Group>)scope){
        system.debug(s);
        groupInfo newGroup = new groupInfo();
        if(s.Name != null){
            set<Id> memberIdSet = getGroupMembers(new set<Id>{s.Id}, 0);
            if(memberIdSet.size() != 0){
                newGroup.groupId = s.Id;
                newGroup.groupName = s.Name;
                newGroup.groupMemberIds = memberIdSet;
                grpMemberList.add(newGroup);
            }
        }
    }
    system.debug(grpMemberList);
}
global void finish(Database.BatchableContext BC){}

private set<Id> getGroupMembers(set<Id> groupIds, Integer queryLimit){
    set<Id> nestedIds = new set<Id>();
    set<Id> returnIds = new set<Id>();
    if(queryLimit < 5){
    List<GroupMember> members = [SELECT Id, GroupId, UserOrGroupId FROM GroupMember WHERE GroupId IN :groupIds];
    for(GroupMember member : members){
        if(Schema.Group.SObjectType == member.UserOrGroupId.getSObjectType()){
            nestedIds.add(member.UserOrGroupId);
        } else{
            returnIds.add(member.UserOrGroupId);
        }
    }
    }
    queryLimit++;
    if(nestedIds.size() > 0){
        returnIds.addAll(getGroupMembers(nestedIds, queryLimit));
    }
    return returnIds;
}

public class groupInfo{
    public String groupId;
    public String groupName;
    public set<Id> groupMemberIds;
}
}

在我的顶点控制器中,我调用

Id batchProcessId = Database.executeBatch(new GroupMemberSearch('SELECT Id, OwnerId, Name, Email FROM Group WHERE Name != null'), 20);

它返回一个批处理 ID,并且我从 apex 批处理作业构造函数中看到了 system.debug...但是,我没有从启动和执行方法中看到任何 system.debug...我将日志限制为仅显示调试语句,它们不在任何地方。我知道我的查询返回一个组列表,即使没有,我仍然应该在返回之前从 start 方法中看到 system.debug...

我希望这个批处理作业在页面加载时运行,因此它位于 apex 控制器的构造函数中。

知道为什么启动和执行方法没有被运行吗?

感谢您的帮助!

salesforce batch-processing apex
1个回答
0
投票

您正在运行的查询有记录吗?看起来 getQueryLocator 返回 0 条记录,可能是您看不到日志的原因。另外,如果您的批量执行有记录,请检查“设置”>“Apex 作业”。

© www.soinside.com 2019 - 2024. All rights reserved.