현장 서비스 조직은 종종 고객이 직접 서비스 에이전트를 통해 작업을 예약해야 합니다. 예약은 일반적으로 회사에서 사용할 수 있는 리소스와 작업 요구 사항에 따라 만들어집니다.
작업 일정 Dynamics 365 Field Service v8.8.43.51과 Universal Resource Scheduling v3.12.46.21을 사용할 때, msdyn_SearchResourceAvailability API를 사용해 작업에 필요한 모든 적격 자원을 가져와 효율적으로 작업을 일정화하세요. 작성 시점에서 v3는 최신 버전 msdyn_SearchResourceAvailability 이며 웹 API 호출을 지원합니다.
메모
최신 API를 사용하세요. 이전 버전은 더 이상 지원되지 않는 인증 방식을 사용할 수 있습니다.
입력 매개 변수
| Name | 유형 | Description | 필수 | Default |
|---|---|---|---|---|
| 버전 | 문자열 | API의 버전 번호는 호출해야 하는 API의 버전을 식별합니다. major.minor.patch 형식을 따릅니다. 요청에 전체 버전 번호가 포함될 필요는 없습니다.
|
Yes | -사용 불가- |
| IsWebApi | Boolean | 웹 API를 통해 일정 어시스턴트를 사용하려면 True 로 설정하세요. | Yes | -사용 불가- |
| 요구 사항 | 엔터티 | 이 특성은 리소스 가용성이 검색되는 리소스 요구 사항을 지정합니다.
msdyn_resourcerequirement 유형 엔터티일 것으로 예상됩니다. 요구 사항은 데이터베이스의 기존 레코드이거나 필요한 제약 조건으로 즉시 생성된 레코드일 수 있습니다. 엔터티에는 검색과 관련된 모든 세부 사항이 포함되어야 합니다. 이 엔터티의 @odata.type은 Microsoft.Dynamics.CRM.msdyn_requirement이어야 합니다. 채워야 할 몇 가지 중요한 특성은 다음과 같습니다.
|
Yes | -사용 불가- |
| 설정 | 엔터티 | 설정 특성은 검색된 리소스를 추가로 필터링하는 데 도움이 됩니다. 엔티티 백에서 속성을 설정하세요. 엔터티의 유형은 중요하지 않습니다. 모든 엔터티 논리적 이름을 지정할 수 있습니다. | Yes | -사용 불가- |
| ResourceSpecification | 엔터티 | 속성을 엔티티 백 내 속성으로 정의하세요 resourceSpecification . 이 엔터티의 @odata.type은 Microsoft.Dynamics.CRM.expando이어야 합니다. |
No | 없음 |
설정 엔터티
설정 엔터티는 Dataverse에 존재하는 엔터티가 아닙니다. 그러나 일정 도우미 API가 결과를 필터링하는 데 도움이 되는 것은 다음과 같은 모든 특성의 모음입니다. 따라서 이 엔터티의 @odata.type는 Microsoft.Dynamics.CRM.expando가 되어야 합니다.
| Name | 유형 | Description | 필수 | Default |
|---|---|---|---|---|
| ConsiderSlotsWithLessThanRequiredCapacity | Boolean | 리소스 일정에서 사용 가능한 잠재적 시간 슬롯을 계산할 때 필요한 생산 능력(노력)보다 적은 시간 슬롯을 고려해야 하는 경우 이를True로 설정합니다. | No | 거짓 |
| ConsiderSlotsWithLessThanRequiredDuration | Boolean | 리소스 일정에서 사용 가능한 잠재적 시간 슬롯을 계산할 때 필요한 기간보다 적은 시간 슬롯을 고려해야 하는 경우 이를True로 설정합니다. | No | 거짓 |
| ConsiderSlotsWithOverlappingBooking | Boolean | 리소스 일정에서 사용 가능한 잠재적 시간 슬롯을 계산할 때 예약이 중복되는 시간 간격을 고려해야 하는 경우 이를True로 설정합니다. | No | 거짓 |
| ConsiderSlotsWithProposedBookings | Boolean | 리소스 일정에서 사용 가능한 잠재적 시간 슬롯을 계산할 때 제안된 예약이 있는 시간 슬롯을 고려해야 하는 경우 이를True로 설정합니다. | No | 거짓 |
| ConsiderAppointments | Boolean | 조직 및 리소스 수준 설정이 설정된 경우 리소스에 대한 예약으로 기존 Dataverse 약속을 존중하도록 검색 리소스 가용성 API에 대해 이것을 True로 설정합니다. 상태가 '사용 중' 또는 '완료됨'인 약속은 운영 일정 조정에 불가로 간주됩니다. | No | 거짓 |
| ConsiderTravelTime | Boolean | 리소스 일정에서 잠재적 시간 슬롯을 계산할 때 이동 시간을 고려해야 하는 경우 이를True로 설정합니다. | No | 진실 |
| 자원특성 제외 | Boolean | 응답 시간 슬롯의 자원 특성을 제외하려면 이를 True 로 설정하세요. | No | 거짓 |
| MovePastStartDateToCurrentDate | Boolean | 과거의 시작 날짜를 현재 날짜로 이동하려면True로 설정하십시오. | No | 거짓 |
| UseRealTimeResourceLocation | Boolean | 리소스 일정에서 잠재적인 시간 슬롯을 계산할 때 자원의 실시간 위치를 사용해야 하는 경우 이를True로 설정하십시오. | No | 거짓 |
| SortOrder | EntityCollection | 엔터티 컬렉션을 사용하여 정렬 순서를 지정합니다. 컬렉션의 각 엔터티는 하나의 정렬 기준을 나타내며 응답에서만 정렬 Resources 할 수 있지만 정렬할 수는 없습니다 TimeSlots. 이 엔터티의 @odata.type은 Microsoft.Dynamics.CRM.expando이어야 합니다. 다음은 채워야 하는 특성입니다.
|
No | 없음 |
| MaxResourceTravelRadius | 엔터티 | 이 특성은 최대값을 지정하며 엔터티에서 정의할 수 있습니다. 이 엔터티의 @odata.type은 Microsoft.Dynamics.CRM.expando이어야 합니다. 다음은 채워야 하는 특성입니다.
|
No | 0km. 이 경우 현장 요구 사항에 대한 리소스가 반환되지 않습니다. |
| MaxNumberOfResourcesToEvaluate | 정수 | 이 특성은 요청에 대해 고려되는 리소스 수에 대한 제한을 정의합니다. | No | 이 속성이 API 호출에 포함되지 않으면, 시스템은 활성화된 엔티티에 대해 편집 설정에 정의된 예약 가능한 엔티티 정의에서 자원 가용성 검색 제한을 사용합니다. 호출에 포함된 경우 정의된 리소스 가용성 검색 제한을 덮어씁니다. |
| ConsiderOutlookSchedules | Boolean | Outlook 일정을 고려할 경우 True로 설정하세요. 3.1.0 버전 이상에서만 이용 가능합니다. | No | 거짓 |
리소스 사양 엔터티
| Name | 유형 | Description | 필수 | Default |
|---|---|---|---|---|
| ResourceTypes | EntityCollection | 이 특성은 요구 사항에 필요한 리소스 유형을 지정합니다. 이 속성을 지정하기 위해 엔터티 컬렉션을 사용하세요. 컬렉션의 각 엔터티는 하나의 예약 가능한 리소스 유형을 나타냅니다. 이 엔터티의 @odata.type은 Microsoft.Dynamics.CRM.msdyn_resourceType이어야 합니다. 이 속성은 다음과 같이 필요합니다:
|
No | 팀을 제외한 모든 자원 유형 |
| PreferredResources | EntityCollection | 이 특성은 요구 사항에 대해 선호하는 리소스를 지정합니다. 이 엔터티 컬렉션에 자원을 추가하여 사용 가능한 자원 목록의 최상단에 위치하도록 하세요. 엔티티 컬렉션에 속하지 않은 자원도 목록에 포함되지만, 선호하는 자원 다음에만 있습니다. | No | 없음 |
| RestrictedResources | EntityCollection | 이 특성은 요구 사항에 대해 고려해서는 안 되는 리소스를 지정합니다. 이 자원의 모든 타임슬롯은 이 API의 결과 목록에서 필터링됩니다. | No | 없음 |
| MustChooseFromResources | EntityCollection | 이 특성은 사용 가능한 리소스 목록에 있을 수 있는 유일한 리소스를 지정합니다. 출력 목록에서 다른 모든 결과를 필터링합니다. | ||
| 제약 조건 | 엔터티 | 이 특성은 사용 가능한 리소스 검색에 적용해야 하는 추가 제약 조건을 지정합니다. | No | 없음 |
| RetrieveResourcesQueryId | GUID | 검색 리소스 쿼리의 ID입니다. | No | 기본 검색 리소스 쿼리 ID입니다. |
| BookedResourceId | GUID | 이 특성은 요구 사항에 대해 현재 예약된 리소스를 지정합니다. | No | 없음 |
메모
Preferred, Restricted, MustChooseFrom 자원 속성을 지정하기 위해 예약 가능한 자원 엔티티 집합을 사용하세요. 컬렉션 내 각 엔터티는 하나의 선호(Preferred), 제한(Restricted), 또는 MustChooseFrom 자원을 나타냅니다. 이 속성은 그들에게 필요합니다:
-
가치 (가이드): 선호,제한,또는 MustChooseFrom 자원의 예약 가능한 자원 ID. 이 엔터티의
@odata.type은Microsoft.Dynamics.CRM.msdyn_bookableresource이어야 합니다.
제약 조건
이 엔터티에서 속성을 통해 추가 제약 조건을 지정하세요. 엔터티의 유형은 중요하지 않습니다. 모든 엔터티 논리적 이름을 지정할 수 있습니다.
일정 게시판 설정에서 검색 리소스 쿼리를 검토하여 적용할 수 있는 제약 조건을 식별합니다. 기본적으로 다음이 포함됩니다.
| Name | 유형 | Description |
|---|---|---|
| 특성 | EntityCollection | 자격을 갖춘 자원이 반드시 갖추어야 할 특성들의 집합입니다. 각 항목에는 특성 ID가 포함된 a characteristic 가 포함되어 있습니다. 선택적으로, 특정 숙련도 수준으로 자원을 필터링하기 위해 등급 값 ID와 함께 a를 ratingvalue 포함할 수 있습니다. |
| 역할 | EntityCollection | 자격을 갖춘 리소스가 가져야 하는 역할 ID의 컬렉션입니다. |
| 지역 | EntityCollection | 영역 ID의 컬렉션입니다. 자격을 갖춘 리소스는 영역 중 하나에 할당되어야 합니다. |
| UnspecifiedTerritory | Boolean | 영역 제약 조건과 함께 자격을 갖춘 리소스가 영역 중 하나에 할당되거나 영역이 전혀 할당되지 않도록 지정합니다. |
| OrganizationalUnits | EntityCollection | 조직 구성 단위 ID의 컬렉션. 자격을 갖춘 리소스는 지정된 조직 구성 단위 중 하나의 구성원이어야 합니다. |
| 팀 | EntityCollection | 팀 ID의 컬렉션입니다. 자격을 갖춘 리소스는 팀 중 하나에 속해야 합니다(리소스 유형이 시스템 사용자임을 의미). |
| BusinessUnits | EntityCollection | 사업부 ID 모음. 자격을 갖춘 리소스는 사업부 중 하나에 속해야 합니다(리소스가 시스템 사용자임을 의미). |
출력 매개 변수
가장 높은 수준에서 출력에는 다음 네 가지 매개변수가 있습니다. 결과는 엔터티 컬렉션 및 엔터티에 표시됩니다. 응답에는 null 값으로 설명된 모든 특성이 포함되지 않거나 응답에서 NA 값이 생략되지 않을 수 있습니다. 액세스를 시도하기 전에 항상 특성이 있는지 확인하십시오.
| Name | 유형 | Description |
|---|---|---|
| TimeSlots | EntityCollection | 시간 슬롯 결과의 컬렉션입니다. 자세한 내용은 시간 슬롯 엔터티 섹션을 참조하세요. |
| Resources | EntityCollection | 리소스 결과의 컬렉션입니다. 리소스는 다음 특성을 가진 엔터티 컬렉션으로 표시됩니다.
|
| 관련 | 엔터티 | 관련 리소스는 요청된 요구 사항에 대해 직접적으로 자격을 갖춘 것은 아니지만 관련이 있는 리소스 및 리소스의 시간 슬롯을 나타냅니다. 예를 들어, 팀이 요구 사항에 대한 자격이 있는 경우 해당 팀의 다른 구성원은 관련 결과가 됩니다.
|
| 예외 | 엔터티 | 이 특성에는 발생한 예외에 대한 정보와 리소스 검색이 잘렸는지 여부와 위치에 대한 정보가 포함됩니다.
|
시간 슬롯 엔터티
| Name | 유형 | Description |
|---|---|---|
| ID | GUID | 시간 슬롯에 대한 고유 식별자입니다. |
| 유형 | 정수 | 시간대의 종류. 다음 값 중 하나일 수 있습니다.
|
| StartTime | 날짜/시간 | 시간 슬롯의 시작 시간입니다. 만약 요구사항에 대한 이동이 있다면, 이 시간이 여행 시작 시간입니다. 그렇지 않으면 이 시간이 요구사항 시작 시간입니다. |
| ArrivalTime | 날짜/시간 | 시간 슬롯의 도착 시간입니다. 만약 요구사항에 대한 이동이 있다면, 이 시간은 이동이 완료된 후 요구 사항 시작 시간입니다. 그렇지 않은 경우 타임 슬롯의 시작 시간과 동일합니다. |
| EndTime | 날짜/시간 | 시간 슬롯의 종료 시간입니다. |
| Effort | 정수 | 요구 사항을 수행하기 위한 리소스의 노력 또는 용량입니다. |
| ResourceRequirement | EntityReference | 시간 슬롯이 검색되는 리소스 요구 사항입니다. |
| 가능성 | Boolean | 시간 슬롯이 요청된 요구 사항을 충족할 가능성이 있는지 여부를 나타내는 부울 값입니다. |
| IsDuplicate | Boolean | 시간 슬롯이 중복인지 여부를 나타내는 부울 값입니다. |
| AllowOverlapping | Boolean | 중복 허용 여부를 나타내는 부울 값입니다. |
| Resource | 엔터티 | 시간 슬롯이 속한 리소스입니다. 자세한 내용은 시간 슬롯 리소스를 참조하십시오. |
| Location | 엔터티 | 위치에는 세 가지 특성이 있습니다.
|
| 여행 | 엔터티 | 이 엔터티에는 시간 슬롯에 대한 이동 시간 및 거리 정보에 대한 세부 정보가 포함됩니다. 다음과 같은 특성이 있습니다.
|
| 다음 | 엔터티 | 이 엔터티에는 다음 시간 슬롯 예약까지의 이동 시간 및 거리에 대한 세부 정보가 포함됩니다.
|
| 구매 가능 여부 | 엔터티 | 시간 슬롯에 대한 자세한 가용성 정보입니다. 이 엔터티는 시간 그룹과 함께 사용됩니다.
|
| TimeGroup | 엔터티 | 시간 그룹에 대한 세부정보입니다.
|
팁 (조언)
API를 사용해 예약을 생성할 때는 표에 설명된 잠재력 필드를 사용하세요. 해당 필드를 사용하지 않으면 예약이 중복되거나 부적절할 수 있습니다.
시간 슬롯 리소스
| Name | 유형 | Description |
|---|---|---|
| Resource | EntityReference | 예약 가능 리소스에 대한 엔터티 참조. |
| ResourceGroup | EntityReference | 예약 가능 리소스 그룹에 대한 엔터티 참조. |
| BusinessUnit | EntityReference | 사업부에 대한 엔터티 참조입니다. |
| OrganizationalUnit | EntityReference | 조직 구성 단위에 대한 엔터티 참조. |
| 리소스 유형 | 정수 | 리소스 종류입니다. 가능한 값은 BookableResource 엔터티의 ResourceType 특성을 참조하십시오. |
| PoolId | GUID | 시간 슬롯 동안 리소스가 구성원인 풀의 ID입니다. |
| CrewId | GUID | 시간 슬롯 동안 리소스가 구성원인 팀의 ID입니다. |
| 특성 | EntityCollection | 예약 가능한 리소스 특징 컬렉션의 각 엔터티에는 특징 및 등급 정보가 있는 엔터티가 포함됩니다.
|
| HasStartLocation | Boolean | 리소스에 시작 위치가 있는지 여부를 나타내는 부울 값입니다. |
| HasEndLocation | Boolean | 리소스에 종료 위치가 있는지 여부를 나타내는 부울 값입니다. |
| 이메일 | 문자열 | 리소스의 이메일 주소. |
| 전화 | 문자열 | 리소스의 전화 번호. |
| ImagePath | 문자열 | 리소스 이미지의 경로. |
| CalendarId | GUID | 리소스의 일정 ID입니다. |
예시
이 예시에서는 웹 API 호출을 지원하는 스케줄 어시스턴트 API 버전 3을 60분 동안 요구하는 요구사항을 사용합니다. 속성을 사용하면 settings 결과를 필터링할 수 있습니다. 최종 결과로 두 가지 자원 유형을 고려합니다: 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"
}
]
}
}
}