為什麼 Validation 無效? Validation of Opportunity Product (OpportunityLineItem) doesn't work.

症狀

明明設了 validation 規定某些特定 product 不可以打折 ( UnitPrice 不能低於 ListPrice)

Opportunity Product Validation Rule:
AND(
  CONTAINS( Product2.Name , "Usage_"),
  UnitPrice < ListPrice
)


但 user 仍然可以成功地在 create new opportunity product 的時候輸入較低的 UnitPrice。
不過如果嘗試再回頭編輯這筆 opportunity product,validation rule 又會作動如常。
除非 user 把 UnitPrice 調整到不低於 ListPrice 的數字,不然 validation rule 就會讓他無法存檔。


原因

概念上來說,這是因為在 OpportunityLineItem record 被創建的當下,OpportunityLineItem 上 Product2 這個欄位還沒有建立起這個關聯。
所以在 validation rule 裡面任何參照到 Product2 的條件都是一場空。


解方

不要參照 Product2,改成參照 PricebookEntry.Product2。
不要參照 ListPrice,改成參照 PricebookEntry.UnitPrice。

將 validation rule 改寫如下,即可:
AND(
  CONTAINS( PricebookEntry.Product2.Name , "Usage_"),
  UnitPrice < PricebookEntry.UnitPrice 
)


參考資料

https://salesforce.stackexchange.com/questions/254096/validation-rule-that-limits-what-products-to-add-to-opportunity-by-opprecordid-n

留言

這個網誌中的熱門文章

Salesforce證照考試心得 (Administrator and Advanced Administrator)

ISC2 CC (Certified in Cybersecurity Certification) 考試心得