簡體   English   中英

Salesforce:在相關列表上觸發

[英]Salesforce: trigger on related list

假設我有兩個對象
1.Account-standard對象[其字段名稱為Status_ c,這是一個值正在進行且已關閉的選擇列表]
2.Client _c-自定義對象[它也具有相同的字段名稱Status__c,這是一個值正在進行且已關閉的選擇列表]

並且Client__c具有對Account name的查找,這意味着Account具有與client object相關的列表。

我的問題是:
我想編寫一個觸發器,如果​​我將帳戶狀態設置為“關閉”,則不能將客戶狀態設置為“關閉”,則應該在客戶端對象上拋出錯誤消息,或者如果我將客戶端狀態設置為關閉,則不能將帳戶狀態設置為反之亦然。

誰能幫我寫一個觸發器嗎?

從概念上講,我認為您想要做的是在這兩個對象上都設置驗證規則。 您在Client_ c上的驗證規則應該非常簡單:TEXT(Status _c)=='Closed'&& TEXT(Account_ c.Status _c)=='Closed'

更有趣的是,如何將帳戶移至已關閉狀態時確保所有相關項目都未關閉。 我傾向於在帳戶上創建一個字段,以跟蹤相關項目的狀態(復選框),該字段基本上告訴我更改狀態對我是否有效。 在這種情況下,驗證規則變得非常簡單。 為了設置該布爾值,我最終在Client__c上使用了一個Trigger,當批量修改Client時(考慮到插入,upsert和Deletes),基本上只捕獲所有Accounts:

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

然后創建所有帳戶ID的集合(在本示例中為命名帳戶),並運行查詢以檢索與這些ID相關的所有客戶端(在單個查詢中,以確保您未達到SOQL限制)。

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

從結果中,您將遍歷所有條目,並將它們扔到以客戶ID為關鍵字的Map中,其中值為客戶列表。 完成后,運行查詢以根據前面的“帳戶”列表(只是字符串列表,而不是實際帳戶)獲取所有帳戶,然后遍歷與該帳戶關聯的所有客戶端,以及是否有客戶端標記為已關閉,您將相應地更新該帳戶的元數據。 如果沒有客戶被關閉,該帳戶將被標記為此類。 完成后,運行更新語句以更新您已修改的帳戶列表。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM