2012-03-22 7 views
1

SalesforceのApexを使用すると、日付フィールド値のリストアイテムをソートする方法はありません。以下のコードのTODOセクションを参照してください。ありがとうございます。あなたは本当にすなわち潜在的にガバナ制限の問題を引き起こし、あなただけのすべてのJob__cのレコードの組み合わせのリストをしたいので、これはあなたの順序付けが容易になり引き起こす可能性があるループ内でクエリを実行しないで、このコードをbulkifyすべき日付フィールド値(Apex、Salesforce)のリストアイテムを並べ替える方法

/** 
* Select list of jobOccurrences belongs to particular list of jobs 
*/ 
private List<Job_Occurrence__c> getJobsByJobCode(List<Job__c> jobList) { 

// Select relevant Job Occurrence objects 
    List<Job_Occurrence__c> jobOccuList = new List<Job_Occurrence__c>(); 

    for (Job__c job : jobList) { 

     Job_Occurrence__c jobOccurrence = [SELECT Id, Job__c, 
                Schedule_Start_Date__c 
              FROM Job_Occurrence__c 
              WHERE Job__c =: job.Id]; 

     if((jobOccurrence != null) && (jobOccurrence.Id != null)) { 
      jobOccuList.add(jobOccurrence); 
     }   
    } 

    if((jobOccuList != null) && (jobOccuList.size() > 0)) { 

     // TODO 
     // How I sort the 'jobOccuList' with Date field 'Schedule_Start_Date__c', 
     // for select the items according to sequence of latest jobOccurrence  

     return jobOccuList; 

    } else { 
     throw new RecordNotFoundException ('Could not found any jobOccurrence for given list of jobs'); 
    }        
} 

答えて

4

あなたもその質問でそれをやることができます!

// Select relevant Job Occurrence objects 
List<Job_Occurrence__c> jobOccuList = new List<Job_Occurrence__c>(); 

for (Job__c job : jobList) { 

    Job_Occurrence__c jobOccurrence = [SELECT Id, Job__c, 
               Schedule_Start_Date__c 
             FROM Job_Occurrence__c 
             WHERE Job__c =: job.Id]; 

    if((jobOccurrence != null) && (jobOccurrence.Id != null)) { 
     jobOccuList.add(jobOccurrence); 
    }   
} 

は、基本的に我々は唯一の代わりに(Nは jobList.size()ある)Nの1つのクエリを使用し、それらを同時に注文を取得しないように、これを最適化することができます。

変更するコードは、このです。まず、Job__c IDのリストを収集する必要があり、その後、我々は、SOQLのWHERE句でINステートメントを使用することができます:あなたは簡単に戻ってJob_Occurrence_ からマッピングできるようにする必要がある場合は、最後に

// Select relevant Job Occurrence objects 
List<Job_Occurrence__c> jobOccuList; 
Set<Id> setJobIds = new Set<Id>(); 

setJobIds.addAll(jobList); 

// get the job occurances starting with the latest, use ASC for reverse! 
jobOccuList = [SELECT Id, Job__c, Schedule_Start_Date__c 
       FROM Job_Occurrence__c 
       WHERE Job__c IN : setJobIds 
       ORDER BY Schedule_Start_Date__c DESC]; 

cレコードをジョブ _cレコードに書き換えると、以下のようにセットをマップに置き換えることができます。ただし、このリストが必要な場合は、ここでは必要ではないと思います。

Map<Id, Job__c> mapJobs = new Map<Id, Job__c>(); 

for (Job__c job : jobList) { 
    mapJobs.put(job.Id, job); 
} 

** snip ** 

for (Job_Occurrence__c jobOccu : jobOccuList) { 
    Job__c theJob = mapJobs.get(jobOccu.Job__c); 
    // do stuff with the job 
} 

このコードのすべてがブラウザに書き込まれているので、いくつかの構文エラーがあるかもしれませんが、それは良いはずです!

+0

こんにちはLaceySnr!貴重な答えに感謝します。よいひとときを! – Channa

+1

私はコードではなくSOQLクエリでソートを使用するのが好きです。リスト項目をsetJobIds.addAll(jobList)を使用するためにセットに追加するループをスワップすることが、若干改善されました。 – Born2BeMild

+0

良いスポット!これを反映するようにサンプルを更新しました。 –

-1

あなたは試すことができます:それは私のために働いて

liDates.sort(); 

乾杯

関連する問題