3

私は 2 つのカスタム オブジェクトの予定_ c と TimeDrive _c を持っています。

予定にはフィールドがあります

  1. 開始日__c
  2. お問い合わせ__c

TimeDrive__c は

  1. Target_date__c
  2. お問い合わせ__c
  3. 作成日

これが私がしなければならないことです

特定の日付範囲ですべてのレコードを取得する必要があります

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

このリストの各レコードをループして、開始日が 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 クエリを含めるべきではないことはわかっています。これを回避して要件を達成するにはどうすればよいですか。

4

1 に答える 1

4

醜いが、おそらく使用可能な解決策: タイム ドライバー リストからすべての連絡先 ID を取得し、最も古い作成日を見つけることもできます。次に、連絡先 ID が連絡先 ID リストにあり、日付が最も早い作成日と目標日の間にあるすべての予定を引き出すことができます。次に、各時間ドライバーに対して各予定をチェックして、二重ループを実行する必要があります。(連絡先または取得した日付でアプリを注文すると、ここで役立つ場合があります)。

于 2012-05-04T09:56:49.793 に答える