AppointmentBookingService クラス
名前空間
使用方法
AppointmentBookingService クラスをコールする前に、親作業指示とサービス予定がすでに存在��ることを確認してください。送信する operatingHoursId は、予定の予約時に顧客に提示された時間枠のバリエーションを表します (月曜日の午前 9 時~ 11 時、午前 11 時~午後 1 時、午後 1 時~ 3 時、火曜日の 午前 9 時~ 11 時、正午~午後 4 時など)。
タイムゾーンは通常、サービスを依頼する顧客のロケーションに基づきます。ベストプラクティスとして、サービステリトリーの業務時間で指定されたタイムゾーンを使用してください。
AppointmentBookingService クラスがコールされると、関連付けられた作業種別の ExactAppointment 値は無視されます。正確な予定が必要な場合は、パラメータでこの値を true に設定します。作業種別の ExactAppointment を優先する場合は、作業種別から直接照会します。
時間枠を取得した後、開発者は時間枠の表示方法または管理方法を決めることができます。通常、時間枠は顧客に表示され、顧客が時間枠を選択します。時間枠が選択されたら、サービス予定の ArrivalWindowStartTime 項目と ArrivalWindowEndTime 項目が時間枠の開始時刻と終了時刻で更新されます。サービス予定が選択された時間枠内に正しくスケジュールされるように、FSL.ScheduleService メソッドがコールされます。
AppointmentBookingService のメソッド
AppointmentBookingService には、次の静的メソッドが含まれます。
getSlots(serviceID, policyId, operatingHoursId, tz, exactAppointment)
署名
public static List<FSL.AppointmentBookingSlot> getSlots(Id serviceID, Id policyId, Id operatingHoursId, System.TimeZone tz, Boolean exactAppointment)
パラメータ
- serviceID
- 型: Id
- 必須。スケジュールされるサービス予定の ID。
- policyId
- 型: Id
- 必須。使用されるスケジュール設定ポリシーの ID。
- operatingHoursId
- 型: Id
-
必須。時間枠の間隔を決定するために使用される業務時間レコードの ID。
- tz
- 型: System.TimeZone
- 必須。時間枠が返されるタイムゾーン。これは通常、サービス予定が行われるサービステリトリー、つまり顧客のロケーションのタイムゾーンです。予定の予約枠は、顧客のロケーションのタイムゾーンで表示する必要があります。
- exactAppointment
- 型: Boolean
- 必須。結果で正確な予定または到着期間を使用するかを指定します。getSlots() メソッドがコールされると、作業種別の exactAppointment 値は無視されます。
戻り値
使用方法
このメソッドは指定されたサービス予定を予約可能な時間枠のリストを返します。結果は元の要求で送信されたタイムゾーンで返されます。予定の時間枠 (9 時~ 11 時、11 時~ 1 時、1 時~ 3 時など) は、コールで提供された operatingHoursId 値によって異なります。
このメソッドは空き時間枠を返すだけで、サービス予定のスケジュールは行いません。エンドユーザが希望する時間枠を選択したら、サービス予定の ArrivalWindowStartTime 項目と ArrivalWindowEndTime 項目を更新し、FSL.ScheduleService メソッドをコールします。
データベースで日時が更新される前に、タイムゾーン変換を実行して dateTime 値を UTC に変換します。
例
この例は、[顧客優先] スケジュール設定ポリシーと [ゴールド予定カレンダー] 業務時間を、希望する予定時間枠として使用して AppointmentBookingService クラスをコールします。
1// FSL.AppointmentBookingService
2// The GetSlots method returns a list of AppointmentBookingSlot objects.
3
4ServiceAppointment sa = [SELECT Id, EarliestStartTime, DueDate FROM ServiceAppointment WHERE Id='Service Appointment ID'];
5Id schedulingPolicyId=[SELECT Id FROM FSL__Scheduling_Policy__c WHERE Name='Customer first' LIMIT 1].Id;
6Id operatingHoursId=[SELECT id FROM OperatingHours WHERE name='Gold Appointments Calendar' LIMIT 1].Id;
7Timezone tz = UserInfo.getTimeZone();
8
9List<FSL.AppointmentBookingSlot> slots = FSL.AppointmentBookingService.GetSlots(sa.Id, schedulingPolicyId, operatingHoursId, tz, false);
10
11System.debug('Returned ' + slots.size() + ' appointment slots');
12for(integer i=0; i<slots.size(); i++){
13 system.debug('Slot:'+i+' Start: '+slots[i].Interval.Start+' Finish:'+ slots[i].Interval.Finish+' Grade: '+slots[i].Grade);
14}時間枠が選択されたら、サービス予定は次のように更新されます。
1FSL.AppointmentBookingSlot slot = slots[0];
2sa.ArrivalWindowStartTime = slot.Interval.Start.addSeconds(tz.getOffset(slot.Interval.Start) / -1000);
3sa.ArrivalWindowEndTime = slot.Interval.Finish.addSeconds(tz.getOffset(slot.Interval.Finish) / -1000);
4
5update sa;