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

標準コントローラの使用

学習の目的

この単元を完了すると、次のことができるようになります。
  • Visualforce 標準コントローラとは何か、およびその主要な属性について説明する。
  • 標準コントローラを Visualforce ページに追加する。
  • ページの標準コントローラで取得されたレコードのデータを表示する。
  • ドット表記を使用して関連レコードの項目にアクセスする式を記述する。

Visualforce 標準コントローラの概要

Visualforce は従来の MVC (Model–View–Controller: モデル–ビュー–コントローラ) を使用します。標準アクションとデータアクセスを処理する高度な組み込みコントローラが含まれ、Lightning Platform データベースとの簡単かつ緊密なインテグレーションを提供します。これらの組み込みコントローラは、一般的に標準コントローラと呼ばれ、究極の標準コントローラとみなされることもあります。

MVC 設計パターンでは、表示やスタイルを、基盤となるデータベースとロジックから簡単に分離することができます。MVC では、ビュー (Visualforce ページ) はコントローラと連動し、コントローラによってページに機能が提供されます。たとえば、コントローラにはボタンをクリックしたときに実行されるロジックが実装されています。また、多くの場合、コントローラはビューに表示するデータを利用可能にしたり、変更内容をデータベースに戻したりするモデル (データベース) とのやり取りも行います。

大部分の標準オブジェクトとすべてのカスタムオブジェクトには、オブジェクトに関連付けられたデータを操作するための標準コントローラが用意されており、コントローラのコードを自分で記述しなくても済むようになっています。必要に応じて、標準コントローラを拡張して新しい機能を追加したり、カスタムコントローラをゼロから作成したりすることも可能です。ここでは、標準コントローラについて学習します。

レコード ID を検索して要求 URL に追加する

レコードのレコード ID を要求 URL のパラメータとして追加することで、標準コントローラに渡します。

標準コントローラを使用して特定のレコードを参照する場合、コントローラが対象レコードのレコード識別子または ID を認識する必要があります。コントローラは ID を使用してデータを取得し、レコードのデータが変更されたときにデータベースに戻して保存します。

Visualforce ページを組織の他のページに連携させる場合、レコードの ID が自動的に渡されるようにすることで、Visualforce ページで ID を使用してそのレコードのデータを検索し、表示できます。ただし、開発中のページは単体で実行されているため、データベースのレコードのデータをページに表示するには、レコード ID を手動で渡す必要があります。要求 URL の GET パラメータで ID を追加すると、この処理を最も簡単に行うことができます。

  1. 新しい Visualforce ページを作成するには、開発者コンソールを開き、[File (ファイル)] | [New (新規)] | [Visualforce Page (Visualforce ページ)] をクリックします。ページ名に「AccountSummary」と入力します。
  2. エディタで、任意のマークアップを次のように置き換えます。
    <apex:page>
        <apex:pageBlock title="Account Summary">
            <apex:pageBlockSection>
            </apex:pageBlockSection>
        </apex:pageBlock>
    </apex:page>
    このマークアップは、いくつかの便利な情報を追加できるボックスを作成します。
  3. [Preview (プレビュー)] をクリックして、変更処理中に確認できるページのプレビューを開きます。プレビューウィンドウに URL 項目が表示されることを確認してください。数ステップ後にこのウィンドウに戻ります。
  4. 別のブラウザウィンドウで組織のホームページに移動し、[取引先] タブを選択します。[取引先] タブが表示されない場合は、右上隅のアプリケーションメニューから [セールス] を選択して、セールスアプリケーションに切り替えます。
  5. ビューメニューに [すべての取引先] が表示されていることを確認します。
  6. [すべての取引先] ページで、取引先名をクリックします。
  7. 取引先詳細ページの読み込みが完了したら、ページの URL を確認します。URL は https://SalesforceInstance/lightning/r/Account/001D000000JRBes/view のようになっています。レコードの識別子 (ID) は一連の文字と数字です。この例では、001D000000JRBes です (これは組織によって異なります)。この ID は、組織内のすべてのオブジェクト種別のすべてのレコードで一意です。
  8. レコード ID を選択してクリップボードにコピーします。取引先詳細ページから移動する前に、ページ全体と表示されている情報を確認します。取引先詳細ページ これはレコード ID を取得するためだけの迂回ではありません。ここでの処理の完了時には、自分自身で Visualforce コードを使用して、同じ情報を表示するページを作成する方法を把握できるようになります。
  9. 開発者コンソールから開いたプレビューページに切り替えます。ブラウザウィンドウの URL 項目をクリックし、URL の末尾に「&id=」と入力してから、直前にコピーしたレコード ID を貼り付けます。URL は、https://SalesforceInstance/apex/AccountSummary?core.apexpages.request.devconsole=1&id=001D000000JRBes のようになります。
  10. Enter キーを押して、新しい URL でページを読み込みます。

このレコード ID で読み込まれたプレビューページは変わっていないように見えますが、ID の追加によって、そのレコードが読み込まれてページで使用可能になるため、標準コントローラを利用できるようになっています。

Lightning Experience のコンテキストでページを表示するには、取引先詳細ページが表示されるメインのブラウザウィンドウに戻ります。取引先の詳細ページから、ブラウザの JavaScript コンソールを開いて次のコードを入力します。pageName をページ名に置き換えることを忘れないでください。
$A.get("e.force:navigateToURL").setParams(
    {"url": "/apex/pageName"}).fire();
同様に、JavaScript で URL の末尾にレコード ID パラメータを追加して、レコード ID でページをプレビューすることもできます。
$A.get("e.force:navigateToURL").setParams(
    {"url": "/apex/pageName?&id=00141000004jkU0AAI"}).fire();

単一レコードのデータの表示

取引先の標準コントローラをページに追加し、取引先項目を参照してレコードのデータを表示します。

前のセクションで読み込んだページ URL から次の手順に従って、取引先の概要を表示するページを作成します。

  1. ページマークアップの先頭で、<apex:page> タグ内に次の属性を追加します。
    standardController="Account"
    ここでページを保存すると、以前と同様のプレビューページが再読み込みされますが、ここでは取引先の標準コントローラが有効になっています。ページの読み込み時に、標準コントローラは URL のパラメータを解析して id パラメータを検索し、その値でレコードを取得してページで使用可能にします。ここではまだ表示されていませんが、すでに装備されています。
  2. ページのボディで、次のマークアップを追加します。
    Name: {! Account.name }
    すごいでしょう? これでレコードが取得されました。URL に追加したレコード ID の取引先の名前が表示されます。
  3. 取引先名が含まれるこの 1 行を、次のマークアップで置き換えます。
    Name: {! Account.Name } <br/>
    Phone: {! Account.Phone } <br/>
    Industry: {! Account.Industry } <br/>
    Revenue: {! Account.AnnualRevenue } <br/>
    完全なコードは次のようになります。
    <apex:page standardController="Account">
        <apex:pageBlock title="Account Summary">
            <apex:pageBlockSection>
                Name: {! Account.Name } <br/>
                Phone: {! Account.Phone } <br/>
                Industry: {! Account.Industry } <br/>
                Revenue: {! Account.AnnualRevenue } <br/>
            </apex:pageBlockSection>
        </apex:pageBlock>
    </apex:page>
    これで、1 つの取引先の概要が表示されます。1 つの取引先の概要ページ
ここでは、標準コントローラによって多くの処理が行われています。
  1. ページが読み込まれて <apex:page> コンポーネントが有効になったときに、取引先オブジェクトの標準コントローラが有効化されます。
  2. 標準コントローラによって URL 内の ID パラメータが表示され、該当する取引先レコードを検索して取得します。
  3. 標準コントローラは、取得したレコードを変数に代入してページで使用可能にします。変数には、標準コントローラの sObject (Account) と同じ名前が付きます。これはオブジェクト変数で、Account sObject で使用可能なすべての項目が含まれます。
  4. 4 つの Visualforce 式すべてが Account 変数を参照します。ドット表記を使用して、Account 変数内の個々の項目にアクセスします。したがって、{! Account.Name } は取引先の名前を取得し、以降も同様に処理されます。

ただし、収益の数値の書式は不適切です。科学的記数法で表示されています。代わりに通貨で表示するにはどうすればよいでしょうか。

数値が科学的記数法の「未加工」値で表示されている理由は、式によって数値が直接出力されているためです。ページには未加工値がそのまま表示されています。値の書式設定をコントロールするには、コンポーネントを使用し、コンポーネントに値を渡して処理する必要があります。コンポーネントが未加工値を取得して適切な書式に変更し、結果をページに出力します。この方法については、別の場所で説明します。ここでは、レコードデータへのアクセスのみが学習対象です。

もうひとこと...

標準コントローラは非常に強力です。ここで学習した内容はほんの一部にすぎません。別の場所でその他多くを学びことになりますが、いくつかの注目点を次に示します。

ここで説明されている簡単なデータアクセスに加えて、標準コントローラでは、ボタンやリンクなどの標準ユーザインターフェース要素を使用してページに追加できる、作成、編集、保存、削除などの一連の標準アクションも使用できます。Visualforce 入力フォームや、データベースへの変更の保存について学習するときに、これらの標準アクションの詳細を確認できます。

オブジェクトのページレイアウト内に埋め込む Visualforce ページは、オブジェクト固有のカスタムアクションとして使用するか、関連オブジェクトの標準コントロールの使用が必要な Salesforce アプリケーションのモバイルカードとして使用します。

取引先オブジェクトなどの標準オブジェクトではなく、独自に作成したカスタムオブジェクトの項目を参照する場合は、上記とは異なる手順を実行する必要があります。[設定] から [クイック検索] ボックスに「オブジェクトマネージャ」と入力し、[オブジェクトマネージャ] | <カスタムオブジェクト> | [項目とリレーション] を選択します。項目を見つけて選択します。カスタムオブジェクトの場合、Visualforce ページでの設定で使用する項目の名前は、[API 参照名] 項目に表示されます。たとえば、Foo という項目の API 参照名が Foo__c である場合、コード内で {! myobject__c.foo__c} のように指定を行えば、項目を参照できます。

標準コントローラは強力ですが、別のコントローラが必要になる場合もあります。Visualforce はその場合にも問題なく対応できます。標準コントローラはいつでも置き換えや補強が可能で、Apex コードを使用して、独自のコントローラや組み込みコントローラの拡張機能を作成できます。