SchedulerResources クラス
名前空間
実装に関する考慮事項
SchedulerResources クラスのメソッドの Apex 実装は、Apex ガバナ制限に従う必要があります。この制限には、同期ヒープサイズ制限、同期 CPU 時間制限、長時間のトランザクションに対する同期同時トランザクション数が含まれます。ガバナ制限を回避するには、同時期間の削減、同時サービスリソース数の制限、または同時テリトリー数の制限を行って、入力を調整する必要があります。これにより、実装のトランザクション時間および応答サイズが全体的に削減されます。標準の Apex ガバナ制限についての詳細は、「Salesforce Developer の制限および割り当てクイックリファレンス」を参照してください。
例
利用可能なサービスリソース (予定候補) のリストを取得するには、次のようにします。
1String response = lxscheduler.SchedulerResources.getAppointmentCandidates(input);リソースの利用可能な予定の時間枠のリストを取得するには、次のようにします。
1String response = lxscheduler.SchedulerResources.getAppointmentSlots(input);SchedulerResources のメソッド
SchedulerResources のメソッドは次のとおりです。
getAppointmentCandidates(getAppointmentCandidatesInput)
要求を作成する前に、Salesforce Scheduler を設定します。この設定には、サービスリソース、サービステリトリーメンバー、作業種別グループ、作業種別、作業種別グループメンバー、およびサービステリトリー作業種別の作成または設定が含まれます。詳細は、「Salesforce Scheduler の設定」を参照してください。
利用可能な時間枠を決定するために、予定の時間枠が、項目値、スケジュール済み予定、不在、Scheduler の設定、スケジュールポリシーなどの複数の要素に基づいて決定されます。詳細は、「Salesforce Scheduler による対応可能な時間枠の決定」を参照してください。
リソースの開始時刻および終了時刻を返す際には、以下の要素が検討されます。
- リソースの作業可能性
- サービステリトリーメンバー、サービステリトリー、作業種別、取引先の業務時間の各項目を使用して判断されます。
- リソースの作業不可能性
- リソースの不在、リソースが割り当てられた既存の予定に基づいて判断されます。リソースは、状況が [クローズ済み]、[キャンセル]、または [完了] のいずれでもない予定の必須リソースとしてマークする必要があります。
- スケジュールポリシー内の予定の開始時間の間隔
- 予定を開始できる時間は、スケジュールポリシー内の [Appointment start time interval (予定の開始時間の間隔)] 項目を使用して決定されます。この間隔には、5、10、15、20、30、または 60 を設定できます。デフォルトでは 15 に設定されます。
- 作業種別の期間
- 終了時刻は、開始時刻 + 作業種別の期間で計算されます。
署名
public static String getAppointmentCandidates(lxscheduler.GetAppointmentCandidatesInput getAppointmentCandidatesInput)
パラメーター
- getAppointmentCandidatesInput
- 型: lxscheduler.GetAppointmentCandidatesInput
- このメソッドは入力で、lxscheduler.GetAppointmentCandidatesInput クラスのインスタンスを取得します。lxscheduler.GetAppointmentCandidatesInputBuilder クラスを使用して、入力クラスのインスタンスを作成します。
戻り値
型: String
getAppointmentSlots(getAppointmentSlotsInput)
予定の時間枠は、Salesforce Scheduler のデータモデル設定に基づいて決定されます。以下に、データ設定時に検討できる要件をいくつか示します。
- 要求を作成する前に、Salesforce Scheduler を設定します。設定には、サービスリソース、サービステリトリーメンバー、作業種別グループ、作業種別、作業種別グループメンバー、およびサービステリトリー作業種別の作成または設定が含まれます。詳細は、「Salesforce Scheduler のビジネス情報の管理」を参照してください。
- サービステリトリー作業種別を使用して、リクエストボディ内の各テリトリーにマップされる作業種別を設定します。作業種別グループメンバーを使用して、作業種別グループに同一の作業種別をマップします。
以下の要素は、時間枠が計算され、返される方法に影響します。
- 営業時間全体で異なるタイムゾーンが処理され、結果は常に UTC で返されます。
- リソースは、割り当てられたリソースオブジェクトの必須リソースとしてマークする必要があります。
- サービス予定に割り当てられたリソースの状況カテゴリが、[キャンセル済み]、[完了不可]、および [完了] 以外の場合、リソースは利用不可と見なされます。
- すべての種別の [リソース不在] は、開始から終了まで利用不可と見なされます。
- 以下の作業種別レコードの項目 (設定されている場合) は、時間枠要件の調整に使用されます。詳細は、「Salesforce Scheduler での作業種別の作成」を参照してください。
パラメーター 説明 時間枠開始 現在の時刻 + 時間枠開始より早い時間枠は返されません。 時間枠終了 現在の時刻 + 時間枠終了より遅い時間枠は返されません。 予定前のブロックタイム 予定が利用不可と見なされるまでの期間。 予定後のブロックタイム 予定が利用不可と見なされた後の期間。 営業時間 時間枠を決定する際は、取引先、作業種別、サービステリトリー、およびサービステリトリーメンバーのすべての営業時間の重複が考慮されます。詳細は、「Salesforce Scheduler での営業時間の設定」を参照してください。 - 開始日から 31 日の期間内の時間枠のみが返されます。
- Salesforce Scheduler では、項目値、スケジュール済み予定、不在、Scheduler の設定、スケジュールポリシーなどの複数の要素を使用して、最も早い予定と最も遅い予定の時間枠を含む利用可能な時間枠が決定されます。「Salesforce Scheduler による対応可能な時間枠の決定方法」を参照してください。
署名
public static String getAppointmentSlots(lxscheduler.GetAppointmentSlotsInput getAppointmentSlotsInput)
パラメーター
- getAppointmentSlotsInput
- 型: lxscheduler.GetAppointmentSlotsInput
- このメソッドは入力で、lxscheduler.GetAppointmentSlotsInput クラスのインスタンスを取得します。lxscheduler.GetAppointmentSlotsInputBuilder クラスを使用して、入力クラスのインスタンスを作成します。
戻り値
型: String
setAppointmentCandidatesMock(expectedResponse)
このコンストラクターはテストでの使用を目的としており、Apex テストコンテキスト外で使用された場合は例外が発生します。
署名
public static void setAppointmentCandidatesMock(String expectedResponse)
パラメーター
- expectedResponse
- 型: String
戻り値
型: void
これは、GetAppointmentCandidates クラスの実装例を示しています。
1public class AppointmentCandidateService {
2 //Instance members for parsing
3 public String startTime;
4 public String endTime;
5 public List<String> resources;
6 public String territoryId;
7 public static List<AppointmentCandidateService> getAppointmentCandidates(){
8 //Build input for GetAppointmentCandidates API
9 lxscheduler.GetAppointmentCandidatesInput input = new lxscheduler.GetAppointmentCandidatesInputBuilder()
10 .setWorkTypeGroupId('0VSRM0000000AGT4A2')
11 .setTerritoryIds(new List<String>{'0HhRM0000000G8W0AU'})
12 .setStartTime(System.now().format('yyyy-MM-dd\'T\'HH:mm:ssZ','America/Los_Angeles'))
13 .setEndTime(System.now().addDays(2).format('yyyy-MM-dd\'T\'HH:mm:ssZ','America/Los_Angeles'))
14 .setSchedulingPolicyId('0VrRM00000000D0')
15 .setApiVersion(Double.valueOf('50.0'))
16 .build();
17 List<AppointmentCandidateService> vList = parse(lxscheduler.SchedulerResources.getAppointmentCandidates(input));
18 return vList;
19 }
20 private static List<AppointmentCandidateService> parse(String json) {
21 return (List<AppointmentCandidateService>) System.JSON.deserialize(json, List<AppointmentCandidateService>.class);
22 }
23}この例では、setAppointmentCandidatesMock メソッドを使用してサンプルモックを設定する方法を示しています。
1@isTest
2private class GetAppointmentCandidatesTest {
3 static testMethod void getAppCandidatesTest() {
4 String expectedResponse = '[' +
5 ' {' +
6 ' \"startTime\": \"2021-03-18T16:00:00.000+0000\",' +
7 ' \"endTime\": \"2021-03-18T17:00:00.000+0000\",' +
8 ' \"resources\": [' +
9 ' \"0HnRM0000000Fxv0AE\"' +
10 ' ],' +
11 ' \"territoryId\": \"0HhRM0000000G8W0AU\"' +
12 ' },' +
13 ' {' +
14 ' \"startTime\": \"2021-03-18T19:00:00.000+0000\",' +
15 ' \"endTime\": \"2021-03-18T20:00:00.000+0000\",' +
16 ' \"resources\": [' +
17 ' \"0HnRM0000000Fxv0AE\"' +
18 ' ],' +
19 ' \"territoryId\": \"0HhRM0000000G8W0AU\"' +
20 ' }' +
21 ']';
22 lxscheduler.SchedulerResources.setAppointmentCandidatesMock(expectedResponse);
23
24 Test.startTest();
25 List<AppointmentCandidateService> candidateList = AppointmentCandidateService.getAppointmentCandidates();
26 System.assertEquals(2, candidateList.size(), 'Should return only 2 records!');
27 Test.stopTest();
28 }
29}setAppointmentSlotsMock(expectedResponse)
このコンストラクターはテストでの使用を目的としており、Apex テストコンテキスト外で使用された場合は例外が発生します。
署名
public static void setAppointmentSlotsMock(String expectedResponse)
パラメーター
- expectedResponse
- 型: String
戻り値
型: void