Field サービス組織は、多くの場合、顧客から直接サービス エージェントを通して、作業のスケジュールを立てる必要があります。 予約は通常、企業が利用可能なリソースと仕事の要件に基づいて作成されます。
少なくともDynamics 365 Field Service v8.8.43.51およびUniversal Resource Scheduling v3.12.46.21を使って作業をスケジューリングする場合は、msdyn_SearchResourceAvailability APIを使ってジョブに該当するすべてのリソースを取得し、効率的に作業をスケジューリングできます。 執筆時点では、v3が msdyn_SearchResourceAvailability の最新バージョンであり、ウェブAPI呼び出しをサポートしています。
ヒント
古いバージョンでは廃止された認証方法を使う可能性があるため、最新のAPIを使いましょう。
入力パラメーター
| 件名 | タイプ | プロパティ | Required | 既定 |
|---|---|---|---|---|
| バージョン | String | API のバージョン番号は、呼び出す必要がある API のバージョンを識別します。 これは、major.minor.patch の形式に従います。 要求に完全なバージョン番号を含める必要はありません。
|
可 | -N/A- |
| IsWebApi | ブール値 | スケジュールアシスタントをウェブAPI経由で使うために True に設定してください。 | 可 | -N/A- |
| 要件 | Entity | この属性では、リソースの空き時間を取得するリソース要件を指定します。
msdyn_resourcerequirement タイプのエンティティである必要があります。 要件は、データベースからの既存のレコード、または必要な制約を使用してその場で作成されたレコードにすることができます。 エンティティには、検索に関連するすべての詳細が含まれている必要があります。 このエンティティの@odata.typeはMicrosoft.Dynamics.CRM.msdyn_requirementであるべきです。 次の重要な属性を入力します:
|
可 | -N/A- |
| 設定 | Entity | settings 属性は、取得したリソースをさらにフィルタリングするのに役立ちます。 エンティティバッグで属性として設定を指定してください。 エンティティの種類は関係ありません。 任意のエンティティ論理名を指定できます。 | 可 | -N/A- |
| ResourceSpecification | Entity | エンティティバッグ内の属性として resourceSpecification 属性を定義します。 このエンティティの@odata.typeはMicrosoft.Dynamics.CRM.expandoであるべきです。 |
いいえ | None |
Settings エンティティ
設定エンティティは、Dataverse に存在するエンティティではありません; ただし、スケジュール アシスタント API が結果をフィルターするのに役立つ、次のすべての属性のコレクションです。 したがって、このエンティティの@odata.typeはMicrosoft.Dynamics.CRM.expandoであるべきです。
| 件名 | タイプ | プロパティ | Required | 既定 |
|---|---|---|---|---|
| ConsiderSlotsWithLessThanRequiredCapacity | ブール値 | これを True に設定するのは、リソースのカレンダーで潜在的な利用可能時間帯を計算する際に、必要なキャパシティ (工数) よりも少ない時間帯を考慮する必要がある場合です。 | いいえ | 偽 |
| ConsiderSlotsWithLessThanRequiredDuration | ブール値 | これを True に設定するのは、リソースのカレンダーで潜在的な利用可能時間帯を計算する際に、必要な期間よりも短い時間帯を考慮する必要がある場合です。 | いいえ | 偽 |
| ConsiderSlotsWithOverlappingBooking | ブール値 | これを True に設定するのは、リソースのカレンダーで潜在的な利用可能時間帯を計算する際に、予約が重複している時間帯を考慮する必要がある場合です。 | いいえ | 偽 |
| ConsiderSlotsWithProposedBookings | ブール値 | これを True に設定するのは、リソースのカレンダーで潜在的な利用可能時間帯を計算する際に、提案済み予約の時間帯を考慮する必要がある場合です。 | いいえ | 偽 |
| ConsiderAppointments | ブール値 | これを検索リソースの可用性 API に対して True に設定して、既存の Dataverse の予定をリソース上の予約として、組織およびリソース レベルの設定が設定された として尊重します。 「忙しい」または「完了」のステータスのアポイントは、スケジューリング業務の対象外とみなされます。 | いいえ | 偽 |
| ConsiderTravelTime | ブール値 | これを True に設定するのは、リソースのカレンダーで潜在的な時間帯を計算する際に、移動時間を考慮する必要がある場合です。 | いいえ | 真 |
| リソース特徴を除外する | ブール値 | 応答するタイムスロットのリソース特性を除外するためにこれを True に設定してください。 | いいえ | 偽 |
| MovePastStartDateToCurrentDate | ブール値 | これを True に設定すると、過去の開始日が現在の日付に移動します。 | いいえ | 偽 |
| UseRealTimeResourceLocation | ブール値 | これを True に設定するのは、リソースのカレンダーで潜在的な時間帯を計算する際に、リソースのリアルタイムの場所を使用する必要がある場合です。 | いいえ | 偽 |
| SortOrder | EntityCollection | エンティティ コレクションを使用して並べ替え順序を指定します。 コレクション内の各エンティティは 1 つの並べ替え基準を表し、応答から Resources のみを並べ替えることができ、 TimeSlotsは並べ替えられません。 このエンティティの@odata.typeはMicrosoft.Dynamics.CRM.expandoであるべきです。 入力する必要のある属性は次のとおりです:
|
いいえ | None |
| MaxResourceTravelRadius | Entity | この属性は、エンティティで定義できる最大値を指定します。 このエンティティの@odata.typeはMicrosoft.Dynamics.CRM.expandoであるべきです。 入力する必要のある属性は次のとおりです:
|
いいえ | 0キロ。 その場合、オンサイト要件のためのリソースは返されません。 |
| MaxNumberOfResourcesToEvaluate | 整数 | この属性は、要求で考慮されるリソースの数の制限を定義します。 | いいえ | この属性がAPI呼び出しに含まれていない場合、システムは 有効エンティティの編集設定で定義されたスデューラブルエンティティ定義からリソース可用性リトリーバルリトリーブル制限を使用します。 呼び出しに含まれる場合は、定義されたリソース可用性取得制限が上書きされます。 |
| ConsiderOutlookSchedules | ブール値 | Outlookのスケジュールを考慮する場合は、これをTrueに設定してください。 バージョン3.1.0以降のみで利用可能。 | いいえ | 偽 |
リソース仕様エンティティ
| 件名 | タイプ | プロパティ | Required | 既定 |
|---|---|---|---|---|
| ResourceTypes | EntityCollection | この属性は、要件に必要なリソースの種類を指定します。 エンティティコレクションを使ってこの属性を指定します。 コレクション内の各エンティティは、1 つの予約可能リソースの種類を表します。 このエンティティの@odata.typeはMicrosoft.Dynamics.CRM.msdyn_resourceTypeであるべきです。 この属性は必須です:
|
いいえ | スタッフを除くすべてのリソースの種類 |
| PreferredResources | EntityCollection | この属性は、要件に対して優先されるリソースを指定します。 このエンティティコレクションにリソースを追加し、利用可能なリソースのリストの上位に位置するようにしましょう。 エンティティコレクションに含まれていないリソースもリストに含まれますが、それは優先リソースの後にのみです。 | いいえ | None |
| RestrictedResources | EntityCollection | この属性は、要件に対して考慮されないリソースを指定します。 このリソースのすべてのタイムスロットは、このAPIの結果リストから除外されます。 | いいえ | None |
| MustChooseFromResources | EntityCollection | この属性は、使用可能なリソースの一覧に含めることができるリソースのみを指定します。 出力リストから他のすべての結果を除外します。 | ||
| 制約 | Entity | この属性は、使用可能なリソースの取得に適用する必要がある追加の制約を指定します。 | いいえ | None |
| RetrieveResourcesQueryId | GUID | リソース取得クエリの ID です。 | いいえ | 既定のリソース取得クエリ ID です。 |
| BookedResourceId | GUID | この属性は、要件に対して現在予約されているリソースを指定します。 | いいえ | None |
ヒント
Preferred、Restricted、MustChooseFrom リソース属性を指定するために、Bookable resource entityのエンティティコレクションを使いましょう。 コレクション内の各エンティティは、 1つのPreferred、 Restricted、または MustChooseFrom リソースを表します。 この属性は彼らに必要です:
-
価値 (Guid): 優先、 制限、 またはMustChooseFrom リソースの予約可能なリソースID。 このエンティティの
@odata.typeはMicrosoft.Dynamics.CRM.msdyn_bookableresourceであるべきです。
制約
このエンティティの属性を通じて追加の制約を指定してください。 エンティティの種類は関係ありません。 任意のエンティティ論理名を指定できます。
スケジュール ボード設定の リソース取得クエリ を確認して、適用される可能性のある制約を特定します。 既定では、次のものが含まれます:
| 件名 | タイプ | プロパティ |
|---|---|---|
| 特性 | EntityCollection | 資格のあるリソースが持つべき特徴の集合体です。 各エントリには特徴IDの characteristic が含まれています。 オプションとして、特定の習熟レベルでリソースを絞り込むために、評価値ID付きの ratingvalue を含めることも可能です。 |
| ロール | EntityCollection | 要件を満たすリソースに必要なロール ID のコレクション。 |
| 担当地域 | EntityCollection | 担当地域 ID のコレクション。 要件を満たすリソースは、いずれかの担当地域に割り当てる必要があります。 |
| UnspecifiedTerritory | ブール値 | 担当地域制約と組み合わせて、要件を満たすリソースを担当地域の 1 つに割り当てるか、担当地域をまったく割り当てないように指定します。 |
| OrganizationalUnits | EntityCollection | 組織単位 ID のコレクション。 要件を満たすリソースは、指定された組織単位の 1 つのメンバーである必要があります。 |
| Teams | EntityCollection | チーム ID のコレクション。 要件を満たすリソースは、チームの 1 つに属している必要があります (リソースの種類がシステム ユーザーであることを意味します)。 |
| BusinessUnits | EntityCollection | 事業部門のIDのコレクションです。 要件を満たすリソースは、部署の 1 つに属している必要があります (リソースがシステム ユーザーであることを意味します)。 |
出力パラメーター
最上位レベルでは、出力に次の 4 つのパラメーターがあります。 結果は、エンティティ コレクションとエンティティで表されます。 応答には、ここで説明するすべての属性が null 値として含まれない場合や、応答から NA 値が省略されない場合があります。 属性にアクセスする前に、必ず属性のプレゼンスを確認してください。
| 件名 | タイプ | プロパティ |
|---|---|---|
| TimeSlots | EntityCollection | 時間帯の結果のコレクション。 詳細については、「 タイムスロットエンティティ 」セクションを参照してください。 |
| リソース | EntityCollection | リソースの結果のコレクション。 リソースは、次の属性を持つエンティティのコレクションとして表されます:
|
| 関連 | Entity | 関連リソースは、要求された要件に直接適格ではないが関連しているリソースとリソースのタイムスロットを表します。 たとえば、スタッフ メンバーが要件を満たす場合、そのスタッフの他のメンバーは関連する結果になります。
|
| 例外 | Entity | この属性には、発生した例外に関する情報と、リソース検索が切り捨てられたかどうかとどこで切り捨てられたかに関する情報が含まれます。
|
時間帯エンティティ
| 件名 | タイプ | プロパティ |
|---|---|---|
| ID | GUID | 時間帯の一意識別子 |
| タイプ | 整数 | 時間帯の種類。 次のいずれかの値を指定できます。
|
| StartTime | DateTime | 時間帯の開始時刻。 もしその要件に旅行がある場合、この時間が移動開始時刻となります。 もしそうでなければ、この時間が要件の開始時間となります。 |
| ArrivalTime | DateTime | 時間帯の到着時刻。 要件のための移動がある場合、この時間が移動完了後の要件開始時刻となります。 そうでない場合は、時間帯の開始時刻と同じです。 |
| EndTime | DateTime | 時間帯の終了時刻。 |
| 工数 | 整数 | 要件を実行するためのリソースの工数またはキャパシティ。 |
| ResourceRequirement | EntityReference | 時間帯が取得されるリソース要件。 |
| Potential | ブール値 | 時間帯が要求された要件を満たす可能性があるかどうかを示すブール値。 |
| IsDuplicate | ブール値 | 時間帯が重複しているかどうかを示すブール値。 |
| AllowOverlapping | ブール値 | 重複が許可されているかどうかを示すブール値。 |
| リソース | Entity | 時間帯が属するリソース。 詳細については、時間帯リソース を参照してください。 |
| 場所 | Entity | 位置情報には 3 つの属性があります:
|
| 移動 | Entity | このエンティティには、時間帯の移動時間と距離の詳細が含まれています。 属性は次のとおりです:
|
| 次 | Entity | このエンティティには、次の時間帯予約までの移動時間と距離に関する詳細が含まれています。
|
| 可用性 | Entity | 時間帯の詳細な空き時間情報。 このエンティティは時間群と共に使用されます。
|
| TimeGroup | Entity | 時間グループに関する詳細。
|
チップ
APIを使って予約を作成する際は、表に記載されている Potential フィールドを使ってください。 このフィールドを使用しないと、予約が重複したり不適切になる可能性があります。
時間帯リソース
| 件名 | タイプ | プロパティ |
|---|---|---|
| リソース | EntityReference | 予約可能リソースへのエンティティ参照。 |
| リソース グループ | EntityReference | 予約可能リソース グループへのエンティティ参照。 |
| BusinessUnit | EntityReference | 部署へのエンティティ参照。 |
| OrganizationalUnit | EntityReference | 組織単位へのエンティティ参照。 |
| ResourceType | 整数 | リソースの種類。 可能な値については、BookableResource エンティティの ResourceType 属性を参照してください。 |
| PoolId | GUID | 時間帯で、リソースがメンバーであるプールの ID。 |
| CrewId | GUID | 時間帯で、クルーがメンバーであるプールの ID。 |
| 特性 | EntityCollection | 予約可能リソースの特性。 コレクション内の各エンティティには、特性と評価情報を持つエンティティが含まれています。
|
| HasStartLocation | ブール値 | リソースに開始場所があるかどうかを示すブール値。 |
| HasEndLocation | ブール値 | リソースに終了場所があるかどうかを示すブール値。 |
| String | リソースのメール アドレス。 | |
| 電話 | String | リソースの電話番号。 |
| ImagePath | String | リソースの画像へのパス。 |
| CalendarId | GUID | リソースのカレンダー ID。 |
使用例
この例では、スケジュールアシスタントAPIのバージョン3を使用し、ウェブAPI呼び出しをサポートし、60分の要件を適用します。
settings属性を使うことで、結果をフィルタリングします。 最終結果として、2種類のリソースタイプを考えます:1と2(つまりジェネリックとコンタクト)。
{
"Version": "4",
"IsWebApi": true,
"Requirement": {
"msdyn_fromdate": "2021-07-14T00:00:00Z",
"msdyn_todate": "2021-07-15T23:59:00Z",
"msdyn_remainingduration": 60,
"msdyn_duration": 60,
"msdyn_TimeGroup@odata.bind": "/msdyn_timegroups(c3dc79ea-d12f-ee11-9cc9-000d3a745a58)",
"@odata.type": "Microsoft.Dynamics.CRM.msdyn_resourcerequirement"
},
"Settings": {
"ConsiderSlotsWithProposedBookings": false,
"MovePastStartDateToCurrentDate": true,
"@odata.type": "Microsoft.Dynamics.CRM.expando"
},
"ResourceSpecification": {
"@odata.type": "Microsoft.Dynamics.CRM.expando",
"ResourceTypes@odata.type": "Collection(Microsoft.Dynamics.CRM.expando)",
"ResourceTypes": [
{
"@odata.type": "Microsoft.Dynamics.CRM.expando",
"value": "1"
},
{
"@odata.type": "Microsoft.Dynamics.CRM.expando",
"value": "2"
}
],
"Constraints": {
"@odata.type": "Microsoft.Dynamics.CRM.expando",
"Characteristics@odata.type": "Collection(Microsoft.Dynamics.CRM.expando)",
"Characteristics": [
{
"@odata.type": "Microsoft.Dynamics.CRM.expando",
"characteristic": {
"@odata.type": "Microsoft.Dynamics.CRM.expando",
"value": "67387f9f-12e2-ec11-bb43-000d3aed25f7"
},
"ratingvalue": {
"@odata.type": "Microsoft.Dynamics.CRM.expando",
"value": "a1b2c3d4-5678-90ab-cdef-1234567890ab"
}
}
],
"Territories@odata.type": "Collection(Microsoft.Dynamics.CRM.expando)",
"Territories": [
{
"@odata.type": "Microsoft.Dynamics.CRM.expando",
"value": "cc19f004-4483-ee11-8178-000d3a5c32c3"
}
],
"Roles@odata.type": "Collection(Microsoft.Dynamics.CRM.expando)",
"Roles": [
{
"@odata.type": "Microsoft.Dynamics.CRM.expando",
"value": "76998e42-744c-f011-877d-6045bdfb899e"
}
]
}
}
}
次の例は、エンティティ コレクションの適切な使用法を示しています。 この場合、 MustChooseFromResourcesを指定します。
{
"Version": "4",
"IsWebApi": true,
"Requirement": {
"msdyn_fromdate": "2021-07-14T00:00:00Z",
"msdyn_todate": "2021-07-15T23:59:00Z",
"msdyn_remainingduration": 60,
"msdyn_duration": 60,
"msdyn_latitude": 47.64807,
"msdyn_longitude": -122.41249,
"msdyn_worklocation": 690970000,
"msdyn_TimeGroup@odata.bind": "/msdyn_timegroups(c3dc79ea-d12f-ee11-9cc9-000d3a745a58)",
"@odata.type": "Microsoft.Dynamics.CRM.msdyn_resourcerequirement"
},
"Settings": {
"ConsiderSlotsWithProposedBookings": false,
"MovePastStartDateToCurrentDate": true,
"MaxNumberOfResourcesToEvaluate":500,
"ConsiderTravelTime": true,
"MaxResourceTravelRadius": {
"Value": 20,
"Unit" : 192350000,
"@odata.type": "Microsoft.Dynamics.CRM.expando"
},
"@odata.type": "Microsoft.Dynamics.CRM.expando"
},
"ResourceSpecification": {
"@odata.type": "Microsoft.Dynamics.CRM.expando",
"ResourceTypes@odata.type": "Collection(Microsoft.Dynamics.CRM.expando)",
"ResourceTypes": [
{
"@odata.type": "Microsoft.Dynamics.CRM.expando",
"value": "1"
},
{
"@odata.type": "Microsoft.Dynamics.CRM.expando",
"value": "2"
}
],
"MustChooseFromResources@odata.type": "Collection(Microsoft.Dynamics.CRM.expando)",
"MustChooseFromResources": [
{
"@odata.type": "Microsoft.Dynamics.CRM.expando",
"value": "2145a982-f718-ed11-b83e-0022482d79c8"
}
],
"Constraints": {
"@odata.type": "Microsoft.Dynamics.CRM.expando",
"Characteristics@odata.type": "Collection(Microsoft.Dynamics.CRM.expando)",
"Characteristics": [
{
"@odata.type": "Microsoft.Dynamics.CRM.expando",
"characteristic": {
"@odata.type": "Microsoft.Dynamics.CRM.expando",
"value": "67387f9f-12e2-ec11-bb43-000d3aed25f7"
},
"ratingvalue": {
"@odata.type": "Microsoft.Dynamics.CRM.expando",
"value": "a1b2c3d4-5678-90ab-cdef-1234567890ab"
}
}
],
"Territories@odata.type": "Collection(Microsoft.Dynamics.CRM.expando)",
"Territories": [
{
"@odata.type": "Microsoft.Dynamics.CRM.expando",
"value": "cc19f004-4483-ee11-8178-000d3a5c32c3"
}
]
}
}
}