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

本篇參考: 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。有用到的或者即將用到的朋友注意這點就好。篇中有錯誤的地方歡迎指出,有不懂的歡迎留言。

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章