Salesforce批量调控器限制
我正在运行以下批处理,并在for循环中进行查询,以下是查询:Salesforce批量调控器限制,salesforce,apex-code,apex,soql,Salesforce,Apex Code,Apex,Soql,我正在运行以下批处理,并在for循环中进行查询,以下是查询: lgm=[select Group.Name, group.type,group.id, group.ownerID from GroupMember where UserOrGroupId =: u.id]; 批处理循环到组织中的每个用户,并获取其权限集、分配给他的公共组和队列以及该用户的名称和id,然后将这些信息填充到名为ConsolidatedUser的自定义对象中 我还没有运行大量记录的批次,以查看是否达到调速器限值,并希望
lgm=[select Group.Name, group.type,group.id, group.ownerID from GroupMember where UserOrGroupId =: u.id];
批处理循环到组织中的每个用户,并获取其权限集、分配给他的公共组和队列以及该用户的名称和id,然后将这些信息填充到名为ConsolidatedUser的自定义对象中
我还没有运行大量记录的批次,以查看是否达到调速器限值,并希望听取您的意见,因为现在批次工作正常,
我可以问一下,在一个批处理中,每个事务允许多少个soql查询,以确保我不会陷入任何冲突。
这是我的代码,谢谢你的帮助
global class TDTRMIS_GetUserDetails implements Database.Batchable<sObject>, Database.Stateful {
global string UserPermissionSets='';
global string UserGroups='';
global string UserQueues='';
global integer i;
global Database.QueryLocator start(Database.BatchableContext bc) {
return Database.getQueryLocator(
'SELECT Id, name, (select PermissionSet.Name, AssigneeId FROM PermissionSetAssignments) from user'
);
}
global void execute(Database.BatchableContext bc, List<User> scope){
// process each batch of records
// process each batch of records
List<ConsolidatedUser__c> lcu = new List<ConsolidatedUser__c>();
list<GroupMember> lgm= new list<GroupMember>();
for (User u : scope)
{
ConsolidatedUser__c cu= new ConsolidatedUser__c();
lgm=[select Group.Name, group.type,group.id, group.ownerID from GroupMember where UserOrGroupId =: u.id];
for(PermissionSetAssignment ps : u.PermissionSetAssignments)
{
UserPermissionSets=UserPermissionSets+ps.PermissionSet.name+'|';
}
for(GroupMember gm : lgm)
{
if(gm.group.type=='Regular' )
{
UserGroups=UserGroups+gm.group.Name+'|';
}
else if(gm.group.type=='Queue' )
{
UserQueues=UserQueues+gm.group.Name+'|';
}
}
cu.PermSet__c=UserPermissionSets ;
cu.PublicGroupList__c=UserGroups;
cu.QueueGroupList__c= UserQueues;
cu.User_Lookup__c=u.id;
cu.name=u.name;
lcu.add(cu);
}
try{
upsert lcu;
}
catch(exception e)
{
system.debug(e);
}
}
global void finish(Database.BatchableContext bc){
//to be added later
}
}
这解释了您需要了解的有关SOQL调控器限制的所有信息: 基本上,每个事务的SOQL调控器限制是100 在循环中放置SOQL查询从来都不是一个好主意。有关备选方案,请参见以下内容:
批处理Apex被认为是异步Apex,因此在您的情况下发出的SOQL查询总数限制为200。 此限制适用于批处理的一次执行 我建议您从user for循环中删除SOQL。List在user for循环内的列表中收集用户ID,然后使用用户ID列表进行单个SOQL查询以获取GroupMember列表
这里有一个相关链接:感谢您的回复,我看到了两种类型的SOQL查询限制;100和200个查询,我可以问你哪一个是这批的限制吗。谢谢@arun kumar在他的回答中提到,200是批量交易的限额。你找到答案了吗?