クイックアクション、カスタムボタン、Apex の使用
学習の目的
既存のボタンに代わるボタン
次の表は、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 カスタムボタンの機能を変換する宣言型ツールがいくつもあります。
クイックアクション
項目値の検証
ユーザーがレコードを作成または更新するときに、特定の項目への入力を必須にしたい、あるいは特定の条件に従って入力されるようにしたいと思うことがあります。
たとえば、ユーザーが詳細な編集ページにアクセスしなくても ToDo を完了できるアクションを作成するとします。ただし、期日を設定しない限り ToDo を完了できないようにします。
- [設定] のオブジェクトマネージャーで、[ToDo] をクリックして、[ボタン、リンク、およびアクション] をクリックします。
- [新規アクション] をクリックします。
- [アクション種別] で、[レコードを更新] を選択します。
- [表示ラベル] に、「Close Task」 (ToDo の完了) と入力します。
- [保存] をクリックします。
次に「Close Task」クイックアクションに表示する項目を選択します。項目プロパティを使うと、項目を簡単に必須や参照のみにすることができます。
アクションレイアウトに項目を設定したら、ToDo レコードの任意の項目に定義済み項目値を追加できます。この例では、[割り当て先] 項目を必須にしました。また、[状況] 項目に定義済み値を追加して、[完了] に変更しています。
設定し終えたアクションを、ToDo ページレイアウトに追加します。これで、ユーザーが Lightning Experience と Salesforce モバイルアプリケーションの両方で ToDo レコードページからこのアクションにアクセスできます。以下は、ToDo ページの [Close Task (ToDo の完了)] アクションの例です。
[Close Task (ToDo の完了)] をクリックするとこのアクションが表示され、ユーザーはすばやく操作を実行して保存できます。
Salesforce モバイルアプリケーションでは次のようになります。
項目の値の事前入力
より高度な使用事例として、ユーザーがレコードを作成できるようにする一方で、1 つ以上の項目が連動項目の値に基づいて自動入力されるようにする場合が挙げられます。
たとえば、社内の営業チームの四半期売上目標が、通常は各自の顧客の前年度収益の 25% に 10% を乗じた金額であるとします。けれども、必ずしもこの簡単な数式が適用されるわけではないため、商談金額に値が事前入力され、ユーザーがその値を変更できるようにしたいと考えています。ユーザーが詳細な商談レコードページにアクセスしなくても、項目をすばやく効率的に変更できるアクションを作成します。
- [設定] のオブジェクトマネージャーで、[取引先] をクリックして、[ボタン、リンク、およびアクション] をクリックします。
- [新規アクション] をクリックします。
- [アクション種別] で [レコードを作成] を選択します。
- [対象オブジェクト] で [商談] を選択します。
- 適切なレコードタイプを選びます。
- [表示ラベル] に、「New Oppty (新規商談)」と入力します。
- [保存] をクリックします。
Account.Last_Year_Revenue_Generated__c * 1.10 / 4
このアクションを取引先ページレイアウトに追加します。ユーザーがアクションを起動すると、項目に値が事前入力された状態で表示され、ユーザーがこの値を受け入れるか上書きすることができます。
Account.Parent.Last_Year_Revenue_Generated__c
数式の形式を覚えておく必要もありません。クイックアクションは宣言型で、Salesforce 数式ビルダーを使用します。
入力値に基づく Visualforce ページへのリダイレクト
Visualforce ページを作成して、ビジネスプロセスを強化できます。ユーザーは、カスタムボタン、アクションの上書き、タブなどさまざまな方法でこれらの Visualforce ページに移動できます。
Visualforce ページの利点の 1 つは、標準コントローラーを使用して、カスタマイズされたレコードページを作成し、事前検証、事前入力済み項目、数式などさまざまなものを追加できることです。
Salesforce Classic での JavaScript の一般的な用途は、レコードから値を読み込み、Visualforce ページにユーザーをリダイレクトする URL にその値を渡すことです。また、クイックアクションを使用して、ユーザーに Visualforce ページへのアクセス権を付与することもできます。Visualforce クイックアクションは、すでに説明した手順とほぼ同じプロセスで簡単に作成できます。唯一の違いは、アクション種別に [カスタム Visualforce] を選択することです。
オブジェクト固有の Visualforce クイックアクションの場合は、Visualforce ページにオブジェクトの standardController を含めて、レコードデータにアクセスできるようにし、クイックアクション選択リストに Visualforce ページが表示されるようにする必要があります。
カスタム URL ボタンおよびリンク
以下は、各種の URL ボタンおよびリンクと、Lightning Experience でのそのリダイレクト動作の一覧です。
カスタム URL ボタンまたはリンク | Lightning Experience の動作 |
---|---|
外部 URLwww.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 トリガーの使用を検討します。このトリガーは特に、サードパーティインテグレーションで役立ちます。Salesforce API を経由して、Salesforce Classic、Lightning Experience、Salesforce モバイルアプリケーションのすべてにルールが適用されるためです。
Apex トリガーについての詳細は、『Apex 開発者ガイド』を参照するか、「Apex トリガー」のバッジを獲得してください。
カスタム Visualforce ボタン
- 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>
- 各自の Visualforce ページを参照するカスタムボタンを作成します。
- このアクションをリストビューに追加します。
[最近参照したレコード] リストは、一括アクションがサポートされていません。一括アクションを使用できるのはリストビューのみです。
例
以下は、このアクションが Lightning Experience にどのように表示されるかを示しています。
これらの例からもわかるとおり、Salesforce には、JavaScript ボタンの機能を変換して Lightning Experience に移行できるようにする優れた機能が揃っています。
現在では、数年の間に次々と構築された JavaScript ボタンが大量にある場合があります。そのため、移行や変換のプロセスに時間がかかるのではないかと思うかもしれません。けれども、移行作業は思っているほど難しくはありません。当社では、従業員が使用する社内の Salesforce 組織で JavaScript ボタンの分析を実施しました。その結果、ボタンの多くは現在使用されていないか、ユーザーが滅多に起動しないものでした。他にも、同一のボタンがさまざまなオブジェクトで重複していました。リストに目を通した結果、JavaScript ボタンの多くが、これまでに説明してきたソリューションに変換可能であることが確認できました。変換不能なものについても、その多くが新しい Lightning アクションで対処できました。
プログラム型ソリューションのリストにある Lightning アクションが、JavaScript ボタンのさまざまな用途の代用になるものであることに気付いたのではないでしょうか? Lightning アクションは、クイックアクションフレームワークを基盤に簡単に構築できます。設定手順は、Visualforce クイックアクションと同様です。Lightning アクションについては、この次に詳しく説明します。