2013-02-12 42 views
0

你好同事代碼愛好者,我試圖學習頂點代碼,並堅持一個問題。由於你們大多數人都是狂熱的代碼愛好者,對解決問題感到興奮,所以我想我可能會遇到問題。Salesforce-觸發器 - 刪除對象

我試圖創建上的對象稱爲書,做以下觸發器: 在刪除所有相關的章節也將被刪除 還有一個名爲章對象,它是有一個查詢預訂。

這是我的嘗試。這是我有史以來的第一次嘗試,所以請耐心等待。有人願意涉足這段代碼嗎?

trigger DeleteChaptersTrigger on Book__c (before delete) { 
List<Book__c> book = Trigger.old; 
List<Chapter__c> chapters = new List<Chapter__c>(); 
Set set = new Set(); 

    for (Book__c b :books){ 
    if() 
    } 
} 
+0

您是否完全控制帳戶及其設計/設置? – 2013-02-12 23:21:43

+0

@GerardSexton是的,我願意。 – pzyren 2013-02-12 23:23:12

回答

2

既然你完全控制了,我建議改變你的自定義對象相互關聯的方式。

一章沒有一本書沒有意義/價值,所以我們想要改變兩者之間的關係。

刪除章節對象的查找並將其替換爲主節點。當主記錄被刪除時,Salesforce會自動刪除與詳細相關的記錄。這是你想要的,沒有編碼。

+0

@傑拉德塞克斯頓我其實是在做一個練習。並要求查找。 – pzyren 2013-02-12 23:32:15

+0

那麼,那個信息會影響可以給出答案的類型。 – 2013-02-12 23:35:22

3

你需要寫考慮所有觸發器觸發可能在任何一個時間,所以你需要bulkify your trigger code.

Here are the variables that available on the trigger object.

你想獲得將要刪除的所有記錄ID來處理多條記錄。使用oldmap上的keyset方法獲取此信息,但不循環並創建您自己的集合。然後,您可以刪除查詢返回的記錄。

trigger DeleteChaptersTrigger on Book__c (before delete) { 
    Set<string> bookids = Trigger.oldMap.keyset(); 
    delete [SELECT Id FROM Chapter__c WHERE Book__c IN :bookids];  
} 

Apex代碼與其他語言不同,它與使用的單詞的重用相混淆,例如設置爲變量名稱。 Apex也不區分大小寫。

+0

+1,但你不需要keyset而綁定那樣,你可以綁定集合,它會被自動下載到ID集合:) – eyescream 2013-02-13 07:34:01

+0

@eyescream哦,它的自動投射?所以'刪除[SELECT ID FROM Chapter__c WHERE Book__c IN:Trigger.old];'也是有效的? – 2013-02-13 07:53:18

+0

是的:) http://www.salesforce.com/us/developer/docs/apexcode/Content/langCon_apex_SOQL_variables.htm並搜索「IN-bind」 – eyescream 2013-02-13 09:14:57