salesforce零基礎學習(一百三十四)State And Country/Territory Picklists啟用後的趣事

zero.zhang發表於2023-11-30

本篇參考: https://help.salesforce.com/s/articleView?id=sf.admin_state_country_picklists_overview.htm&type=5

背景:提起 State And Country/Territory Picklist這個功能,想必大部分人都不會陌生,其好處是可以讓使用者更好的選擇Country以及State的資訊,而不是使用者手填,這可以很大程度上保證資料質量,針對後續的Report/Dashboard的資料過濾也會更友好,並且針對整合平臺,也可以更好的溝通。 下圖中的Address是一個compound field,其中就包括了 Country 和State。

 為了方便後續內容的展開,我們先對Lead表建立一個Trigger,針對Before Update / After Update打出一下Trigger.new 以及Trigger.old日誌內容。

trigger LeadTrigger on Lead (before update, after update) {
    if(Trigger.isUpdate) {
        if(Trigger.isBefore) {
            system.debug('*** before Trigger.new : ' + JSON.serializePretty(Trigger.new));
            system.debug('*** before Trigger.old : ' + JSON.serializePretty(Trigger.old));
        } else if(Trigger.isAfter) {
            system.debug('*** after Trigger.new : ' + JSON.serializePretty(Trigger.new));
            system.debug('*** after Trigger.old : ' + JSON.serializePretty(Trigger.old));
        }
    }
}

我們在啟用功能以前,大家可以猜到如何執行,這裡不再做測試,接下來我們進行展開,這裡先啟用中國和美國以及相關的城市或者州。啟用步驟可以基於上方的參考連結,因為這個不是本篇重點,所以暫不演示,直接跳到成功畫面。透過下圖中,我們可以看到Country以及State已經配置完成。

 我們對Country以及State欄位進行修改。從 China -> Beijing修改成 United States -> New York.

我們透過Debug Log獲取主要的一些資訊,其他不重要的資訊省略。

*** before Trigger.new :

[ {
  "StateCode" : "NY",
  "State" : "Beijing",
  "Country" : "China",
  "Id" : "00Q5g00000SfwnHEAR",
  "LastName" : "test",
  "CountryCode" : "US"
} ]

*** before Trigger.old :

[ {
  "StateCode" : "11",
  "State" : "Beijing",
  "Country" : "China",
  "Id" : "00Q5g00000SfwnHEAR",
  "LastName" : "test",
  "CountryCode" : "CN"
} ]

*** after Trigger.new : 

[ {
  "StateCode" : "NY",
  "State" : "New York",
  "Country" : "United States",
  "Id" : "00Q5g00000SfwnHEAR",
  "LastName" : "test",
  "CountryCode" : "US"
} ]

*** after Trigger.old : 

[ {
  "StateCode" : "11",
  "State" : "Beijing",
  "Country" : "China",
  "Id" : "00Q5g00000SfwnHEAR",
  "LastName" : "test",
  "CountryCode" : "CN"
} ]

我們基於上方的log可以看到,儘管我們已經從 China -> Beijing 修改成了 United States -> New York,然而Before Trigger中的Trigger.new卻呈現出了很迷惑的操作,如果程式中使用 Country/ State作為判斷邏輯,當啟用這個功能會造成很大的問題,因為Country / State在before的節點,值是錯的,其他的節點是正確的。 所以實際專案中,如果啟用這個功能,一定要檢查當前系統中是否有trigger的before是否有針對這個欄位的邏輯,如果有,需要修改成 CountryCode和StateCode,否則會造成邏輯問題。

總結:翻了一下官方文件,目前沒有說過這個Consideration/Limitation,估計是一個bug。有用到的或者即將用到的朋友注意這點就好。篇中有錯誤的地方歡迎指出,有不懂的歡迎留言。