2013-05-29 56 views
3

我們在我們的實例中有一個自定義對象,它實際上是一個交叉點對象。現在,如果關係被刪除,結點對象中的記錄被刪除。覆蓋自定義對象的刪除方法

我們希望將此行爲更改爲使聯結對象標記爲已刪除但未被物理刪除(請理解我無法詳細瞭解爲什麼,有良好的業務原因可以這麼做)。由於我們有多個客戶端通過SOAP和REST API訪問我們的實例,因此我想實現一個解決方案,使其覆蓋自定義對象的標準刪除功能,只檢查自定義字段is_deleted,而不是刪除記錄。

這可能嗎?

乾杯,

回答

0

我想你不能只是把一間刪除觸發器的對象?

如果可以,那麼只需添加觸發器代碼來更新字段,然後將錯誤附加到正在刪除的記錄(所以刪除不通過)。官方文檔中有很多關於如何做到這一點的示例。

記住要保持一切bulkified(過程中的所有記錄在一次被刪除,從列表中)...

在一個側面說明,在Salesforce的刪除記錄保存在回收站的組織爲刪除後15天。因此,您也可以使用SELECT ... ALL ROWS查詢表單從對象中選擇它們。

+0

我會嘗試on - delete觸發器並回報。 – Dan

0

我不認爲你真的可以覆蓋刪除操作。您可以覆蓋按鈕(使用Visualforce頁面),但如果從API觸發刪除,則無法以任何方式幫助您。

我懷疑你想假裝API(SOAP,REST等)用戶記錄被刪除,而實際上保留在某個地方?聞起來有些陰暗的商業慣例是誠實的,但無論如何,讓我們假設它確實是合法的......當然,你不能在操作中突然拋出錯誤,因爲最終用戶會注意到。

我想我會用一個隱藏的1對1匹配的「陰影」對象並將每個動作同步到它。您需要一個觸發器來插入/更新/刪除/取消刪除您的聯結,以複製該操作(區別在於此自定義「軟刪除」標誌)。這有很多問題,如存儲使用情況,但很好。

想到的一件事是(如果我記得沒錯),聯接對象上的觸發器不會觸發,如果您刪除其中一個主控。所以如果它是一個真正的聯結對象(你寫的「行爲像」),你也必須處理這個場景,並把邏輯放入主對象的觸發器中。

如果它不是一個真正的結對象(即,它具有OwnerId現場可見)和您的共享規則允許 - 也許你可以記錄的所有權轉讓給一些特殊的用戶/隊列之外的角色層次,使其成爲隱形...但我懷疑它會起作用,最後刪除應該會成功完成,對嗎?也許與一些@future相結合,立即取消刪除它們&轉移...仍然 - 凌亂!

+0

我不想隱藏記錄。它是關於當刪除操作被觸發時的記錄設置刪除標誌並防止記錄被刪除。提取數據,人們仍然需要考慮刪除的標誌,但這是微不足道的。 – Dan

+1

您必須拋出異常或使用'addError()'方法來阻止刪除操作。這將停止我認爲的交易(我懷疑你可以在同一個觸發器中更新它們)。請仔細閱讀http://www.salesforce.com/us/developer/docs/apexcode/Content/apex_triggers_context_variables_considerations.htm。我認爲你必須寫一個'before delete'來設置你的標誌,允許操作進行(沒有addError等)並且包含@future以立即取消刪除它們... – eyescream