2014-03-05 44 views
0

我有這個非常奇怪的錯誤,「System.TypeException:單個操作中不能有超過10個塊」,有沒有人見過/遇到過這個?如果你知道如何解決這個問題,請你能指導我。System.TypeException:單個操作中不能有超過10個塊

我想在sObject列表中插入不同類型的sObjects。該列表永遠不會超過10行。

回答

2

這在這裏發佈:

https://developer.salesforce.com/forums/ForumsMain?id=906F000000090nUIAQ

表明,它是沒有什麼不同sObjects的數量,但導致超過此塊限制對象的順序。換句話說,「1,1,1,2,2,2」有一個塊,即從「1」到「2」的轉換。 「1,2,3,4,5,6」有六個塊,即使元素的數量是相同的。建議的解決方案是將對象放入按對象順序排序的列表中。

是否有可能創建一個只有2或3行的合理測試用例?

1

有此問題的兩種可能的解釋:

  1. 作爲Jagular注意到,您沒有訂購你試圖插入sobjects,所以有在列表中超過10「塊」。
  2. 您嘗試插入> 2000條記錄和> 1 sobject類型。這看起來像一個Salesforce錯誤,因爲錯誤消息不符合問題。
+0

我知道一個事實,條件2是我的情況。 Oy公司! – sechastain

0

方案1和它的解決方案

當你有一個混合列表,確保該對象未散,沒有任何順序。例如,A,B,A,B,A,B,A,B ...。 Salesforce在切換sObject類型超過10次時存在固有的麻煩。他們將此切換限制稱爲分塊限制。因此,在這個混合列表中,如果您已經對它進行了排序並將其傳遞給DML,那麼Salesforce會更加快樂。例如。 A,A,A,B,B,B,B ......在這種情況下,salesforce只需切換一次(即讀取所有A對象 - >開關 - >讀取所有B對象)。最大塊限制爲10.因此,在這裏我們是安全的。 listToUpdate.sort(); UPDATE listToUpdate;

方案2和其解決方案

,我們在我們牢記的另一點是,當混合動力車列表中包含多個對象的數量爲一類,我們可以碰上TypeException。如截圖所述,如果列表包含1001個A型對象和1001個B型對象,則總對象數等於2002.允許的最大組塊數爲10個。因此,如果您執行簡單的數學運算,每個塊將爲2002/10 = 200. Salesforce還強制執行另一個限制,即每個塊不應包含200個或多個200個對象。在這種情況下,我們必須預見有多少對象可以輸入此代碼,並且我們必須編寫代碼以每次都通過DML的安全大小列表。 方案3和其解決方案

方案3和其解決方案

可能發生第三種情形是當混合動力車列表包含超過10種類型的對象,那麼,即使列表的大小,如果非常小,salesforce讀取不同的sObject時會發生切換。所以,我們必須確保在這種情況下,我們爲每個sObject類型分配單獨的列表,然後將它傳遞給DML。在頂點觸發器或頂點類中執行此操作會導致您遇到一些麻煩,因爲多個DML是在上下文中啓動的。在不同的上下文中傳遞這種多個sObject列表以用於DML操作將真正減輕您輸入平臺的負載。考慮在Batch Apex Job中執行這種邏輯,而不是頂點觸發器或頂點類。

希望這會有所幫助。