我的批处理作业类如下:
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 控制器的构造函数中。
知道为什么启动和执行方法没有被运行吗?
感谢您的帮助!
您正在运行的查询有记录吗?看起来 getQueryLocator 返回 0 条记录,可能是您看不到日志的原因。另外,如果您的批量执行有记录,请检查“设置”>“Apex 作业”。