この文章は Salesforce 機械翻訳システムを使用して翻訳されました。詳細はこちらをご参照ください。
英語に切り替える

コード例: ディスパッチャーコンソールのカスタムアクション

ディスパッチャーコンソールのカスタムアクションにリンクする Apex クラスまたは Visualforce ページの設定方法を説明します。
カスタムアクションは、Apex をコールするか Visualforce ページを開くことができます。ディスパッチャーコンソールのいくつかの領域でレコードに対して実行できます。カスタムアクションの作成方法の詳細は、「ディスパッチャーコンソールのカスタムアクションの作成」を参照してください。

ディスパッチャーコンソールからアクセスできるようにするには、クイックアクションインターフェースを実装するすべての Apex クラスを Global として宣言する必要があります。

メモ

Apex クラスの作成

ディスパッチャーコンソールのカスタムアクションにリンクする Apex クラスを作成する場合、次の 3 つのインターフェースのいずれかをクラスに実装します。

インターフェース 説明
CustomGanttServiceResourceAction サービスリソースに対するアクション用。パラメーターは、サービスリソースレコード ID、ガントチャートに反映されたサービステリトリーメンバーレコード ID、現在のガントチャートの開始日と終了日です。その他にパラメーターはありません。

次の形式を使用します。String action(Id resourceId, Id stmId, Datetime strGanttStartDate, Datetime strGanttEndDate, Map<String, Object> additionalParameters)

CustomGanttServiceAppointmentAction サービス予定に対するアクション用。パラメーターは、サービス予定レコード ID (一括アクションに使用)、および現在のガントチャートの開始日と終了日です。その他にパラメーターはありません。Map<String, Object> additionalParameters 入力パラメーターは、将来の使用のために予約されていますが、コードの実行に含める必要があります。

次の形式を使用します。String action(List<Id> serviceAppointmentsIds, Datetime strGanttStartDate, Datetime strGanttEndDate, Map<String, Object> additionalParameters)

このアクションが実装されると、複数のサービス予定を返すことができます。メソッドで、返される ID の数をチェックする if ステートメントを作成することをお勧めします。最初に、serviceAppointmentsIds.size()>1 で少なくとも 1 つの ID が返されたことを検証します。次に、返された予定 ID の数 (0、1、2 以上) に応じて異なるアクションを実行できます。

CustomGanttResourceAbsenceAction リソースの不在に対するアクション用。パラメーターは、リソース不在レコード ID、不在種別 (「na」または「break」)、現在のガントチャートの開始日と終了日です。その他にパラメーターはありません。Map<String, Object> additionalParameters 入力パラメーターは、将来の使用のために予約されていますが、コードの実行に含める必要があります。

次の形式を使用します。String action(Id absenceId, String absenceType, Datetime strGanttStartDate, Datetime strGanttEndDate, Map<String, Object> additionalParameters)

これらの関数は、グローバルであり、文字列を返す必要があります。文字列が空の場合は、ユーザーが関連アクションをクリックしたときに表示されるガントチャート通知で使用されます。

コード例: サービスリソースのカスタムアクション

このアクションは、ガントチャートに表示される日数にわたり、選択されたサービスリソースに [対応不可] 種別のリソース不在を作成します。

1global class BlockResourceVisibleTime implements FSL.CustomGanttServiceResourceAction {
2
3    global String action(Id resourceId, Id stmId, Datetime ganttStartDate, Datetime ganttEndDate, Map<String, Object> additionalParameters) {
4
5        ResourceAbsence na = new ResourceAbsence();
6
7        // get Resource Absence record type - NA
8        RecordType recordTypeNA = [
9            SELECT 
10                Id, SobjectType, Name 
11            FROM 
12                RecordType 
13            WHERE 
14                DeveloperName =: 'Non_Availability' 
15                AND 
16                SObjectType =: ResourceAbsence.getSobjectType().getDescribe().getName() 
17            ];
18
19        na.RecordTypeId = recordTypeNA.Id;
20        na.ResourceId = resourceId;
21        na.FSL__Approved__c = true;
22        na.Start = ganttStartDate;
23        na.End = ganttEndDate;
24
25        insert na;
26
27        ServiceResource resource = [SELECT Name FROM ServiceResource WHERE Id =: resourceId];
28
29        return 'Blocked availability to ' + resource.Name + ' from ' + ganttStartDate.format() + ' to ' + ganttEndDate.format();
30
31    }
32
33}

コード例: サービス予定��カスタムアクション

このアクションは [対応が必要] 項目の True と False を切り替えます。

1global class toggleServiceAppointmentJeopardy implements FSL.CustomGanttServiceAppointmentAction {
2 
3    global String action(List<Id> serviceAppointmentsIds, Datetime ganttStartDate, Datetime ganttEndDate, Map<String, Object> additionalParameters) {
4       
5        List<ServiceAppointment> saList = [SELECT FSL__InJeopardy__c, AppointmentNumber FROM ServiceAppointment WHERE Id in : serviceAppointmentsIds];
6        String reply = '';
7        List<String> saNames = new List<String>();
8
9        for (ServiceAppointment s : saList) {
10            s.FSL__InJeopardy__c = !s.FSL__InJeopardy__c;
11            saNames.add(s.AppointmentNumber);
12        }
13       
14        upsert saList;
15
16        reply = String.join(saNames, ', ');
17        return 'Service Appointments successfully processed: ' + reply;
18    }
19   
20}

コード例: リソース不在のカスタムアクション

リソース不在の種別が「N/A」の場合、このアクションは翌日に重複する不在を作成します。

1global class copyAbsenceToNextDay implements FSL.CustomGanttResourceAbsenceAction {
2 
3    global String action(Id absenceId, String absenceType, Datetime ganttStartDate, Datetime ganttEndDate, Map<String, Object> additionalParameters) {
4       
5        ResourceAbsence resourceAbsence = [SELECT Id, AbsenceNumber, Start, End, ResourceId, RecordTypeId, FSL__Approved__c FROM ResourceAbsence WHERE Id =: absenceId LIMIT 1];
6
7        ResourceAbsence raClone = resourceAbsence.clone(false, true, false, false);
8        raClone.Start = resourceAbsence.Start.addDays(1);
9        raClone.End = resourceAbsence.End.addDays(1);
10        raClone.ResourceId = resourceAbsence.ResourceId;
11        raClone.RecordTypeId = resourceAbsence.RecordTypeId;
12        raClone.FSL__Approved__c = true;
13        insert raClone;
14
15        return 'Resource Absence successfully copied.';
16    }
17   
18}

Visualforce ページの作成

Visualforce ページを作成する場合は、次の GET パラメーターを使用します。

アクションの対象 説明
サービス予定 次の形式を使用します。services [複数の場合], id (複数の場合はカンマ区切り), start (現在のガントチャート開始日、string), end (現在のガントチャート終了日、string)

1 つのサービス予定を更新するために使用された Visualforce ページの例: ?id=08p4E000000Kj5hQAC&​start=5-7-2018&end=5-8-2018

複数のサービス予定を更新するために使用された Visualforce ページの例: ?services=08p4E000000Kj5hQAC,08p4E000430Kj5hAPP&​start=5-7-2018&end=5-8-2018

サービスリソース 次の形式を使用します。id, stm (サービスリソースの現在のサービステリトリーメンバーレコードの ID), start (現在のガントチャート開始日、string), end (現在のガントチャート終了日、string)

例: ?id=0Hn4E0000001OMQSA2&​stm=0Hu4E0000005cpPSAQ&start=5-7-2018&​end=5-8-2018

リソースの不在 次の形式を使用します。id, type (break または na), start (現在のガントチャート開始日、string), end (現在のガントチャート終了日、string)

例: ?id=0Hw4E00000091HSSAY&​type=break&start=5-7-2018&​end=5-8-2018

コードから Visualforce ライトボックスを閉じるには、parent.postMessage('closeLightbox','*'); を使用します。

ディスパッチャーコンソールのカスタムアクションで、管理パッケージの一部である Visualforce ページを開くことはできません。

メモ