2012-01-26 26 views
5

通常,當觸發器運行時,我們檢查用戶具有哪種類型的配置文件,如果是我們不希望觸發器運行的類型,那麼在運行任何其他代碼之前我們退出觸發器。如何在運行測試類時停止執行託管觸發器?

問題:我們有一個SF軟件包安裝,我們從其他公司購買的,以及所有它的代碼是不可見的我們,是不是編輯。我們如何阻止其中一些觸發器的運行,而不是通過UI手動禁用它們?我想在運行測試類時暫時禁用它們。

還想着做這樣的事情,卻得到了一個錯誤說「DML不允許ApexTrigger。」

ApexTrigger at = [select id from ApexTrigger where name='SomeTriggerName']; 
at.status = 'Inactive'; 
update at; 
+2

你有很好的理由想禁用它嗎?我知道測試覆蓋率是一個痛苦,但它應該測試一個真實的世界場景 - 如果觸發器要在真實世界中運行,您要確保您的代碼與它一起工作! –

+0

我需要禁用它的原因是因爲測試類檢查了很多場景,並且打包的觸發器運行多個SOQL語句,我無法控制其執行。在我能夠將測試覆蓋率提高到100%之前,SOQL查詢計數在打包的名稱空間中達到100的管理限制。 –

回答

4

我試過做類似的事情,並卡住了。如果不讓託管軟件包的所有者更新Apex代碼,我不相信有一種方法可以解決您的問題。

您在問題出現之前列出的方法是一個很好的解決方案;不過,我建議使用Custom Settings。您可以推薦觸發器的所有者/開發者在執行觸發器之前實施自定義設置檢查。這是我可以爲自己的一些觸發器提出的最佳解決方案。

這將是巨大的,如果ApexTrigger對象可以被更新,但Salesforce的不允許它。

1

我相信你唯一的選擇是卸載或取消部署託管軟件包。