進行状況の追跡を始めよう
Trailhead のホーム
Trailhead のホーム

クイックアクション、カスタムボタン、Apex の使用

学習の目的

この単元を完了すると、次のことができるようになります。
  • 項目の検証、値が事前入力されたレコードの作成、Visualforce ページへのリダイレクトを行う (JavaScript を使用する代わりに) クイックアクションを作成する。
  • JavaScript ボタンと同じ移動およびリダイレクト機能を実行するカスタム URL ボタンを使用する方法について説明する。
  • JavaScript ボタンの代わりに Visualforce カスタムボタンを使用してリストの複数のレコードを操作する。

既存のボタンに代わるボタン

これまでは、JavaScript ボタンを凌ぐ優れた新機能を備えた Lightning Experience に現時点で移行すべき理由について説明してきました。ここでは、Salesforce Classic と Lightning Experience の両方で動作するソリューションを使用して、カスタム JavaScript ボタンの機能を簡単に移行する方法について説明します。

次の表は、JavaScript ボタンの使用事例と、Lightning の対応する (通常はより良い) 代替法を示しています。

JavaScript ボタンの上位の使用事例 Lightning の代替法 宣言型 (D)/プログラム型 (P)
項目の検証 (保存前) クイックアクション (デフォルト値や数式を使用) D
Apex トリガ P
値を事前入力したレコードの作成 クイックアクション (デフォルト値や数式を使用) D
レコードページへのリダイレクト カスタム URL ボタン D
Visualforce ページへのリダイレクト Visualforce クイックアクション P
Lightning アクション P
入力に基づく値の事前入力 Lightning アクション P
確認ポップアップ画面 Lightning アクション P
API コール (Salesforce およびサードパーティ) Lightning アクション P
フィードバックポップアップ画面 Lightning アクション P
サードパーティインテグレーション Lightning アクション P
リストビューレコードに対する一括アクション リストビューのカスタム Visualforce ボタン P

ご覧のとおり、Salesforce には、JavaScript カスタムボタンの機能を変換する宣言型ツールがいくつもあります。

クイックアクション

クイックアクションは、JavaScript ボタンの一般的な多数の用途に対応します。クイックアクションには、特定のオブジェクトに基づくものや、グローバルなものがあり、後者はより一般的で、任意のレコードや Chatter フィードからアクセスできます。Salesforce にはクイックアクションがあり、ほぼどんなことでも実行できます。次にいくつか例を示します。

項目値の検証

ユーザがレコードを作成または更新するときに、特定の項目への入力を必須にしたい、あるいは特定の条件に従って入力されるようにしたいと思うことがあります。

たとえば、ユーザが詳細な編集ページにアクセスしなくても ToDo を完了できるアクションを作成するとします。ただし、期日を設定しない限り ToDo を完了できないようにします。

ToDo オブジェクトに対するクイックアクションを作成すれば、この要件をすべて達成することができます。
  1. [設定] のオブジェクトマネージャで、[ToDo] をクリックして、[ボタン、リンク、およびアクション] をクリックします。
  2. [新規アクション] をクリックします。
  3. [アクション種別] で、[レコードを更新] を選択します。
  4. [表示ラベル] に、「Close Task」 (ToDo の完了)と入力します。
  5. [保存] をクリックします。

次に「Close Task」クイックアクションに表示する項目を選択します。項目プロパティを使うと、項目を簡単に必須や参照のみにすることができます。

アクションの項目プロパティ

アクションレイアウトに項目を設定したら、ToDo レコードの任意の項目に定義済み項目値を追加できます。この例では、[割り当て先] 項目を必須にしました。また、[状況] 項目に定義済み値を追加して、[完了] に変更しています。

[状況] の定義済み項目値の設定

設定し終えたアクションを、ToDo ページレイアウトに追加します。これで、ユーザが Lightning Experience と Salesforce モバイルアプリケーションの両方で ToDo レコードページからこのアクションにアクセスできます。以下は、ToDo ページの [Close Task (ToDo の完了)] アクションの例です。

ToDo ページの [Close Task (ToDo の完了)] アクション

[Close Task (ToDo の完了)] をクリックするとこのアクションが表示され、ユーザはすばやく操作を実行して保存できます。

[Close Task (ToDo の完了)] アクションのオーバーレイ

Salesforce モバイルアプリケーションでは次のようになります。

Salesforce アプリケーションの [Close Task (ToDo の完了)] アクション

項目の値の事前入力

より高度な使用事例として、ユーザがレコードを作成できるようにする一方で、1 つ以上の項目が連動項目の値に基づいて自動入力されるようにする場合が挙げられます。

たとえば、社内の営業チームの四半期売上目標が、通常は各自の顧客の前年度収益の 25% に 10% を乗じた金額であるとします。けれども、必ずしもこの簡単な数式が適用されるわけではないため、商談金額に値が事前入力され、ユーザがその値を変更できるようにしたいと考えています。ユーザが詳細な商談レコードページにアクセスしなくても、項目をすばやく効率的に変更できるアクションを作成します。

このサンプルアクションを作成するには、以前に商談クイックアクションを作成したときと同じ手順を実行します。
  1. [設定] のオブジェクトマネージャで、[取引先] をクリックして、[ボタン、リンク、およびアクション] をクリックします。
  2. [新規アクション] をクリックします。
  3. [アクション種別] で [レコードを作成] を選択します。
  4. [対象オブジェクト] で [商談] を選択します。
  5. 適切なレコードタイプを選びます。
  6. [表示ラベル] に、「New Oppty (新規商談)」と入力します。
  7. [保存] をクリックします。
アクションレイアウトの項目を選択したら、[金額] 項目の定義済み値を追加できます。この例では、次の数式を使用しました。
Account.Last_Year_Revenue_Generated__c  * 1.10  / 4

このアクションを取引先ページレイアウトに追加します。ユーザがアクションを起動すると、項目に値が事前入力された状態で表示され、ユーザがこの値を受け入れるか上書きすることができます。

[New Oppty (新規商談)] アクションのオーバーレイ

このアクションの素晴らしい点は、商談の作成時に使用するデータを商談の取引先から取得できることです。また Salesforce は、レコードのトラバーサルをサポートしているため、階層的な取引先がある場合、次のように親取引先から収益を取得できます。
Account.Parent.Last_Year_Revenue_Generated__c

数式の形式を覚えておく必要もありません。クイックアクションは宣言型で、Salesforce 数式ビルダーを使用します。

入力値に基づく Visualforce ページへのリダイレクト

Visualforce ページを作成して、ビジネスプロセスを強化できます。ユーザは、カスタムボタン、アクションの上書き、タブなどさまざまな方法でこれらの Visualforce ページに移動できます。

Visualforce ページの利点の 1 つは、標準コントローラを使用して、カスタマイズされたレコードページを作成し、事前検証、事前入力済み項目、数式などさまざまなものを追加できることです。

Salesforce Classic での JavaScript の一般的な用途は、レコードから値を読み込み、Visualforce ページにユーザをリダイレクトする URL にその値を渡すことです。また、クイックアクションを使用して、ユーザに Visualforce ページへのアクセス権を付与することもできます。Visualforce クイックアクションは、すでに説明した手順とほぼ同じプロセスで簡単に作成できます。唯一の違いは、アクション種別に [カスタム Visualforce] を選択することです。

Visualforce アクションの作成

オブジェクト固有の Visualforce クイックアクションの場合は、Visualforce ページにオブジェクトの standardController を含めて、レコードデータにアクセスできるようにし、クイックアクション選択リストに Visualforce ページが表示されるようにする必要があります。

カスタム URL ボタンおよびリンク

JavaScript ボタンの用途はおそらく、移動や、window.open(URL) コマンドと一定の変数を使用してユーザを別のページにリダイレクトすることではないかと思われます。この大半は、Lightning Experience のカスタム URL ボタンまたはリンクで代用できます。

以下は、各種の URL ボタンおよびリンクと、Lightning Experience でのそのリダイレクト動作の一覧です。

カスタム URL ボタンまたはリンク Lightning Experience の動作
外部 URL
www.google.com
新しいタブで URL を開く
相対 Salesforce URL、表示
/{!Account.Id}
既存のタブでレコードのホームページを開く
相対 Salesforce URL、編集
/{!Account.Id}/e
既存のページに [編集] オーバーレイをポップアップする
相対 Salesforce URL、リスト
/001/o
既存のタブでオブジェクトのホームページを開く
$アクション URL、表示
{!URLFOR($Action.Account.View, Account.Id)}
既存のタブでレコードのホームページを開く
$アクション URL、編集
{!URLFOR($Action.Account.Edit, Account.Id)}
既存のページに [編集] オーバーレイをポップアップする

Apex トリガ

Apex トリガは、当社のプラットフォームで長年サポートされてきたため、よくご存知のことと思います。Apex トリガは、ユーザがレコードの [保存] をクリックする前またはクリックした後に実行されるように設定できます。

保存前の検証や、項目への計算、入力が必要な場合は、Apex トリガの使用を検討します。このトリガは特に、サードパーティインテグレーションで役立ちます。Salesforce API を経由して、Salesforce Classic、Lightning Experience、Salesforce モバイルアプリケーションのすべてにルールが適用されるためです。

Apex トリガについての詳細は、『Apex 開発者ガイド』を参照するか、「Apex トリガ」のバッジを獲得してください。

カスタム Visualforce ボタン

Lightning Experience のもう 1 つの優れた機能は、リストビューで Visualforce ボタンの使用がサポートされていることです。この機能により、既存の Visualforce アクションを Lightning で使用して、リストの複数のレコードを操作できます。手順は、次のとおりです。
  1. Visualforce ページを作成します。
    以下は、複数の商談のフェーズおよび完了予定日を編集するサンプルコードです。
    <apex:page standardController="Opportunity" recordSetVar="opportunities" extensions="tenPageSizeExt">
       <apex:form>
          <apex:pageBlock title="Edit Stage and Close Date" mode="edit">
             <apex:pageMessages />
             <apex:pageBlockButtons location="top">
                <apex:commandButton value="Save" action="{!save}"/>
                <apex:commandButton value="Cancel" action="{!cancel}"/>
             </apex:pageBlockButtons>
             <apex:pageBlockTable value="{!selected}" var="opp">
                <apex:column value="{!opp.name}"/>
                <apex:column headerValue="Stage">
                   <apex:inputField value="{!opp.stageName}"/>
                </apex:column>
                <apex:column headerValue="Close Date">
                   <apex:inputField value="{!opp.closeDate}"/>
                </apex:column>
             </apex:pageBlockTable>
          </apex:pageBlock>
       </apex:form>
    </apex:page>
  2. 各自の Visualforce ページを参照するカスタムボタンを作成します。
  3. このアクションをリストビューに追加します。
    メモ

    メモ

    [最近参照したレコード] リストは、一括アクションがサポートされていません。一括アクションを使用できるのはリストビューのみです。

以下は、このアクションが Lightning Experience にどのように表示されるかを示しています。

Lightning Experience の Visualforce カスタムボタン

これらの例からもわかるとおり、Salesforce には、JavaScript ボタンの機能を変換して Lightning Experience に移行できるようにする優れた機能が揃っています。

現在では、数年の間に次々と構築された JavaScript ボタンが大量にある場合があります。そのため、移行や変換のプロセスに時間がかかるのではないかと思うかもしれません。けれども、移行作業は思っているほど難しくはありません。当社では、従業員が使用する社内の Salesforce 組織で JavaScript ボタンの分析を実施しました。その結果、ボタンの多くは現在使用されていないか、ユーザが滅多に起動しないものでした。他にも、同一のボタンがさまざまなオブジェクトで重複していました。リストに目を通した結果、JavaScript ボタンの多くが、これまでに説明してきたソリューションに変換可能であることが確認できました。変換不能なものについても、その多くが新しい Lightning アクションで対処できました。

プログラム型ソリューションのリストにある Lightning アクションが、JavaScript ボタンのさまざまな用途の代用になるものであることに気付いたのではないでしょうか? Lightning アクションは、クイックアクションフレームワークを基盤に簡単に構築できます。設定手順は、Visualforce クイックアクションと同様です。Lightning アクションについては、この次に詳しく説明します。