単純な変数と数式の使用
学習の目的
グローバル変数と Visualforce 式の概要
Visualforce 式はリテラル値、変数、サブ式、演算子などで構成され、1 つの値に解決されます。メソッドコールは式に使用できません。
Visualforce の式の構文は、{! expression }
です。
ページが表示されるとき、または値が使用されるときに、{! }
区切り文字内にあるすべてが評価され、動的に置換されます。空白文字は無視されます。
評価の結果、プリミティブ (整数、文字列など)、Boolean、sObject、コントローラメソッド (アクションメソッドなど)、その他の有益な値が得られます。
グローバル変数
たとえば、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>
{! ...}
は、中括弧内の内側がすべて動的な要素であり、式言語で記述されていることを示します。ユーザがページを表示するときに値が計算され、実行時刻が代入されます。
{! ...}
内のスペースも無視されます。したがって、次の式はすべて同じ値を出力します。{! $User.FirstName}
{!$USER.FIRSTNAME}
{! $user.firstname }
数式
たとえば、&
は文字列を連結する数式言語の演算子です。
- [UserStatus] ページで、名と姓の個別の式を次の数式で置き換えます。
{! $User.FirstName & ' ' & $User.LastName }
この式は、ログインユーザの名と姓をスペース区切りで結合します。出力は変更前と同じです。 - ページマークアップのユーザ情報の下に、次のマークアップを追加します。
<p> Today's Date is {! TODAY() } </p> <p> Next week it will be {! TODAY() + 7 } </p>
TODAY()
関数を使用する数式には、より複雑なものがあります。関数とは組み込み計算のことで、名前の後に括弧が付いています。1 つ目の式では単に現在日付を計算し、2 つ目の式では加算演算子を使用して日付に 7 日を追加します。ページ上の表示は次のようになります。Today's Date is Thu Sep 18 00:00:00 GMT 2014 Next week it will be Thu Sep 25 00:00:00 GMT 2014
- ページマークアップの日付式の下に、次のマークアップを追加します。
<p>The year today is {! YEAR(TODAY()) }</p> <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>
TODAY()
などの一部の関数には空の括弧が使用されますが、関数の計算に使用する値であるパラメータを取る関数もあります。この例でのYEAR()
は、パラメータを取らないTODAY()
関数で提供される日付パラメータを取っています。MAX()
関数は、任意の数のパラメータを取ることができます。CONTAINS()
は特に興味深い関数です。この関数は Boolean 値 (true または false) を返します。2 つのテキストの引数を比較し、最初の引数に 2 番目の引数が含まれる場合には true を返します。含まれない場合は false を返します。上記の例では、force.com
の文字列がsalesforce.com
に含まれているため、true
が返されています。
条件式
例としては、請求書の項目がないときに、空の明細行を表示する代わりに「なし」と表示したい場合や、支払期限が過ぎたときに、期日を示す代わりに「遅延」と表示したい場合などが考えられます。
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 内で使用できるグローバル変数は、20 個前後あります。グローバル変数は、ここで見てきたように現在のログインユーザに関する情報の取得に役立つだけでなく、組織の詳細 ($Organization
)、設定 ($Setup
)、カスタムオブジェクトの詳細 ($ObjectType
)、それらのオブジェクトで使用可能なアクション ($Action
) などの取得にも役立ちます。詳細は、「グローバル変数」を参照してください。
同様に、Visualforce 内で使用できる関数も数 10 個あります。数式項目で使用可能な関数のリストと似ていますが、完全に同じではありません。重複する関数の動作は同じであるため、Visualforce 式を記述するときに、数式項目に関する知識の多くを再利用できます。完全なリストについては、「関数」を参照してください。
式には多くの用途があり、通常は Visualforce コンポーネントで属性の値を提供するために使用されます。