2011-11-03 46 views
0

我有一個使用映射的批量觸發器,以避免遇到SOQL調控器限制。該觸發器還使用靜態類變量進行遞歸和限制查詢。批量刪除觸發器(太多的Soql語句)Salesforce.com

我正在做的是當一個批量操作(如插入或更新)在對象上觸發對象,在這種情況下觸發對象,然後觸發器將在第一個觸發器上構建相關帳戶的映射,並將使用這些地圖用於其餘觸發點火。

這裏是偉大的工作,操作的例子,但僅用於更新&插入扳機操作之後:

  1. 檢查靜態類變量是不正確的。

  2. 如果變量不是真的構建映射。

  3. 將靜態類變量設置爲true。

  4. 執行觸發操作。

對於插入/更新觸發器,會話狀態將保持不變,直到批量操作結束後纔會重置靜態類變量。

但是,對於之前的刪除觸發器,似乎沒有會話狀態,並且每次刪除記錄時都會重置會話。會話重置,但州長限制對於批量刪除記錄是累積的。因此,即使使用映射,在刪除觸發器之前,soql查詢計數仍會繼續計入臭名昭着的「Too Many Sql Queries」限制,以刪除超過100條記錄。

有關如何防止進入SOQL限制的任何想法將非常感激。我無法在任何地方找到任何東西。

回答

1

您可以選擇的一個選項是使用觸發器安排batch apex class for execution。對於哪個對象是啓用級聯刪除的對象,請使用觸發器創建批處理實例,並將其傳遞給它的源ID列表。

然後在批次類的執行方法中,您可以爲每個批次構建映射等,並在那裏執行刪除。在同步執行的犧牲方面,批次頂點的調節器限制要高得多,即過程通常會在幾秒鐘內啓動。

除此之外,它可能僅僅是優化代碼的一種情況,這樣級聯刪除總是在儘可能大的列表上工作(最多可達200​​個限制),或者也可以使用Master Detail關係來照顧你的一些刪除操作?