期間とビジネス期間の計算の仕組みIssue <!-- /*NS Branding Styles*/ --> .ns-kb-css-body-editor-container { p { font-size: 12pt; font-family: Lato; color: #000000; } span { font-size: 12pt; font-family: Lato; color: #000000; } h2 { font-size: 24pt; font-family: Lato; color: black; } h3 { font-size: 18pt; font-family: Lato; color: black; } h4 { font-size: 14pt; font-family: Lato; color: black; } a { font-size: 12pt; font-family: Lato; color: #00718F; } a:hover { font-size: 12pt; color: #024F69; } a:target { font-size: 12pt; color: #032D42; } a:visited { font-size: 12pt; color: #00718f; } ul { font-size: 12pt; font-family: Lato; } li { font-size: 12pt; font-family: Lato; } img { display: ; max-width: ; width: ; height: ; } } Task レコードで Duration フィールドと Business Duration フィールドがどのように計算されるかを説明します。これらの計算を制御するビジネスルールとカレンダー設定についても含まれます。 Duration フィールドと Business Duration フィールドは、2010 年以前の SLA エンジンからのレガシーフィールドです。時間ベースのメトリクスを追跡するための新しい方法が存在しますが、これらのフィールドは多くのタスクテーブルで引き続き使用されています。 期間を計算するビジネスルール 複数のビジネスルールが、タスクテーブルの Duration フィールドと Business Duration フィールドを計算します。次の表は、これらのビジネスルールをテーブル別にリストしたものです: Table Business rule Trigger Incident [incident] mark_resolved Incident state changes to Resolved /nav_to.do?uri=sys_script.do?sys_id=d3b21f640a0a3c7400f6acab7de3f5f8 Incident [incident] mark_closed Incident state changes to Closed (if not already set by mark_resolved) /nav_to.do?uri=sys_script.do?sys_id=bf3f8917c0a8016400a867dc0794e8ad Catalog Task [sc_task] Close Ticket Task is closed /nav_to.do?uri=sys_script.do?sys_id=74d38bd0c611227d0151ca6b62ae87e6 Change Task [change_task] Close Ticket Task is closed /nav_to.do?uri=sys_script.do?sys_id=9023ada50a0a0b01004228007704cf66 Problem [problem] mark_closed Problem is closed /nav_to.do?uri=sys_script.do?sys_id=12a53c4fc6112275000bc7c04a87cfb6 Change Request [change_request] mark_closed Change request is closed /nav_to.do?uri=sys_script.do?sys_id=6e20e124c611228e00e44dd37ad1b842 calDateDiff 関数 ほとんどの期間ビジネスルール (change_request の mark_closed を除く) は、GlideSystem 関数 calDateDiff を使用します: current.business_duration = gs.calDateDiff(current.opened_at.getDisplayValue(), current.closed_at.getDisplayValue(), false); calDateDiff に関する重要なポイント: 期間は、解決時刻ではなく、クローズ時刻に基づいて計算されます。スケジュールではなく、カレンダー (システムポリシー > カレンダー) を使用します。デフォルトカレンダーを使用します。これは、データベースによって任意に返される sys_calendar テーブルの最初のレコードです。複数のカレンダーが存在する場合、関数は最初に見つかったものを使用します。重要: 複数のカレンダーがある場合は、任意の選択動作に依存するのではなく、プライマリカレンダーを変更して営業時間を反映させてください。 業務期間の計算方法 mark_resolved ビジネスルールと mark_closed ビジネスルールは、レガシー API である calDateDiff を使用します。calDateDiff 関数は、次を使用して期間を計算します: sys_calendar テーブルの最初のカレンダーレコードを解決またはクローズしたユーザーのセッションタイムゾーン 重要: 計算では解決者のタイムゾーンを使用するため、異なるタイムゾーンから表示すると結果が正しくないように見える場合があります。計算を検証するには、レコードを解決またはクローズしたユーザーになりすましてください。 計算例 次の例は、解決者のタイムゾーンとカレンダーの営業時間に基づいて業務期間がどのように計算されるかを示しています。 例 1: 営業時間外に開始されて解決されたインシデント ield Value Opened at 2022-11-09 08:36:30 (London) Resolved at 2022-11-09 08:39:38 (London) Resolved by time zone Europe/London Calendar business hours Wednesday 5 PM – 1 AM (London) Business duration result 0 説明: インシデントは London 時刻の午前 8 時 36 分から午前 8 時 39 分の間に開始されて解決されました。これはカレンダーの営業時間である午後 5 時から午前 1 時の範囲外です。したがって、業務期間は 0 です。 例 2: 営業時間にまたがるインシデント Field Value Opened at 2022-11-08 08:49:47 (London) Resolved at 2022-11-09 08:50:14 (London) Resolved by time zone Europe/London Calendar business hours Tuesday 5 PM – 1 AM (London) Business duration result 8 hours 計算の内訳: 2022-11-08 08:49:47 AM から 2022-11-08 05:00:00 PM まで = 0 時間 (営業時間外)2022-11-08 05:00:00 PM から 2022-11-09 01:00:00 AM まで = 8 時間 (営業時間内)2022-11-09 01:00:00 AM から 2022-11-09 08:50:14 AM まで = 0 時間 (営業時間外)合計: 0 + 8 + 0 = 8 時間 例 3: 異なるタイムゾーン Field Value Opened at 2022-11-07 16:41:27 (Madrid) Resolved at 2022-11-07 16:43:58 (Madrid) Resolved by time zone Europe/Madrid Calendar business hours Wednesday 6 PM – 2 AM (Madrid) Business duration result 0 業務期間の計算の検証 次のスクリプトを使用して、特定の開始日時と解決日時の業務期間の計算を検証します。 始める前に: レコードを解決またはクローズしたユーザーのタイムゾーンに合わせて、自分のユーザータイムゾーンを変更します。 var opened = new GlideDateTime('2022-11-07 15:41:27'); gs.info(opened.getDisplayValue()); var resolved = new GlideDateTime('2022-11-07 15:43:58'); gs.info(resolved.getDisplayValue()); gs.info(gs.calDateDiff(opened.getDisplayValue(), resolved.getDisplayValue(), false)); 注: 日時の値を、検証したいレコードの opened_at および resolved_at の値に置き換えてください。 スケジュールを使用して業務期間を計算 カレンダーではなくスケジュールに基づいて業務期間を計算するには、mark_closed ビジネスルールと mark_resolved ビジネスルールの calDateDiff 関数を、スケジュールベースのロジックに置き換えます。 スケジュールを作成するか、使用する既存のベースシステムスケジュールを特定します。環境に適したタイムゾーンをスケジュールに選択します。たとえば、US/Pacific を定義すると、US/Pacific タイムゾーンで適用されるスケジュール期間に従って期間が計算されるようになります。選択したスケジュールの sys_id をコピーします。mark_closed ビジネスルールと mark_resolved ビジネスルールを変更して、次のスクリプトを使用します: // Default Workday 8-5 Floating schedule. Replace with sys_id of the schedule to be used var schedule = new GlideSchedule("38f8b6d2c0a801640075da0e39d47696"); // Use closed_at for "mark_closed" business rule and resolved_at for "mark_resolved" business rule var duration = schedule.duration(current.opened_at.getGlideObject(), current.closed_at.getGlideObject()); // Stores value as a GlideDuration current.business_duration = duration; // Stores value in seconds. The numeric value function returns a value in milliseconds, hence divide by 1000 current.business_stc = duration.getNumericValue() / 1000; Release<!-- /*NS Branding Styles*/ --> .ns-kb-css-body-editor-container { p { font-size: 12pt; font-family: Lato; color: #000000; } span { font-size: 12pt; font-family: Lato; color: #000000; } h2 { font-size: 24pt; font-family: Lato; color: black; } h3 { font-size: 18pt; font-family: Lato; color: black; } h4 { font-size: 14pt; font-family: Lato; color: black; } a { font-size: 12pt; font-family: Lato; color: #00718F; } a:hover { font-size: 12pt; color: #024F69; } a:target { font-size: 12pt; color: #032D42; } a:visited { font-size: 12pt; color: #00718f; } ul { font-size: 12pt; font-family: Lato; } li { font-size: 12pt; font-family: Lato; } img { display: ; max-width: ; width: ; height: ; } } サポートされている全てのリリース Resolution<!-- /*NS Branding Styles*/ --> .ns-kb-css-body-editor-container { p { font-size: 12pt; font-family: Lato; color: #000000; } span { font-size: 12pt; font-family: Lato; color: #000000; } h2 { font-size: 24pt; font-family: Lato; color: black; } h3 { font-size: 18pt; font-family: Lato; color: black; } h4 { font-size: 14pt; font-family: Lato; color: black; } a { font-size: 12pt; font-family: Lato; color: #00718F; } a:hover { font-size: 12pt; color: #024F69; } a:target { font-size: 12pt; color: #032D42; } a:visited { font-size: 12pt; color: #00718f; } ul { font-size: 12pt; font-family: Lato; } li { font-size: 12pt; font-family: Lato; } img { display: ; max-width: ; width: ; height: ; } }