Skip to main content
3 月 5 日~ 6 日にサンフランシスコで開催される TDX (Salesforce+ でも配信) で「Developer Conference for the AI Agent Era (AI エージェント時代に向けた開発者向けカンファレンス)」にぜひご参加ください。お申し込みはこちら

カスタムアクションを追加する

学習の目的

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

  • カスタムアクションの機能と場所を定義する。
  • サンプルコードを使用して Apex クラスを作成する。
  • Apex クラスの権限を設定する。
  • カスタムアクションをディスパッチャーコンソールに追加する。
メモ

メモ

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

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

カスタムアクションをユーザーが必要とする場所に表示する

Jacinta は別の依頼をするために Maria のところへやってきました。時々、派遣作業員は体調不良や予定が長引いていることを Jacinta に連絡してきます。このようなスケジュールの変更は、次の予定に影響して今日中に完了できなくなる危険性があります。Jacinta はこういった予定の状況をガントチャートから直接 [In Jeopardy (対応が必要)] に設定することを望んでいます。Maria は力になることができるでしょうか?

もちろん、できます。Maria はカスタムアクションを作成して Jacinta のガントチャートに追加し、予定の状況を設定できます。カスタムアクションを使用すると、Apex クラスをコールするか、Visualforce ページを開くことができます。また、カスタムアクションはディスパッチャーコンソールのいくつかの領域でレコードに対して実行できます。Maria は、このアクションは Apex クラスを使用して実行するのが最善であると判断します。

Maria は Jacinta にカスタムアクションを表示したい場所を尋ねます。Maria はシステム管理者がカスタムアクションをディスパッチャーコンソールに追加できる場所として、次を挙げます。

  • 個別または複数の予定に関するサービス予定リスト
  • 個別または複数の予定に関するガントチャート
  • 個々の派遣作業員またはリソースの不在に関するガントチャート
  • 地図上の多角形 (多角形内の予定に対してアクションを実行)

Jacinta は Maria にカスタムアクションをガントチャート上の個々のサービス予定に追加するように頼みます。これで、Maria は次の手順を行う準備ができました。

  1. Apex クラスを作成する。
  2. 権限をクラスに割り当てる。
  3. カスタムアクションをディスパッチャーコンソールに追加する。

Apex クラスを作成する

Maria は、Jacinta の依頼に対応するコードがすでに存在するかどうかを確認します。Maria は、「Field Service Lightning 開発者ガイド」でまさに必要としていることを実行する Apex クラスのコードサンプルを見つけて感激し、そこで提供されている toggleServiceAppointmentJeopardy クラスを使用して、次の手順で作業をやり遂げます。

  1. 設定 をクリックして、[開発者コンソール] を選択します。
  2. [File (ファイル)] メニューから、[New (新規)] | [Apex Class (Apex クラス)] を選択します。
  3. クラス名に toggleServiceAppointmentJeopardy と入力し、[OK] をクリックします。
  4. 開発者コンソールでコードをすべて選択して削除します。
  5. 新しいコードを入力します。Maria はコードサンプルを貼り付けます。
    global class toggleServiceAppointmentJeopardy implements FSL.CustomGanttServiceAppointmentAction {
    global String action(List<Id> serviceAppointmentsIds, Datetime
    	ganttStartDate, Datetime ganttEndDate, Map<String, Object>
    	additionalParameters) {   
    List<ServiceAppointment> saList = [SELECT 
    	FSL__InJeopardy__c, AppointmentNumber FROM
    	ServiceAppointment WHERE Id in: serviceAppointmentsIds];
    	String reply = '';
    	List<String> saNames = new List<String>();
    for (ServiceAppointment s : saList) {
    		s.FSL__InJeopardy__c = !s.FSL__InJeopardy__c;
    		saNames.add(s.AppointmentNumber);
    	}
    upsert saList;
    reply = String.join(saNames, ', ');
    	return 'Service Appointments successfully processed: ' + 
    	Reply;
    }
    }
  6. [File (ファイル)] | [Save (保存)] を選択します。

Maria の新しいクラスは、Apex クラスのリストに保存されます。

権限を割り当てる

Maria はクラスを作成しましたが、適切な権限を設定するまではそのクラスをディスパッチャーコンソールに追加することはできません。

まず、新しいガントチャートのカスタムアクションに対してカスタム権限を設定します。

  1. 設定 をクリックし、[設定] を選択します。
  2. [クイック検索] ボックスに、permission (権限) と入力します。
  3. [カスタム権限] を選択します。
  4. [新規] をクリックします。
  5. 表示ラベル、名前、説明を入力します。Maria は次のように入力します。
    • 表示ラベル: toggle Service Jeopardy (サービスの要対応を切り替える)
    • 名前: toggle_Service_Jeopardy
    • 説明: Grant permission to view and use the toggleServiceJeopardy class on the Gantt. (ガントチャートの toggleServiceJeopardy クラスを表示および使用する権限を付与する。)
  6. [保存] をクリックします。

次に、派遣担当リーダー用のカスタム権限セットを作成し、新しく作成した権限を追加します。

  1. 設定 をクリックし、[設定] を選択します。
  2. [クイック検索] ボックスに permission (権限) と入力し、[権限セット] をクリックします。
  3. [新規] をクリックします。
  4. [表示ラベル] に Lead Dispatcher (派遣担当リーダー) と入力し、[保存] をクリックします。
  5. 表示されたタブで、スクロールダウンして [カスタム権限] をクリックします。
  6. [編集] をクリックします。
  7. [toggle Service Jeopardy (サービスの要対応を切り替える)] を選択して、[追加] をクリックします。
    有効な権限のリストに追加された toggle Service Jeopardy (サービスの要対応を切り替える) 権限が表示されている派遣担当リーダーの権限セット。
  8. [保存] をクリックします。
  9. [割り当ての管理] をクリックします。
  10. [割り当てを追加] をクリックします。
  11. 自分の名前の横にあるチェックボックスをオンにして、[割り当て] をクリックします。

これで、Maria にディスパッチャーコンソールにアクションを追加するための適切な権限が設定されました。あと一歩で完了です。

アクションをディスパッチャーコンソールに追加する

続いて、Maria は Jacinta が表示できるように、新しいアクションをディスパッチャーコンソールに追加します。

  1. アプリケーションランチャー アプリケーションランチャーアイコン から、[Field Service Admin] を開きます。
  2. [Field Service 設定] タブをクリックします。
  3. [Dispatcher Console UI (ディスパッチャーコンソール UI)] を開き、[Custom Actions (カスタムアクション)] をクリックします。
  4. 左側の列で、アクションカテゴリを選択して、アクションの位置と範囲を定義します。Maria は [Gantt (ガントチャート)] を選択します。
  5. [New Action (新規アクション)] をクリックして、詳細を入力します。Maria は次のように入力します。
    • Label in Dispatcher Console (ディスパッチャーコンソールでの表示ラベル): Change Jeopardy Status (要対応状況を変更する)
    • Action Type (アクション種別): Apex Class (Apex クラス)
    • Apex Class (Apex クラス): toggleServiceAppointmentJeopardy
    • Required Custom Permission (必須カスタム権限): toggle Service Jeopardy (サービスの要対応を切り替える)
    • Icon (アイコン): アクションの表示ラベルの横に表示するアイコンを選択します。
      値が入力されている [CUSTOM ACTIONS (カスタムアクション)] タブ。
  6. [Save (保存)] をクリックします。

Maria は Jacinta に新しいアクションの準備が整ったことを伝えます。Jacinta がガントチャート上の既存のサービス予定を右クリックすると、要対応状況を変更するためのオプションが表示されます。複数のサービス予定を選択するには、Ctrl キーを押したままにして選択します。

ガントチャートのサービス予定の展開されている右クリックメニューと、メニューの一番下に追加されていることが示されている [Change Jeopardy Status (要対応状況を変更する)] オプション。

Maria はアクションをガントチャートに追加しました。また、アクションを定義し、それをどこに配置するかを決め、必要なことを実行するコードサンプルを見つけ、権限を設定しました。次に、そのアクションを [Dispatcher Console UI (ディスパッチャーコンソール UI)] 設定に追加しました。これで、Jacinta は必要に応じてサービス予定の要対応状況を変更できるようになりました。

Maria と Jacinta は、チームのニーズに合わせてディスパッチャーコンソールをカスタマイズしました。皆さんに自分のディスパッチャーコンソールをカスタマイズする方法を考えるようにお願いしたのを覚えていますか? きっとすばらしいアイデアが浮かんだ思います。

ハンズオン Challenge

+500 ポイント

準備を始めましょう

この 単元 は各自のハンズオン組織で実行します。[起動] をクリックして開始するか、組織の名前をクリックして別の組織を選びます。

あなたの Challenge

Add a custom action to the Gantt
Ursa Major wants to add a custom action to the Gantt to make it easy to extend an employee’s absence to the next day.
Prework:
Remember, for this module, you can’t use a standard Developer Edition org or Trailhead Playground. You must sign up for the Field Service with Managed Package and Sample Data Developer Edition. You can use the org you used in the previous unit.
  • Create the copyAbsenceToNextDay Apex class using the following code sample.
    global class copyAbsenceToNextDay implements FSL.CustomGanttResourceAbsenceAction {
        global String action(Id absenceId, String absenceType, Datetime ganttStartDate, Datetime ganttEndDate, Map<String, Object> additionalParameters) {
            ResourceAbsence resourceAbsence = [SELECT Id, AbsenceNumber, Start, End, ResourceId, RecordTypeId, FSL__Approved__c FROM ResourceAbsence WHERE Id =: absenceId LIMIT 1];
            ResourceAbsence raClone = resourceAbsence.clone(false, true, false, false);
            raClone.Start = resourceAbsence.Start.addDays(1);
            raClone.End = resourceAbsence.End.addDays(1);
            raClone.ResourceId = resourceAbsence.ResourceId;
    	raClone.RecordTypeId = resourceAbsence.RecordTypeId;
            raClone.FSL__Approved__c = true;
            insert raClone;
            return 'Resource Absence successfully copied.';
        }
    }
    
  • Create custom permissions for the new class.
    • Label: copyAbsenceToNextDay
    • Name: copy_absence_to_next_day
  • Create and assign the Lead Dispatcher permission set.
  • Add the copy absence to next day custom permission to the Lead Dispatcher permission set.
  • Add the copy absence to next day custom action to your Gantt.
    • Action Category: Non-Availabilities
    • Label in Dispatcher Console: Copy Absence to Next Day
    • Action Type: Apex Class
    • Apex Class: copyAbsenceToNextDay
    • Required Custom Permission: Permission to use copyAbsenceToNextDay
Salesforce ヘルプで Trailhead のフィードバックを共有してください。

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

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