Skip to main content

単純な変数と数式の使用

学習の目的

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

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

メモ

日本語で受講されている方へChallenge は日本語の Trailhead Playground で開始し、日本との値をコピーして貼り付けます。日本語の組織で Challenge が不合格だった場合は、(1) この手順に従って [Locale (地域)] を [United States (米国)] に切り替え、(2) [Language (言語)] を [English (英語)] に切り替えてから、(3) [Check Challenge (Challenge を確認)] ボタンをクリックしてみることをお勧めします。

翻訳版 Trailhead を活用する方法の詳細は、自分の言語の Trailhead バッジを参照してください。

グローバル変数と 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}
  1. ページマークアップのユーザー情報の下に、次のマークアップを追加します。
<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
  1. ページマークアップの日付式の下に、次のマークアップを追加します。
<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 のときに返される値です。
  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 つ目の式は、月の前半と後半で異なるメッセージを表示します。

  1. すべてのテスト式を削除し、$User グローバル変数を使用する行のみを残します。つまり、このページに戻ります。
    <apex:page>
        <apex:pageBlock title="User Status">
            <apex:pageBlockSection columns="1">
                {!$User.FirstName & ' ' & $User.LastName }
               ({! $User.Username })
            </apex:pageBlockSection>
        </apex:pageBlock>
    </apex:page>
  1. 条件式を使用して、さらに便利にしましょう。$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 ヘルプで Trailhead のフィードバックを共有してください。

Trailhead についての感想をお聞かせください。[Salesforce ヘルプ] サイトから新しいフィードバックフォームにいつでもアクセスできるようになりました。

詳細はこちら フィードバックの共有に進む