私は、次のバッチを実行していると私は、forループの内側にクエリを作っていますが、ここでのクエリです:Salesforceのバッチ知事リミット
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
}
}
答えは見つかりましたか? –