0

値を実際に更新せずに、Salesforceデータベース内の多数のレコードの更新をトリガーする必要があります。これは、いくつかのフィールドを再計算するためのいくつかの数式を作成するためのものです。

これが私が試したものです-スケジュール可能なクラス(毎晩実行したいとします):

global class acmePortfolioDummyUpdate implements Schedulable
{
    global void execute(SchedulableContext SC) 
    {
        for (Acme_Portfolio__c p : [Select Id From Acme_Portfolio__c]) {
            update(p);
        }
    }
}

update(p)はDMLステートメントであり、Salesforceはそれらの数を150に制限しています。私の場合、それは約数千のレコードです。

また、私は多くの異なるポートフォリオにわたってこれを行う必要があります。SFは、スケジュールされたクラスの数を10に制限します。

これに対する回避策はありますか?ありがとう

4

1 に答える 1

3

BatchApexをお試しください 。スケジュール可能なクラスを使用してバッチをスケジュールできます。私が間違っているが、あなたがそれらを読むたびに数式が再計算されない場合は、私を訂正してください。

編集:コメントに十分なスペースがありません。私はこれがコンパイルされることを保証しません(今はorgにアクセスできません)が、次のようにsthを試してください:

global class batchClass implements Database.batchable<sObject>{ 
    global Database.QueryLocator start(Database.BatchableContext BC){
        return Database.getQueryLocator('Select Id From Acme_Portfolio__c');    
    }   

    global void execute(Database.BatchableContext BC, List<sObject> scope){
        update scope;
    }
    global void finish(Database.BatchableContext BC){
    }   
}

そして、これをシステムログから実行します。

Database.executeBatch(new batchClass());
于 2012-01-11T13:36:43.190 に答える