试图在没有SOQL查询的情况下避免使用Governor限制

时间:2012-05-04 05:29:24

标签: salesforce apex-code

我有2个自定义对象预约_ c和TimeDrive _c。

约会有字段

  1. startdate__c
  2. contact__c
  3. TimeDrive__c已

    1. Target_date__c
    2. contact__c
    3. CreatedDate
    4. 这是我需要做的事情

      我需要让所有记录都在特定的日期范围内

      select id, Target_date__c, Contact__c,  Name, CreatedDate
                          from TimeDrive__c  where Target_date__c >=:startdate  and 
                          Target_date__c <=:enddate
      

      我需要循环浏览此列表中的每条记录,并检查此联系人的约会是否有startdate介于targetdate和createddate之间

      这是我到目前为止所做的一切

              timeDriverLst = [select id, Target_date__c, Contact__c,  Name, CreatedDate
                          from TimeDrive__c  where Target_date__c >=:startdate  and 
                          Target_date__c <=:enddate ];
      
          if(timeDriverLst.size() >0){
          for(integer i =0; i < timeDriverLst.size(); i++)
          {
              mapTime.put(timeDriverLst[i].id, timeDriverLst[i]);
      
             /* appLst = [Select Name, Contact__c from Appointment__c where (StartDate__c > = :timeDriverLst[i].CreatedDate 
                       and StartDateTime__c <=:timeDriverLst[i].Target_date__c) and Contact__c = :timeDriverLst[i].Contact__c ];   
                 */      
      
          }
      

      我知道我不应该在for循环中有一个SOQL查询。我怎样才能避免这种情况并达到要求。

1 个答案:

答案 0 :(得分:4)

一个丑陋但可能有用的解决方案:您可以从时间驱动程序列表中获取所有联系人ID,并找到最早创建的日期。然后,您可以提取其联系人ID在联系人ID列表中且其日期在最早创建日期和目标日期之间的所有约会。然后你需要做一个双循环,检查每个时间驱动程序的每个约会。 (在您检索它们时通过联系方式或按日期订购设备可能会有所帮助)。