Tune in to Trailblazers Innovate for Salesforce product news,
demos, and latest roadmaps. Register here.
close
進行状況の追跡を始めよう
Trailhead のホーム
Trailhead のホーム

単純な変数と数式の使用

学習の目的

この単元を完了すると、次のことができるようになります。
  • Visualforce 式とは何か、式はどこで使用されるかを説明する。
  • Visualforce 式で使用できるグローバル変数を 3 つ以上列挙する。
  • Visualforce 式を Visualforce ページに追加する。
  • Visualforce 式で関数を使用する。

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

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

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

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

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

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

グローバル変数

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

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

  1. 新しい Visualforce ページを作成するには、開発者コンソールを開き、[File (ファイル)] | [New (新規)] | [Visualforce Page (Visualforce ページ)] をクリックします。ページ名に「User Status」と入力します。
  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 }
    作成した [ユーザステータス] パネルに名が表示されます。
  5. [ユーザステータス] パネルのマークアップに $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. [User Status] ページで、その他の式の下に次のコードを追加します。
    <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 です。これで、[ユーザステータス] パネルに、ユーザが有効な場合はユーザ名、無効な場合は [無効] と表示されます。

もうひとこと...

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

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

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

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