見出し画像

【Salesforce】ICUロケール形式適応時の組織への影響

こんにちは!
今日は、ICUロケールについて書いていこうと思います!

2022年1月から組織のロケールがJDK形式からICUロケール形式に変更されますよね!この変更に合わせて、組織内のソースコードを見直している方もおいのではないでしょうか。

僕もその一人で、いくつかの環境で調査を行なっています。
調査を行う中でまず躓いたのが、リリース更新のテスト実行を有効化したけど、これ反映されてるの!?表示形式変わってなくない!?ということ・・・

結論から言いますと、ICUロケール形式にしても画面に表示される形式はほとんど変わりません!笑
その辺も踏まえて備忘録として綴っていきます!

JDKとICU

まず、これまで採用されていたJDK形式について簡単にご説明します!

JDK(Java Development Kit)はOracleが提供するJavaの開発キットおよび開発環境のことです。
SalesforceではこのJDKの形式に則り、ロケール(組織またはユーザの所在地や言語)に合わせて数値、名前、住所、日付/時間、通貨などを表示していました。

今後はJDKからICU(International Components for Unicode)形式に置き換わります!
なぜ変更になるのかというと、最新の国際標準に対応に対応させるためだそうです。ICUロケールに変更することでJDK形式での懸念事項が解消されるとのこと!
詳しくはHelpに記載があります → 新しいロケール形式に切り替える理由は?

ロケール形式の変更による影響

ロケール形式を変更することによって、これまでの表示形式が変更になることがあります。

所在地や言語を「日本語(日本)ja-jp」にされている方は以下の点が変更になります!

【形式種別:Date Time: Long】
JDK → 2008/01/28 16:30:05 PST
ICU  → 2008/01/28 16:30:05 GMT-8

【形式種別:Date: Long】
JDK → 2008/01/28
ICU  → 2008年1月28日

【形式種別:Accounting Currency: Negative】
JDK → -¥1,234,567.57
ICU  → (¥1,234,567.57)

DateTime(日付時間)の表示がPST(米国太平洋標準時)からGMT(グリニッジ標準時)へ変更になったり、Date(日付)が「/」ではなく「年月日」で表示されるなどします。

ここで気になるのは、この変更は画面表示上の問題なのか、システム側にも影響があるのか?ですよね。
次のセクションでICUロケールの適応方法を踏まえてご説明します!

組織への適応方法と適応時のUI表示

ICUロケール形式がどのように影響してくるか確認するために、まずは設定 > リリース更新 > ICU ロケール形式を有効化の使用開始ボタンをクリックし、テスト実行を有効化をクリックします。

スクリーンショット 2021-10-09 11.21.45

画像のように、「テスト実行を無効化」と表示されていればICUロケール形式が適応されています。

それでは影響を確認していきましょう!

冒頭にもお話ししましたが、ほとんど変わりません!!!!
日付項目も2021/10/09のままだし、通貨項目のマイナス値も-¥1000のまま!

じゃあ適応されていることをどのように確認すればいいのか・・・
それはChatterを見るとこで確認できます。
まずはJDK形式でのChatterの投稿が以下の通りです。

スクリーンショット 2021-10-09 11.21.12

投稿日が 「2021/09/13(9:25)」となっています。
続いて下記がICUロケールのテスト実行を有効化した場合です!

スクリーンショット 2021-10-09 11.44.11

投稿日が 「2021年9月13日(9:25)」と「/」が「年月日」に変わっています!

その他は画面上での確認できる変更は僕の知る限りではないかと思います。(ロケールが日本語(日本)ja-jpの場合)

通貨項目に関しては、組織のマルチ通貨が有効になっている場合は表示に変化があるよなのですが、環境がどれも有効化されていないので確認できず。。。知っている人いたら教えてください!

画面上ではJDKでもICUでもほとんど変化がないことがわかったので、システム側での影響はないのか、簡単の確認してみたいと思います!

匿名デバッグを使用して影響確認

まず、リリース更新のテスト実行を有効化していない状態で匿名デバッグを実行します。

検証するのは新しいロケール形式の採用方法に記載されているメソッドのDate.format()、Date.parse()、DateTime.format()、DateTime.parse()、DateTime.formatLong() です!

String date1 = Date.today().format();
Date date2 = Date.parse('2021/10/10');

String dateTime1 = DateTime.now().format();
DateTime dateTime2 = DateTime.parse('2021/10/10 12:00');
String dateTime3 = DateTime.now().formatLong();

System.debug('date1 = ' + date1);
System.debug('date2 = ' + date2);
System.debug('dateTime1 = ' + dateTime1);
System.debug('dateTime2 = ' + dateTime2);
System.debug('dateTime3 = ' + dateTime3);

スクリーンショット 2021-10-10 14.40.31

結果は上記の通り。
次にリリース更新のテスト実行を有効化した状態で同じように検証。
ソースコードは一緒とします。

スクリーンショット 2021-10-10 14.43.53

結果、表示されるフォーマットは全く一緒です!
ということで、ICUロケール形式を適応させる前後で、データの表示形式は変更がないことがわかりました。


ではまた次の記事でお会いしましょう😎

>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>

ここまで見てくださりありがとうございます。

♡をくださると、次の記事の励みになります!!

こんな内容で困っている、こんなこと知りたいなどご意見があれば
是非是非コメントお待ちしています☆

<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<

この記事が気に入ったらサポートをしてみませんか?