有沒有辦法檢測到插入的記錄是觸發器中克隆操作的結果?在觸發器中克隆記錄時檢測
作爲託管軟件包的一部分,我想在克隆Opportunity和OpportunityLineItem記錄時清除一些自定義字段。
或者觸發器不是防止某些字段被克隆的正確位置?
我曾考慮過創建專用的代碼來調用sObject.Clone()並排除不需要的字段。這對於託管包來說似乎不是理想的解決方案,因爲它也會排除機會上的任何其他自定義字段。
有沒有辦法檢測到插入的記錄是觸發器中克隆操作的結果?在觸發器中克隆記錄時檢測
作爲託管軟件包的一部分,我想在克隆Opportunity和OpportunityLineItem記錄時清除一些自定義字段。
或者觸發器不是防止某些字段被克隆的正確位置?
我曾考慮過創建專用的代碼來調用sObject.Clone()並排除不需要的字段。這對於託管包來說似乎不是理想的解決方案,因爲它也會排除機會上的任何其他自定義字段。
在Winter '16 release中,Apex有兩個新方法,可以讓您檢測記錄是否被克隆以及來自哪個源記錄ID。你可以在你的觸發器中使用它。
isClone()
- 如果某個實體是從某個東西克隆的,則返回true,即使該實體未被保存。getCloneSourceId()
- 返回克隆對象的實體的ID。這需要更多的愛 – booky99 2018-01-08 17:33:00
您無法在觸發器內檢測到克隆操作。它被視爲「插入」操作。
您仍然可以使用專用代碼來調用sObject.Clone()並排除不需要的字段。您可以確保使用sObject描述信息包含所有字段以獲取該對象的所有字段,然後排除不需要的字段。
希望這是有道理的!
阿努普
一種方法,雖然那種缺憾,是創建一個新的領域,說original_id__c,它獲取由工作流填充(或觸發,根據您的喜好爲order of execution)時,與空白salesforce的記錄ID。對於新記錄,該字段將與標準salesforce id相匹配,對於克隆記錄他們不會。關於什麼時候以及如何以及如何填充該字段有很多變化,但關鍵是要給自己一個鉤子來區分新的和克隆的記錄。
如果您只是想要控制最終用戶的體驗(與開發人員擴展託管軟件包相反),則可以使用自定義頁面來覆蓋標準克隆按鈕,該頁面將清除使用字段子集的值url hacking。有一些警告,即該字段是可編輯的,並在點擊克隆按鈕的用戶的頁面佈局上可見。在寫這篇文章時,我不相信你可以打包標準按鈕覆蓋,但是可能的變化列表會隨着發佈而改變。
思路:克隆 - 能夠控制哪些字段被克隆(http://success.salesforce.com/ideaview?id=08730000000BpUXAA0) – 2012-07-29 09:40:04