次の方法で共有


カスタム リソース制約を使用して Universal Resource Scheduling を拡張する

Universal Resource Scheduling は、Dynamics 365 Field Service および Project Service Automation の基礎のスケジュール エンジンである、Universal Resource Scheduling ジョブのために正しいリソースを予約する広範囲にわたるリソース一致機能とともに出荷されます。 Universal Resource Scheduling ソリューションは Field Service および Project service とともに出荷されますが、Universal Resource Scheduling は Dynamics 365 内の任意のワークストリームをスケジュールするために使用することができます。 この記事では、組み込みリソースの制約の実装方法、および Universal Resource Scheduling をカスタム リソースの制約とともにカスタマイズする方法を説明します。

リソース、要件および制約

リソース

Universal Resource Scheduling のコアは、リソース (bookableresource) エンティティです。 予約 (bookableresourcebooking) レコードを作成すると、それはリソース レコードに関連付けられます。 正しいリソースが選択されるようにするため、Universal Resource Scheduling はリソースを分類するための多くの組込みフィルターおよび制約が同梱されています。 例: リソースがユーザー、取引先担当者、取引先企業、備品などであるかを示すリソースの種類。堪能しているスキルでリソースをフィルター処理するための特性。リソースを特定の地域に割り当てるための担当地域。組織階層をモデル化するための組織単位、その他。

リソース レコードおよび関連付けられた制約は、属性または他のエンティティへのリレーションシップを介してモデル化されます。 たとえば、名前やリソースの種類はリソース エンティティ上の属性です。 リソースは複数に関連付けることができるため、リソース特性およびリソース担当地域は子リレーションシップです。 これらのエンティティは、リソースおよび特性/担当地域両方に対する子リレーションシップです。 組織単位は、組織単位エンティティに対するリソース エンティティの検索属性です。

要件

Universal Resource Scheduling のもう一つの重要なエンティティはリソース要件 (msdyn_resourcerequirement) エンティティです。 要件エンティティは実行される作業の要件を記録します。 必要な作業に関するパラメーターを保存します (たとえば、作業を実行可能な期間を制限する開始日フィールドおよび終了日フィールド、ジョブが継続することが予期される期間フィールド、必要な作業の場所を示す作業場所)。 また、要件エンティティは、この要件に対してどのリソースを実行することができ、予約することができるか制限するためのリソース制約を保存します。 リソース エンティティと同様に、リソース制約は要件エンティティ上の属性または他のエンティティに対するリレーションシップとして表現されます。 担当地域は要求エンティティから担当地域エンティティへの検索属性で、作業を実行する担当地域を示しているため、同じ担当地域からリソースを検索する必要があります。 要件特性はエンティティへの要求を参照する子リレーションシップで、ジョブを完了するために要求されるスキルを示すため、要件は一致したスキルを持つリソースのみに一致させることができます。

Universal Resource Scheduling に同梱される制約

以下は Universal Resource Scheduling に付属する制約の一覧です。

  • 特性 - リソースが持つスキルをモデル化するために使用することができます。 また、リソースが各スキルにどれほど熟練しているかを評価する、オプションの評価値をサポートします。
  • カテゴリ - リソースはカテゴリに関連付けることができます
  • 担当地域 - リソースを担当地域に割り当てます
  • 組織単位 - 組織階層をモデル化します
  • リソースの種類 - リソースの種類を定義します
  • チーム - リソースがメンバーであるチームです
  • 部署 - リソースがその一部である部署です

スケジュール ボードでのフィルタ処理

スケジュール ボードには、割り当てられたリソースと予約の一覧が表示されます。 スケジュール ボードのフィルターのパネルを使用すると、制約によってリソースの一覧をフィルター処理することができます。たとえば、リソースの種類のドロップダウンでユーザーのリソースの種類を選択すると、その種類のユーザーに対するリソースがフィルター処理されます。 同様に、特性または担当地域を照合することにより、リソースをフィルター処理することができます。

リソースをフィルター処理するためにフィルター パネルを使用することは、一致するリソースを見つける 1 つの方法です。 このメソッドは特定の制約のセットに一致するリソースの一覧を手動で表示するときに使用します。

スケジュール アシスタントを使用して使用可能なリソースを見つける

スケジュール ボードの下部には、要件レコードの一覧が表示されます。 これらのうちいずれかを選択して、空き時間の検索を選択することができます。 このアクションによりスケジュール アシスタントが開きます。 スケジュール アシスタントは選択した要件レコードでキャプチャした制約を使用して、予約可能な一致するリソースを検索します。 要件の制約に一致し、要件で指定された要求期間に利用可能なリソースのみがボードに表示されます。

同じようなエクスペリエンスは、要件エンティティで利用可能な「本」リボン ボタン、および Dynamics 365 のリスト ビューまたはフォーム内の他のスケジュール エンティティを介して利用することができます。 「本」をクリックすると、スケジュール アシスタントが開き、選択した要件レコードの制約に一致するリソースを表示します。

先に言及した、フィルター パネルを使用して手動でリソースをフィルター処理するスケジュール ボード モードとは異なり、スケジュール アシスタント モードでは、フィルター パネルには要件レコードからリソース制約が自動的に入力され、一致するリソースのみが表示されます。

制約一致の動作方法

制約エンティティ

一部の制約はリソース エンティティで属性として直接指定されますが、他の制約は関連付けを介して定義されます。 関連付けは制約が 2 番目のマスター エンティティを参照するときに必要です。

リソース レコードおよびその担当地域制約と特性制約について検討します。

まず、マスター レコードです。 担当地域に保管された以下の担当地域があります。

担当地域
ニュー ヨーク
ニュー ジャージー
世田谷区

また、特性エンティティ内に特性があります。

特性
プロジェクト管理者
デザイナー
ファイナンシャル アナリスト

組織単位エンティティ:

組織単位
Contoso US
Contoso EU

最後に、リソース エンティティがあります。

リソース リソースの種類 組織単位
Jorge Galt ユーザー Contoso US
Abraham McCormick 取引先担当者 Contoso EU

単一のリソース レコードは、上記のリソースの種類または組織単位のように、単一値の制約をキャプチャするように動作します。 リソースを複数の担当地域レコードまたは特性レコードに関連付ける場合、3 番目のエンティティ、多対多 (N:N) 関連付けを使用してこれらの関連付けを保管する必要があります。

リソース担当地域エンティティを使用して、リソースのために複数の担当地域を関連付けます。

リソース担当地域レコード。

リソース 担当地域
Jorge Galt ニュー ヨーク
Jorge Galt ニュー ジャージー
Abraham McCormick 世田谷区

およびリソース特性エンティティを使用して、リソースのために複数の特性を保管します。

リソースの特性レコード。

リソース 特性
Jorge Galt デザイナー
Abraham McCormick プロジェクト管理者
Abraham McCormick ファイナンシャル アナリスト

リソースと同様に、要件レコードは単一値の制約をキャプチャし、子レコードは複数の値の制約を保管します。

以下は要件エンティティです。

要件 期間 担当地域
ジョブ 1 1 時間 ニュー ヨーク
ジョブ 2 1 時間 世田谷区

要件特性エンティティ。

要件特性レコード。

要件 特性
ジョブ 1 デザイナー
ジョブ 2 プロジェクト管理者
ジョブ 2 ファイナンシャル アナリスト

時々、要件は検索属性としてモデル化された制約を持つ場合があります。一方、リソースは N:N ターブル上に一致属性を保管する場合があります。 たとえば、要件の場合、担当地域制約は担当地域エンティティに対する検索属性です。 要件は作業の要求および作業を実行する担当地域をキャプチャします。 ただし、リソース レコードは多くの担当地域レコードに関連付けることができます。

制約プロパティ バッグ

ユーザーがフィルター パネル内の値を選択して検索ボタンを選択すると、値はリソース一致 API に送信されます。 複数の値を持つ制約の場合、フィルター パネルにはマスター エンティティの担当地域および特性からのデータが表示され、これには制約プロパティ バッグ内で選択した値が含まれます。

以下のものは、リソース一致 API に送信される制約を持つサンプル プロパティ バッグです。

名前 Value
ResourceType ユーザー
Territories ニュー ヨーク
ニュー ジャージー

これにより、リソース一致 APIはニューヨークまたはニュージャージーの担当地域に関連付けられたユーザーの種類のリソースを検索します。

スケジュール アシスタントの場合、制約はまず要件制約取得 API を介して要件レコードから取得されます。 次に、取得された制約はフィルター パネルに入力され、リソース一致 API に送信されます。

要件制約取得 API は要件レコードおよびすべての関連付けられた子制約 (たとえば要件特性) をクエリします。 選択した要件でキャプチャされたすべてのリソース制約を示す、制約プロパティ バッグで応答します。

以下は、要件制約取得 API からのサンプル応答です。

名前 Value
Requirement ジョブ 2
Duration 1 時間
Territories 世田谷区
Characteristics プロジェクト管理者
ファイナンシャル アナリスト

リソース一致 API は入力として制約プロパティ バッグおよび一致リソースのクエリを取得します。 次に、一致リソースはスケジュール ボードまたはスケジュール アシスタント上に表示されます。

リソース一致に使用されるエンティティの概要

  • サンプル マスター エンティティ
    • 担当地域 - 制約として参照
    • 特性 - 制約として参照
    • リソース - 予約に割り当て
    • リソースの担当地域 - リソースを担当地域に関連付け
    • リソースの特性 - リソースを特性に関連付け
  • サンプル トランザクション エンティティ
    • 要件 - 作業および参照用担当地域の要求をキャプチャ
    • 要件特性 - 要件を特性に関連付け

リソース一致フローの概要

  • 手動フィルター処理。 フィルター パネル > リソース一致 API

    1. ユーザーはフィルター パネルに制約を手動で追加します
    2. 制約はリソース一致 API に送信されます
    3. リソースのフィルター リストが表示されます
  • 要件のフィルタ処理。 要件制約取得 API > フィルター パネル > リソース一致 API

    1. あるユーザーは要件レコード空き空間を見つけます (ケジュール ボード内からまたはリボンの予約ボタンから)。
    2. 制約要件制約取得 API を介して取得され、フィルター パネルに表示されます。
    3. 制約はリソース一致 API に送信されます
    4. リソースのフィルター リストが表示されます

ユーザー定義の制約を使用した Universal Resource Scheduling の拡張

Universal Resource Scheduling はユーザー定義のリソース制約を使用して拡張することができます。 制約の拡張は Universal Resource Scheduling に作成したのと同じ動作をし、Dynamics 365 の属性および関連付けとしてモデル化されます。

各手順に必要なコード サンプル付きの詳細な手順は、Universal Resource Scheduling の拡張: 言語によるリソースの検索 - 詳細な手順に説明されています

カスタム制約

「言語」をシナリオの例として使用します。 ある組織は話す言語によってリソースをフィルター処理します。 また、業務のためにその言語が必要とする要件レコード上でキャプチャします。 この制約は組み込みの担当地域制約に似たパターンに従います。 新しいマスター エンティティである「言語」は、リソースが話すことができる異なる言語を保管します。 リソース レコードは多対多関連付けエンティティを介して多くの「言語」に関連付けることができます。 要件エンティティで、新しい 2 つの検索属性 Required Language および Secondary Language を作成します。 必要条件のために使用可能なリソースを検索する際、Required Language または Secondary Language のいずれかに関連付けられたリソースのみが表示されます。

ここで、ユーザー定義の言語制約について説明します。 最初に、新しい言語エンティティがあります。

言語
英語
スペイン語

新しいリソース言語の多対多子エンティティがあります。

リソース 言語
Jorge Galt 英語
Abraham McCormick 英語
Abraham McCormick スペイン語

以下のものは、リソースが話す必要がある、この要件と一致する言語を表す、必須言語と二次言語という 2 つの新しい属性を持つ要件エンティティです。

要件 期間 担当地域 必須言語 二次言語
ジョブ 1 1 時間 ニュー ヨーク 英語 ---
ジョブ 2 1 時間 世田谷区 スペイン語 英語

拡張性ポイント

前述のリソース一致フローに基づき、以下のものは作業するユーザー定義の制約のために変更する必要がある拡張性ポイントです。

  1. 要件制約取得 API

    API 新しい必須言語の属性と二次言語の属性を読み取る必要があるため、ユーザーが要件の空きを見つけるとき新しい制約が取得されます。

  2. フィルター パネル

    ユーザーはリソースの照会用フィルター処理のためにフィルター パネル内の言語レコード一覧から選択できる必要があります。 要件の空きを見つけると、フィルター パネルには言語一覧で事前に選択された要件レコードから必須言語と二次言語を表示する必要があります。

  3. リソース一致 API

    API は入力として新しい言語制約を取得します。選択した言語を話すリソースのみを戻す必要があります。

拡張可能なクエリ

内部的に、要件制約取得 API (上記の #1) およびリソース一致 API (上記の #3) は FetchXML を使用してデータを Dynamics 365 からクエリします。 要件制約取得 API は要件レコードおよびその子制約 (たとえば要件特性など) を取得するために複数のクエリを発行します。リソース一致 API は、入力として渡されたリソース制約に基づき、正しい FetchXML クエリを動的に作成するため、指定した FetchXML 条件に一致するリソース レコードのみが Dynamics 365 から返されます。

拡張可能なリソース一致をサポートするため、Universal Resource Scheduling の 2017 年 7 月の更新プログラムでは、ユニバーサル FetchXML (UFX) が導入されました。 FetchXML に追加される 2 つの重要な機能 UFX は次のとおりです: 1) 複数の結果セット、単一の UFX クエリは複数のエンティティ空の結果を返します。2) 動的 FetchXML クエリ、UFX クエリは入力データに基づき動的に FetchXML を作成することができます。

UFX では、要件レコードおよびすべての子レコード用クエリのために単一のクエリを作成することができます。 要件制約取得 API は、カスタマイズ可能な UFX クエリを実行して要件およびその子制約を取得します。 そのクエリはユーザー定義の制約レコードを取得するためにカスタマイズすることもできます。

要件制約取得 API から返される制約プロパティ バッグは、入力としてリソース一致 API に渡されます。 API はカスタマイズ可能な UFX クエリを実行します。 UFX では、クエリは入力制約を使用して、一致リソースを検索するための正確な FetchXML を動的に作成します。 この UFX クエリも、ユーザー定義の制約に一致するリソースのみを返す適切な FetchXML を作成するために修正することができます。

拡張可能なフィルター レイアウトおよびリソース テンプレート

Universal Resource Scheduling 用 2017 年 7 月の更新プログラムでは、XML レイアウト定義を介したカスタマイズをサポートするためのフィルター パネル (上記の #2) が更新されました。 新しいレイアウトはマスター エンティティからのレコード一覧および一般的な numberdatetime、および checkbox コントロールを表示するドロップダウン コントロールをサポートします。 ユーザー定義の制約エンティティからユーザーがレコードを選択できるように、レイアウトを変更することができます。 Universal Resource Scheduling に付属する制約と同じように、ユーザー定義の制約はリソース一致 API に対して入力として渡されます。

2017 年 7 月の更新プログラムで利用可能になった他のクライアント側ポイントはリソース セルです。 リソース セルはカスタマイズ可能な Handlebars.js テンプレートを介して表示されます。 リソース一致 API からの結果はテンプレートで利用可能になりました。 そのため、リソース一致 API が実行するクエリをカスタマイズすることにより、カスタム データをリソース セルに表示することができます。

各手順に必要なコード サンプル付きの詳細な手順は、Universal Resource Scheduling の拡張: 言語によるリソースの検索 - 詳細な手順に説明されています

追加メモ

  • 現在、スケジュール可能なエンティティがリソース要件ではなく関連する要件グループを使用している場合、フィルター レイアウトは構成できません。

関連項目

ユニバーサル Fetch XML

Universal Resource Scheduling 拡張性リリース ノート