2012-08-05 168 views
0

假設我有兩個對象
1.Account-標準對象[它有一個字段名STATUS_ Ç這是一個具有值選取列表INPROGRESS和閉合]
2.Client
_c - 定製對象[它也具有相同的字段名稱Status_c,它是具有正在進行中並且正在進行中的值的選項列表]
Salesforce中:觸發相關的列表上

並且Client_c已經查找到帳戶名稱,這意味着帳戶具有客戶端對象的相關列表。

我的問題是:
我想寫一個觸發器在那裏,如果我把帳戶狀態爲「關閉」我不能把客戶端的狀態爲「關閉」,就應該客戶對象上拋出一個錯誤消息,或者如果我把客戶狀態關閉我不能把帳戶狀態關閉,反之亦然。

任何人都可以幫我寫一個觸發器嗎?

回答

1

從概念上講,我認爲你要做的是在這兩個對象上設置驗證規則。在Client_您的驗證規則C應該很簡單:TEXT(狀態 _c)== '封閉' & & TEXT(Account_ c.Status _c)== '封閉'

更有趣的部分是如何當您將帳戶移至關閉時,您可以確保沒有任何相關項目已關閉。我傾向於在帳戶上創建一個字段,用於跟蹤相關項目的狀態(複選框),基本上告訴我是否有效改變我的狀態。在這種情況下,驗證規則變得非常簡單。爲了設置該布爾值,我最終使用Client_C上的觸發器,基本上只是在批次中修改客戶端時考慮所有帳戶(同時考慮插入,插入和刪除):

SELECT Account__c.Id FROM Client__c WHERE Id =: Trigger.new OR Id =: Trigger.old 

然後創建一個所有帳戶ID(在本例中爲已命名帳戶)的集合,然後運行查詢以檢索與這些Ids相關的所有客戶端(在單個查詢中以確保您不會遇到SOQL限制)。

SELECT Account__c.Id, Status__c FROM Client__c WHERE Account__c.Id =: accounts 

從這個結果,你會遍歷所有條目,他們折騰成帳戶ID其中值是客戶端列表鍵入一個地圖。完成後,運行一個查詢,根據之前的「帳戶」列表(這只是字符串列表,而不是實際帳戶)獲取所有帳戶,隨後遍歷與該帳戶關聯的所有客戶端,並且如果客戶端被標記爲已關閉,您將相應地更新該帳戶的元數據。如果沒有客戶關閉,賬戶將被標記爲這樣。完成後,運行更新語句以更新您已修改的帳戶列表。

+0

感謝您的回覆......我可以使用總結和驗證規則來滿足上述要求,但我想在這種情況下使用觸發器。 – 2012-08-08 11:31:59

+0

如果您純粹需要觸發器中的邏輯,則可以通過編程將錯誤添加到字段http://www.salesforce.com/us/developer/docs/apexcode/Content/apex_triggers_context_variables.htm – 2012-08-09 01:20:48