Salesforce で開発をする際、ラベルを定義する際はカスタム表示ラベルを使いますよね。
カスタム表示ラベルは文言(定型文)を自由に定義でき、多言語表示もできる使い勝手の良い機能です。
お客様が後から文言を変えたい場合に、Apex等の実装から切り出しておけば、メンテナンス性も高まります。
本記事では、カスタム表示ラベルの文言を動的に変更する方法を紹介します。
知っておけばソリューションの幅が広がると思います。
カスタム表示ラベルに添字を定義
以下の画像のように、後から動的に変えたい文言の箇所を {0}, {1} といった添字で定義します。
添字は複数定義しても問題ありません。かなり汎用性が高まりますね。

カスタム表示ラベルの文字数上限は 1,000 文字なので、複雑なメッセージを定義することも可能です。
Apex で定義したカスタム表示ラベルを処理する
先にサンプルコードを載せておきます。
getDynamicLabel
メソッドは、2つの文字列パラメータstr1
とstr2
を受け取り、これらのパラメータを使用してカスタム表示ラベルの文言を生成します。
このメソッドは、システムのラベル(System.Label.SampleLabel
)から文言を取得し、String.format
メソッドを使ってstr1
とstr2
を適切な位置に埋め込んだ結果を返します。
Apex からカスタム表示ラベルを呼び出す
System.Label.{定義したカスタム表示ラベルのAPI名};
この形式で、Apex からカスタム表示ラベルの文言を取得することができます。
詳細は公式の Developer Guide をご確認ください。
String.format() で添字に任意の文字を埋め込む
String.format は Salesforce Apex の標準
こちらも、公式の Developer Guide をのリンクを併せて記載します。
(参考:公式開発ガイド)format(stringToFormat, formattingArguments)
定義の概要だけ再掲します。
以下のような引数を渡すと、第一引数に定義された添字に第二引数で渡されたリストの文字列が反映されます。
public static String format(String stringToFormat, List<Object> formattingArguments)
つまり、添字を定義しておくことで、formatメソッドを利用して文字列を動的に表示できるようになるというわけです。
動作確認
では、先程のサンプルコードを実行してみます。
開発者コンソールの Anonymous Window で簡易なコードを実行します。

String result = SampleLabelCtrl.getDynamicLabel(
'サンプル',
'Salesforce'
);
System.debug(result);
「Open Log」にチェックを入れて実行することで、実行後すぐにログを確認できます。

「Debug Only」にチェックを入れることで、定義した System.debug の値をすぐに確認できます。
引数に渡した値を反映して、カスタム表示ラベルの値が表示できました。
動的なカスタム表示ラベルを用いた運用
今回は、簡潔さに重点を置いて、単一のカスタム表示ラベルに添字を使って値を表示する方法をご紹介しました。
これにより、表示ラベルを簡単にカスタマイズすることができます。
応用例として、添字に渡すパラメータの値を別のカスタム表示ラベルにすることが考えられます。
具体的には、2つの添字を持つ文言が定義されたラベル「A」を用意し、添字に渡す値が定義されたラベル「B」と「C」を別途作成するイメージです。
この方法を利用すれば、お客様が「B」や「C」の値を任意のタイミングで変更することによって、表示される文言も同時に動的に変化させることが可能になります。これにより、柔軟な対応ができるようになります。
カスタム表示ラベルは、お客様自身で変更が容易な設定であるため、このような工夫を取り入れることで運用のしやすさが格段に向上します。
例えば、異なる状況や言語に応じて、ラベルの文言を動的に変更することができるようになり、ユーザーにとっても理解しやすいインターフェースが実現されるでしょう。
ちょっとしたアイデアを活用して、システムの運用容易性を向上させることができます。この方法を試してみて、お客様にとって最適な表示ラベルのカスタマイズを実現してください。

ソリューションを提案するシステムベンダーの腕の見せ所の一つかもしれませんね。
おわりに
システムを開発する上で、メンテナンス性や運用容易性は十分考慮して設計する必要があります。
要所の文言定義はカスタムラベルで行い、さらに、必要に応じて動的に変えられるようにすれば自由度は一気に高まりますね。
この投稿が少しでも役に立ちますように。
コメント