發表文章

目前顯示的是有「validation」標籤的文章

你在 Validation Rule 裡面對 RecordTypeId 做判斷卻常常失靈嗎?

你在 Validation Rule 裡面對 RecordTypeId 做判斷卻常常失靈嗎? 是不是明明想把某個 RecordTypeId 擋下來,但是設置的 Validation Rule 卻形同虛設呢? 這可能是因為你填入了太過正確的 RecordTypeId 了。

如何在使用者儲存紀錄時,跳出客製化的訊息? How to pop up a customized message when user saves the record?

有的時候你會需要在使用者儲存時,跳出一些提示訊息。 通常是透過 validation 的 error message 或是 Apex Trigger 的 exception ( call addError() ) 來實現。 但上述兩種方法都會把使用者儲存的動作直接擋下來。 有的時候我們希望讓使用者在看到訊息的同時,仍然能夠成功地儲存 record。 目前我想到了兩種情境會遇上這個需求: 在使用者 update an opportunity 時,若是這個客戶是個特殊地區的客戶,需要提醒 Sales 留意我們的技術支援的允許範圍。 在使用者 update an opportunity 時,若是原定 auto close 的邏輯造成 triegger fail 了。則仍然讓使用者 update this record,並於畫面上跳出一個訊息顯示「已寄發通知給相關人士處理」 這個功能技術上完全可以實現,但我找不到現成簡便的實現方式。 直到我看到了這個: https://github.com/rahulmalhotra/Platform-Event-Toast-LWC 這個 LWC 小工具完全開放原始碼,你可以自己拿回去改。如果看不懂程式碼的,也完全可以隨裝即用,非常簡單。 他的概念就是透過 Process Builder (或是 Flow) 在 record 符合條件時,就觸發 insert an event record to an event object(BTW, event object的 api name 結尾是 __e 而不是 __c ) 然後再用一個 LWC 去訂閱這個 event,就可以透過簡單的 JavaScript 觸發跳出訊息框。 這邊也有圖文並茂的說明: https://www.sfdcstop.com/2020/05/how-to-display-warnings-in-salesforce.html 招數是死的,需求是活的。 不過有了這個基本範例打底,就可以變幻出千變萬幻的招數了!

為什麼 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

用 Workflow/Flow/After Trigger 繞過 Custom Validation 的限制

根據此篇所言  Triggers and Order of Execution 11. Executes workflow rules. If there are workflow field updates: a. Updates the record again. b. Runs system validations again. Custom validation rules, flows, duplicate rules, processes, and escalation rules are not run again. c. Executes   before  update   triggers and   after  update   triggers, regardless of the record operation (insert or update), one more time (and only one more time) 意即在 Custom Validation 做完檢查後,work flow/flow/After trigger才會作動。而且 Custom Validation 不會對這些後發的動作再次檢查。 換句話說如果發現某個 field 的值突破了現行 validation rule的限制,可能是因為 在 validation rule 實施前,這個 value 就已經存在了 這個值是來自某個自動化流程,例如 workflow field update record-triggered flows that are configured to run before the record is saved. After trigger

Salesforce觸發的流程執行順序,Workflow可是在Validation的後面呢!

Salesforce觸發的流程執行順序 Validation rules Assignment rules Auto-response rules Workflow rules (with immediate actions) Escalation rules 模擬考題 利用 workflow 去 update field,如果違反了 validation rule,那這個 update 會成功嗎? 如果會失敗,會在畫面上顯示 validation rule 的 error message 嗎? 擬答 只有成功,沒有失敗。