Skip to main content

単純な変数と数式の使用

学習の目的

この単元を完了すると、次のことができるようになります。

  • Visualforce 式とは何か、式はどこで使用されるかを説明する。
  • Visualforce 式で使用できるグローバル変数を 3 つ以上列挙する。
  • Visualforce 式を Visualforce ページに追加する。
  • Visualforce 式で関数を使用する。
メモ

メモ

このバッジのハンズオン Challenge は日本語、スペイン語 (LATAM)、ポルトガル語 (ブラジル) に対応しています。Playground の言語を変更するには、こちらの指示に従ってください。日本語等、翻訳された言語と英語に差異がある可能性があります。英語以外の言語での指示に従って Challenge に合格できなかった場合は、[言語] と [地域] をそれぞれ [English]、[アメリカ合衆国] に切り替えてからもう一度お試しください。

グローバル変数と Visualforce 式の概要

Visualforce ページは、データベースまたは Web サービスから取得した、ログインするユーザーや表示するページに応じて異なるデータを表示できます。この動的データには、ページのコントローラーで利用可能なグローバル変数、計算、プロパティをマークアップで使用してアクセスします。通常、これらはまとめて Visualforce 式と呼ばれます。式は、動的出力や、値を属性に割り当ててコンポーネントに渡す場合に使用します。

Visualforce 式はリテラル値、変数、サブ式、演算子などで構成され、1 つの値に解決されます。メソッドコールは式に使用できません。

Visualforce の式の構文は、{!expression } です。

ページが表示されるとき、または値が使用されるときに、{!} 区切り文字内にあるすべてが評価され、動的に置換されます。空白文字は無視されます。

評価の結果、プリミティブ (整数、文字列など)、Boolean、sObject、コントローラーメソッド (アクションメソッドなど)、その他の有益な値が得られます。

グローバル変数

グローバル変数を使用して、Visualforce マークアップでシステム値とリソースにアクセスして表示します。

たとえば、Visualforce は、ログインしたユーザーの情報を $User というグローバル変数で提供します。$User グローバル変数の項目にアクセスするには、{!$GlobalName.fieldName } という形式の式を使用します (その他のグローバル変数でも同様)。

  1. 新しい Visualforce ページを作成するには、開発者コンソールを開き、[File (ファイル)] | [New (新規)] | [Visualforce Page (Visualforce ページ)] をクリックします。ページ名に UserStatus と入力します。
  2. エディターで、任意のマークアップを次のように置き換えます。
    <apex:page>
    <apex:pageBlock title="User Status">
    <apex:pageBlockSection columns="1">
    </apex:pageBlockSection>
    </apex:pageBlock>
    </apex:page>
    このマークアップは、いくつかの便利な情報を追加できるボックスを作成します。
  3. [Preview (プレビュー)] をクリックして、変更処理中に確認できるページのプレビューを開きます。
  4. <apex:pageBlockSection> タグの間に次のマークアップを追加します。
    {!User.FirstName }作成した [User Status (ユーザーステータス)] パネルに名が表示されます。
  5. [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 では、グローバル変数以外の要素も式言語で使用できます。また、ユーザーが値を操作するための数式もサポートされます。

たとえば、& は文字列を連結する数式言語の演算子です。

  1. [UserStatus] ページで、名と姓の個別の式を次の数式で置き換えます。
    {!User.FirstName & ' ' & $User.LastName }この式は、ログインユーザーの名と姓をスペース区切りで結合します。出力は変更前と同じです。
  2. ページマークアップのユーザー情報の下に、次のマークアップを追加します。
    <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

  3. ページマークアップの日付式の下に、次のマークアップを追加します。
    <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 が返されています。

条件式

条件式を使用して、式の値に基づいて異なる情報を表示します。

例としては、請求書の項目がないときに、空の明細行を表示する代わりに「なし」と表示したい場合や、支払期限が過ぎたときに、期日を示す代わりに「遅延」と表示したい場合などが考えられます。

Visualforce ページ上では、IF() をはじめとする条件式を使用することで、こうしたシナリオに対応できます。IF() 式は次の 3 つの引数をとります。

  • 1 つ目は、Boolean 値 (true または false) です。たとえば、以前に使用した CONTAINS() 関数などがあります。
  • 2 つ目は、最初のパラメーターが true のときに返される値です。
  • 3 つ目は、最初のパラメーターが false のときに返される値です。
  1. [UserStatus] ページで、その他の式の下に次のコードを追加します。
    <p>{! IF( CONTAINS('salesforce.com','force.com'),
    'Yep', 'Nope') }</p>
    <p>{! IF( DAY(TODAY()) < 15,
    'Before the 15th', 'The 15th or after') }</p>
    変更内容を保存して結果を確認する前に、結果を予想してみましょう。ページ上の表示は次のようになります。Visualforce 式のプレイグラウンド1 つ目の式は、以前と同じ CONTAINS() 関数計算を使用しています。ここでの違いは、IF() 関数で CONTAINS() の Boolean 結果をテキストに変換し、ユーザーにとってより役立つ表示にしています。同様に、2 つ目の式は、月の前半と後半で異なるメッセージを表示します。
  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>
    条件式を使用して、さらに便利にしましょう。
  3. $User.Username 式を含む行を、次のコードで置き換えます。
    ({!IF($User.isActive,User.Username, 'inactive') })isActive は、$User グローバル変数で使用できる別の項目です。この Boolean 項目は、ユーザーが有効な場合は true、ユーザーが無効になっている場合は false です。これで、[User Status (ユーザーステータス)] パネルに、ユーザーが有効な場合はユーザー名、無効な場合は [inactive (無効)] と表示されます。

もうひとこと...

Visualforce 式で使用できるグローバル変数と関数は多数あります。

Visualforce 内で使用できるグローバル変数は、20 個前後あります。グローバル変数は、ここで見てきたように現在のログインユーザーに関する情報の取得に役立つだけでなく、組織の詳細 ($Organization)、設定 ($Setup)、カスタムオブジェクトの詳細 ($ObjectType)、それらのオブジェクトで使用可能なアクション ($Action) などの取得にも役立ちます。詳細は、「グローバル変数」を参照してください。

同様に、Visualforce 内で使用できる関数も数 10 個あります。数式項目で使用可能な関数のリストと似ていますが、完全に同じではありません。重複する関数の動作は同じであるため、Visualforce 式を記述するときに、数式項目に関する知識の多くを再利用できます。完全なリストについては、「関数」を参照してください。

式には多くの用途があり、通常は Visualforce コンポーネントで属性の値を提供するために使用されます。

リソース

無料で学習を続けましょう!
続けるにはアカウントにサインアップしてください。
サインアップすると次のような機能が利用できるようになります。
  • 各自のキャリア目標に合わせてパーソナライズされたおすすめが表示される
  • ハンズオン Challenge やテストでスキルを練習できる
  • 進捗状況を追跡して上司と共有できる
  • メンターやキャリアチャンスと繋がることができる