2017-02-23 52 views
0

我運行以下批次和我提出的一個循環內的查詢,這裏是查詢: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 

    }  

} 
+0

您是否找到答案? –

回答

0

這就解釋了所有你需要知道的關於SOQL調速範圍:

https://developer.salesforce.com/docs/atlas.en-us.apexcode.meta/apexcode/apex_gov_limits.htm

基本上,每次交易SOQL州長極限是100

這是從來沒有把一個好主意循環中的SOQL查詢。請參閱方案如下:

https://developer.salesforce.com/page/Apex_Code_Best_Practices

+0

感謝您的回覆,我看到SOQL查詢有兩種類型的限制; 100個和200個查詢,我可以問你哪一個是這個批次的限制。謝謝 – Sam

+0

正如@ arun-kumar在他的回答中提到的,200是批量交易的限制。 – Steve

1

批頂點被認爲是異步的頂點,所以「發行SOQL查詢總數」限制你的情況將是200 此限制是批處理的一個執行。

我建議你從用戶的循環中刪除SOQL。列表將用戶標識收集到用戶for循環內的列表中,然後使用單個SOQL查詢使用用戶標識列表獲取GroupMember列表。

以下是相關鏈接:https://help.salesforce.com/articleView?id=000176644&language=en_US&type=1