単純な変数と数式の使用
学習の目的
この単元を完了すると、次のことができるようになります。
- Visualforce 式とは何か、式はどこで使用されるかを説明する。
- Visualforce 式で使用できるグローバル変数を 3 つ以上列挙する。
- Visualforce 式を Visualforce ページに追加する。
- Visualforce 式で関数を使用する。
グローバル変数と Visualforce 式の概要
Visualforce ページは、データベースまたは Web サービスから取得した、ログインするユーザーや表示するページに応じて異なるデータを表示できます。この動的データには、ページのコントローラーで利用可能なグローバル変数、計算、プロパティをマークアップで使用してアクセスします。通常、これらはまとめて Visualforce 式と呼ばれます。式は、動的出力や、値を属性に割り当ててコンポーネントに渡す場合に使用します。
Visualforce 式はリテラル値、変数、サブ式、演算子などで構成され、1 つの値に解決されます。メソッドコールは式に使用できません。
Visualforce の式の構文は、{!expression }
です。
ページが表示されるとき、または値が使用されるときに、{!}
区切り文字内にあるすべてが評価され、動的に置換されます。空白文字は無視されます。
評価の結果、プリミティブ (整数、文字列など)、Boolean、sObject、コントローラーメソッド (アクションメソッドなど)、その他の有益な値が得られます。
グローバル変数
グローバル変数を使用して、Visualforce マークアップでシステム値とリソースにアクセスして表示します。
たとえば、Visualforce は、ログインしたユーザーの情報を $User
というグローバル変数で提供します。$User
グローバル変数の項目にアクセスするには、{!$GlobalName.fieldName }
という形式の式を使用します (その他のグローバル変数でも同様)。
- 新しい Visualforce ページを作成するには、開発者コンソールを開き、[File (ファイル)] | [New (新規)] | [Visualforce Page (Visualforce ページ)] をクリックします。ページ名に
UserStatus
と入力します。
- エディターで、任意のマークアップを次のように置き換えます。このマークアップは、いくつかの便利な情報を追加できるボックスを作成します。
<apex:page> <apex:pageBlock title="User Status"> <apex:pageBlockSection columns="1"> </apex:pageBlockSection> </apex:pageBlock> </apex:page>
-
[Preview (プレビュー)] をクリックして、変更処理中に確認できるページのプレビューを開きます。
-
<apex:pageBlockSection>
タグの間に次のマークアップを追加します。{!$User.FirstName }
作成した [User Status (ユーザーステータス)] パネルに名が表示されます。
- [User Status (ユーザーステータス)] パネルのマークアップに
$User
グローバル変数を使用する式をさらに 2 つ追加し、ページを次のようにします。<apex:page> <apex:pageBlock title="User Status"> <apex:pageBlockSection columns="1"> {!$User.FirstName } {!$User.LastName } ({! $User.Username }) </apex:pageBlockSection> </apex:pageBlock> </apex:page>
{!...}
は、中括弧内の内側がすべて動的な要素であり、式言語で記述されていることを示します。ユーザーがページを表示するときに値が計算され、実行時刻が代入されます。
Visualforce 式では大文字小文字は区別されず、{!...}
内のスペースも無視されます。したがって、次の式はすべて同じ値を出力します。
{!$User.FirstName}
{!$USER.FIRSTNAME}
{!$user.firstname }
数式
Visualforce では、グローバル変数以外の要素も式言語で使用できます。また、ユーザーが値を操作するための数式もサポートされます。
たとえば、&
は文字列を連結する数式言語の演算子です。
- [UserStatus] ページで、名と姓の個別の式を次の数式で置き換えます。この式は、ログインユーザーの名と姓をスペース区切りで結合します。出力は変更前と同じです。
{!$User.FirstName & ' ' & $User.LastName}
- ページマークアップのユーザー情報の下に、次のマークアップを追加します。
<p> Next week it will be {! TODAY() + 7 } </p> <p> Today's Date is {! TODAY() } </p>
TODAY()
関数を使用する数式には、より複雑なものがあります。関数とは組み込み計算のことで、名前の後に括弧が付いています。1 つ目の式では単に現在日付を計算し、2 つ目の式では加算演算子を使用して日付に 7 日を追加します。ページ上の表示は次のようになります。
Next week it will be Thu Sep 25 00:00:00 GMT 2014. Today's Date is Thu Sep 18 00:00:00 GMT 2014
- ページマークアップの日付式の下に、次のマークアップを追加します。
<p>Tomorrow will be day number {! DAY(TODAY() + 1) }</p> <p>Let's find a maximum: {! MAX(1,2,3,4,5,6,5,4,3,2,1) } </p> <p>The square root of 49 is {! SQRT(49) }</p> <p>Is it true? {! CONTAINS('salesforce.com', 'force.com') }</p> <p>The year today is {! YEAR(TODAY()) }</p>
TODAY()
などの一部の関数には空の括弧が使用されますが、関数の計算に使用する値であるパラメーターを取る関数もあります。この例での YEAR()
は、パラメーターを取らない TODAY()
関数で提供される日付パラメーターを取っています。MAX()
関数は、任意の数のパラメーターを取ることができます。CONTAINS()
は特に興味深い関数です。この関数は Boolean 値 (true または false) を返します。2 つのテキストの引数を比較し、最初の引数に 2 番目の引数が含まれる場合には true を返します。含まれない場合は false を返します。上記の例では、「force.com
」という文字列が「salesforce.com
」に含まれているため、true
が返されています。
条件式
条件式を使用して、式の値に基づいて異なる情報を表示します。
例としては、請求書の項目がないときに、空の明細行を表示する代わりに「なし」と表示したい場合や、支払期限が過ぎたときに、期日を示す代わりに「遅延」と表示したい場合などが考えられます。
Visualforce ページ上では、IF()
をはじめとする条件式を使用することで、こうしたシナリオに対応できます。IF()
式は次の 3 つの引数をとります。
- 1 つ目は、Boolean 値 (true または false) です。たとえば、以前に使用した
CONTAINS()
関数などがあります。
- 2 つ目は、最初のパラメーターが true のときに返される値です。
- 3 つ目は、最初のパラメーターが false のときに返される値です。
-
[UserStatus]
ページで、その他の式の下に次のコードを追加します。<p>{! IF( CONTAINS('salesforce.com','force.com'), 'Yep', 'Nope') }</p> <p>{! IF( DAY(TODAY()) < 15, 'Before the 15th', 'The 15th or after') }</p>
変更内容を保存して結果を確認する前に、結果を予想してみましょう。ページ上の表示は次のようになります。
1 つ目の式は、以前と同じ CONTAINS()
関数計算を使用しています。ここでの違いは、IF()
関数で CONTAINS()
の Boolean 結果をテキストに変換し、ユーザーにとってより役立つ表示にしています。同様に、2 つ目の式は、月の前半と後半で異なるメッセージを表示します。
- すべてのテスト式を削除し、
$User
グローバル変数を使用する行のみを残します。つまり、このページに戻ります。<apex:page> <apex:pageBlock title="User Status"> <apex:pageBlockSection columns="1"> {!$User.FirstName & ' ' & $User.LastName } ({! $User.Username }) </apex:pageBlockSection> </apex:pageBlock> </apex:page>
- 条件式を使用して、さらに便利にしましょう。
$User.Username
式を含む行を、次のコードで置き換えます。
({! IF($User.isActive, $User.Username, 'inactive') })
isActive
は、$User
グローバル変数で使用できる別の項目です。この Boolean 項目は、ユーザーが有効な場合は true、ユーザーが無効になっている場合は false です。これで、[User Status (ユーザーステータス)] パネルに、ユーザーが有効な場合はユーザー名、無効な場合は [inactive (無効)] と表示されます。
もうひとこと...
Visualforce 式で使用できるグローバル変数と関数は多数あります。
Visualforce 内で使用できるグローバル変数は、20 個前後あります。グローバル変数は、ここで見てきたように現在のログインユーザーに関する情報の取得に役立つだけでなく、組織の詳細 ($Organization
)、設定 ($Setup
)、カスタムオブジェクトの詳細 ($ObjectType
)、それらのオブジェクトで使用可能なアクション ($Action
) などの取得にも役立ちます。詳細は、『Visualforce 開発者ガイド』の「グローバル変数」を参照してください。
同様に、Visualforce 内で使用できる関数も数 10 個あります。数式項目で使用可能な関数のリストと似ていますが、完全に同じではありません。重複する関数の動作は同じであるため、Visualforce 式を記述するときに、数式項目に関する知識の多くを再利用できます。完全なリストについては、『Visualforce 開発者ガイド』の「関数」を参照してください。
式には多くの用途があり、通常は Visualforce コンポーネントで属性の値を提供するために使用されます。
リソース
-
Salesforce ヘルプ: グローバル変数
-
Salesforce ヘルプ: 数式の要素
-
Visualforce 開発者ガイド: Global Variables (グローバル変数)
-
Visualforce 開発者ガイド: Functions (関数)
-
Visualforce 開発者ガイド: Expression Operators (式の演算子)
-
Trailhead: 数式と入力規則