2012-06-12 46 views
1

設置:觸發現有數據?

A - < B> - C。在沒有對B中的RFS,然後有一個更新觸發器後,當運行在填充B.領域一個B的場均然後彙總到現場對C.

問:

觸發器可以工作,但我需要在數據庫中的現有記錄上運行它以將所有內容更新到最新狀態。我怎麼做?我已經嘗試過使用A和C上的RFS進行'強制質量重新計算'。

回答

2

找到了解決辦法。

使用數據加載器 - 對Id和更新執行導出。這將改變上次修改日期,並導致觸發後更新觸發器。

6

你可以寫很簡單Batch Apex (see docs)作業類觸摸要重新計算所有記錄:

global class TouchRecords implements Database.Batchable<sObject>{ 
    private String query; 

    global TouchRecords(String query) { 
     this.query = query; 
    } 

    global Database.QueryLocator start(Database.BatchableContext BC){ 
     return Database.getQueryLocator(query); 
    } 

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

    global void finish(Database.BatchableContext BC){ 
    } 
} 

的工作就可以通過下面的(例如,通過執行匿名)運行執行:

Id batchInstanceId = Database.executeBatch(new TouchRecords('select id from A__c')); 

Id batchInstanceId = Database.executeBatch(new TouchRecords('select id from Contact')); 

觸及所有聯繫人

這應該在所有正在觸摸的記錄上運行觸發器(最多支持5000萬條記錄)。與提議的dataloader解決方案相同,但保留在SFDC內以便重複使用

0

更好的方法是在對象上創建一個虛擬字段,然後對該字段執行批量更新。這可能會有更多問題,因此您希望將批量大小縮減爲一個數字,以便在執行任何DML時不會受到SOQL限制。