URS Overview
URS Overview
Schedule anything in Dynamics 365 using Universal Resource Scheduling (URS). You can enable scheduling for any
entity in Dynamics 365 Sales, Field Service, Customer Service, and Project Service Automation, including custom
entities.
For organizations that use:
Dynamics 365 Field Service, you can use scheduling tools to assign work orders to the closest field
technicians in the area. More information: Dynamics 365 Field Service Help
Dynamics 365 Customer Service, you can use scheduling tools to book cases to customer service reps in the
right department and time zone. More information: Dynamics 365 Customer Service - Service Scheduling
Dynamics 365 Project Service Automation, you can use scheduling tools to staff projects with consultants
who have availability and the appropriate skillset. More information: Dynamics 365 Project Service
Automation Help
Prerequisites
Before you can use Universal Resource Scheduling, make sure you have:
Dynamics 365 Field Service, Project Service, or Customer Service.
A license for Resource Scheduling. More information: Onboard your organization and users to Dynamics
365 (online)
User credentials with the Universal Resource Scheduling security role, in order to manage the solution once
it has been deployed.
NOTE
If you already have relationships created then you can select form an existing relationship.
6. Click Publish Customization .
7. On the BOOKING SETUP METADATA: INFORMATION form, use the tooltips to edit the default opens.
NOTE
To update the Booking Status Field Logical Name, you will first need to customize the system to add additional
statuses. More information: Customize your Dynamics 365 system - define status reasons
In attribute settings sections field, can be mapped from entity that was enabled for scheduling to fields on booking
requirement. For example, from Date, to Date, Territory, Duration and others.
Schedule something
Step 1: Create a resource requirement
1. From the main menu, click Sales , Ser vice , or Marketing .
2. Choose an entity that has scheduling turned on. For example, let’s say it’s turned on for the Leads entity. In
this case, from the main menu you would choose Marketing > Leads .
3. From the list of leads choose an existing lead.
4. When the form opens, go to the sub-grid menu, and click Resource Requirement .
5. Under the Resource Requirement Associated View , click New .
6. On the Resource Requirement form, use the tooltips to fill in the inform required information.
7. When you’re done, click Save .
A plugin runs and checks the relationships and automatically sets the booking set-up metadata relationship
appropriately.
Step 2: Schedule the booking requirement
To learn more about the schedule board, Configure the schedule board.
There a few different ways to schedule a booking requirement:
Option 1 : Right click on an unscheduled booking and find available resources.
1. From the main menu, click Resource Scheduling > Schedule Board .
2. From the Booking Requirement list, right click on an unscheduled booking and choose one of the
following:
Choose Find availability - Current Resources to find available resource from the list of resources
on the schedule board.
-Or-
Choose Find availability -Current Resources , to find available resource from resources in the
system.
NOTE
When you do this, the filters will show the options for the selected booking requirement. If you can't find a
available resource for the book, try adjusting the filters.
3. When you see the available slot right click on the time slot on the schedule board and choose Book
Here . Or, drag and drop the booking requirement to the available time slot.
Option 2 : Drag an unscheduled booking requirement from list view to the schedule board.
1. From the main menu, click Resource Scheduling > Schedule Board .
2. Select an unscheduled booking requirement from the list at the bottom.
3. Drag the item to an available resource/time slot on the schedule board.
Option 3 : Schedule a booking requirement form the entity form.
1. From the main menu, click Sales , Ser vice , or Marketing .
2. Choose and entity that as scheduling turned on.
For example, let’s say it’s turn on for the Leads entity. In this case, from the main menu you would
choose Marketing > Leads .
3. From the list of leads, choose the lead that you want to schedule a booking for.
4. When the lead form opens, on the command bar, click Book .
5. Use the schedule assistant to book the requirement.
See also
Install Dynamics 365 Field Service
Install Dynamics 365 Project Service Automation
Overview of the Universal Resource Scheduling
schedule assistant
6/18/2020 • 5 minutes to read • Edit Online
NOTE
In this article, we take a high-level tour of the schedule assistant. For a more in-depth tutorial, check out this full video
walkthrough of the schedule assistant, which includes some practical examples.
The schedule assistant is a semi-automated feature in Dynamics 365 Field Service that helps dispatchers assign
work orders and other jobs to the closest and most appropriate resources.
When triggered by a dispatcher, the schedule assistant will recommend resources that match relevant
requirements, like time windows or skills needed. The system will also then show projected travel time for the
recommended resources, which helps dispatchers plan work accordingly.
When the dispatcher identifies the right resource for the job, they can then book the work to the resource, who can
then see it on their schedule.
In this article, we'll take a tour of the schedule assistant in Field Service.
Prerequisites
The schedule assistant is a part of the Universal Resource Scheduling solution, which is included and installed with
Dynamics 365 Field Service, Project Service Automation, and Customer Service.
Matching requirements and resources
The schedule assistant's primary objective is to match up work with the right resources. In Field Service, work is
typically represented by a work order, which includes information like:
Location
Time
Territory
Time windows
When a work order is created, a resource requirement is automatically generated. From the work order form, go to
Related > Requirements . On the requirement, you can add more details about the work, like:
Characteristics
Roles
Business units
Resource preferences
The schedule assistant uses these details on work orders and requirements to filter resources.
These same travel time estimates are shown in the grid view of the schedule assistant, as seen in the following
screenshot.
Rescheduling work
Need to rebook work? From the schedule board, just right-click the booked work, and then Rebook . This will
trigger the schedule assistant.
For more information, see the article on how to enable an entity for scheduling.
After using the grid format to create multiple requirements, select Book at the top of the form to trigger the
schedule assistant.
The schedule assistant will find different combinations of resources that meet the different requirements and can all
arrive at the job location at the same time.
For more information on setting up requirement groups, see the article Multi-resource scheduling with
Requirement groups.
NOTE
As of August 2020, this feature is available as early access. For more information, see the article on how to opt-in to early
access features.
You can view and edit the time zone the schedule assistant's search results are displayed in by triggering the
schedule assistant and selecting the gear icon in the top-right corner.
The time zone value is derived from the time zone on the requirement being scheduled. Go to the requirement,
then Modify Calendar to view and edit the requirement time zone.
The requirement time zone is derived from the following values in the following order:
1. The time zone of the work hours template noted on both the requirement and the related work order, if
applicable.
2. The time zone of the user that created the requirement (the owner). If the owner is changed, the time zone is not
changed. The user's time zone is defined in Personalization Settings .
3. The time zone of the default schedule board tab of the system.
Quick scheduling in Universal Resource Scheduling
8/14/2019 • 7 minutes to read • Edit Online
Quick scheduling (sometimes referred to as “quick book”) simplifies the schedule assistant experience to make
scheduling easier and quicker.
Within the same window of a work order, a single click brings up a pane showing available booking time slots.
NOTE
Time parameters on the work order like Date Window Star t and End are passed down to requirements and are factored
into quick booking.
The Filters option allows you to search through all resources (meaning all resources that meet the requirement
criteria) or select a specific resource to quick book (only if the selected resource meets the criteria).
Additionally, you can select the resource icon next to a time slot to see a simple list of applicable resources for that
time slot. See the following screenshot for reference.
This displays more details like travel time and distance, but still has a simpler interface with fewer details than the
full schedule assistant. The schedule assistant can still be triggered by selecting the Open Schedule Assistant link
at the bottom of the quick book pane.
Quick book multiple resources
Quick scheduling also works with requirement groups, which allow organizations to schedule multiple resources at
once.
1. Create a requirement group
Go to Resource Scheduling > Requirement Groups > New .
Use the requirement group control to define the multiple resources needed. Each row represents a resource
requirement.
In the following screenshot example, we need two resources, each with different skills but part of the same Seattle
organizational unit, and we need them for two hours.
For further details, see the topic on requirement groups.
Select a row, and open the form to edit more fields.
These requirements call for resource types contact , user , and account and have a work location of Onsite with a
defined location (latitude and longitude). This means we are sending resources to the customer's location.
Next, from the requirement group control, select Book to trigger quick book.
Again, you can select a time slot and then Book to assign the requirement group to multiple resources, or you can
select the resource icon to see different combinations of resources that fulfill the requirement group.
The results are displayed in order of average travel time and distance. Because each resource might be traveling
from a different location, travel time and distance are calculated as averages.
Lastly, as discussed in the requirement groups topic, requirement groups can include different option sets, and
quick book will respect these. In the following example, we want to schedule a single resource with both required
skills or two resources, each with one of the required skills.
To use requirement groups as part of the work order process, associate a requirement group template to an
incident type. See more details in the requirement groups for work orders section of the requirement groups topic.
Additionally, you can use requirement groups for customer service scenarios. Visit the customer service scheduling
topic to learn more.
Configuration considerations
After quick booking a single requirement, selecting Book again for the same requirement creates an
additional booking and will not rebook the previous one. Selecting Book again for a requirement group will
trigger the rebook process, which cancels previous bookings.
If you have enabled quick book, you enable it for your entire organization; it can't be enabled only for
specific users or security roles.
Quick Scheduling does not support fulfillment preferences with time groups.
Consider using fulfillment preferences with quick scheduling
The purpose of quick scheduling is to simplify the scheduling process. Fulfillment preferences further simplify
scheduling by organizing quick book (or schedule assistant) results in neat time blocks. By default, quick scheduling
uses a fulfillment preference with 30-minute intervals for single requirements, and 30-minute intervals with 10
results per interval for requirement groups. To apply a custom fulfillment preference and override the default:
1. Create a fulfillment preference. In this example, we created a fulfillment preference with 1-hour intervals.
2. Add the fulfillment preference to a requirement and quick book. The quick book results will appear in hourly
intervals.
See our topic on fulfillment preferences for more information.
Additional notes
The confirmation message shown after quick book is currently not configurable.
When quick book is enabled and applicable to the schedulable entity, it triggers wherever the Book button is
displayed.
Quick book is disabled by default in Dynamics 365 Field Service version 8.7 (Universal Resource Scheduling
version 3.7) but is enabled by default in Field Service versions 8.8 and later (Universal Resource Scheduling
versions 3.8 and later).
With Field Service version 8.7 (Universal Resource Scheduling version 3.7), quick book is not applicable to onsite
requirements. With Field Service version 8.8 and later and Universal Resource Scheduling version 3.8 and later,
quick book is applicable to onsite, facility, and location-agnostic requirements.
When quick scheduling an entity that does not have a related requirement, the time zones of search results
appear in GMT (UTC) timezone. For example, if you enable the leads entity for scheduling, you'll see a book
button at the top of the leads form. The leads record will not have a related requirement record by default, but
you can still book it with quick scheduling. The timezone of recommended timeslots will be in GMT (UTC). If you
create a requirement for the leads record and then quick book, the search results will appear in the timezone
noted on the requirement based on the requirement calendar. If there is no timezone on the requirement
calendar, quick book will use the timezone of the user who created the requirement. If the user doesn't have an
associated timezone, then GMT (UTC) timezone will be used.
Schedule with travel time and distance
8/14/2019 • 11 minutes to read • Edit Online
Field service organizations often perform preventative maintenance, inspections, repairs, and other types of
services by sending field technicians to multiple customer sites, and they must actively manage locations and
routes. This makes understanding and minimizing travel time critical for a field service organization's success.
Using Bing Maps API by default, Dynamics 365 Field Service calculates the driving travel time and distance as field
technicians travel:
From their personal address to a work order location.
From a company address to a work order location.
From their current work order location to the next work order location.
From their current location to a work order location (typically for high-priority emergencies).
In this article, we will explore how travel time and distance are calculated and visualized for dispatchers during
manual scheduling, semi-automated scheduling with the schedule assistant, and automated scheduling with
Resource Scheduling Optimization (RSO).
Prerequisites
1. Connect your Dynamics 365 environment to Bing Maps. For more information, see our article on setting this
up. This allows you to locate resources (field technicians) and work orders, and later calculate the travel time
and distances between them.
2. Set auto geocode addresses to Yes . For more information, see our article on setting this up. This allows you
to automatically geocode accounts and work orders when addresses are entered. Geocoding an account or
work order record populates latitude and longitude values, which are required for travel time and distance
calculations.
3. After connecting your environment to Bing Maps, make sure your resources have defined starting and
ending locations. Resources must have geocoded start and end locations in order to calculate travel times
and distances. See the articles on setting up bookable resources and using resource types to locate
resources.
4. Understand that only requirements for which Work Location is set to Onsite and for which latitude and
longitude values are specified are eligible for travel time calculations.
In the following screenshot, a work order has Work Location set to Onsite ; this is passed to the related
work order requirement. When that work order requirement is scheduled to a resource, the system will look
at the work location field, the location of the requirement, and the location of the resource in order to
calculate travel time.
Visualize travel time on the schedule board
After a requirement is scheduled to a resource, the booking appears on the schedule board, and, if applicable, travel
time displays preceding the booking.
In the following screenshot, the travel time to the customer's location is 23 minutes, and the estimated duration of
the work order is 2 hours, giving the booking a total duration of 2 hours and 23 minutes.
If you don't want travel time displayed as separate from the working duration, clear Show Travel Duration in the
schedule board configuration. This makes it so the travel time and working duration appear as a single solid block,
as seen in the following screenshot.
As field technicians complete work, they can update the booking status to Traveling . The system tracks the
duration of time the booking status is set to traveling and updates the Actual Travel Duration accordingly,
though this will not be displayed on the schedule board.
When field technicians arrive onsite, they can update the booking status to In progress , indicating work has
begun. The system tracks the duration of time the booking status is set to In progress and updates the Total
Duration In Progress booking field. Finally, when the booking is complete (in other words, the booking status is
set to Completed ), the booking End Time is updated, and the booking length is updated visually on the schedule
board.
Add travel time with manual scheduling
By default, manually scheduling a requirement by dragging and dropping on the schedule board will not calculate
travel time and distance. This can be helpful for field service organizations that are not concerned with managing or
optimizing their field technicians' travel but simply need to manage appointment start times. Imagine a scenario
where an emergency work order arises, and the dispatcher simply wants to communicate the time that a field
technician will arrive.
For example, a work order requirement that is manually scheduled to a resource at 9:00 AM implies that the field
technician should arrive at the customer's location at 9:00 AM; in this scenario, it's the field technician's
responsibility to manage travel arrangements. In the following screenshot, an unscheduled work order requirement
was dragged from the lower requirement pane to 9:00 AM for a resource. No travel time is calculated or added to
the duration of the booking, implying that all 4 hours make up the working duration.
Organizations that operate in small contained geographic areas can add a generic 30 minutes to the work order
durations either manually or by inflating the incident durations to roughly estimate travel but still utilize manual
scheduling.
NOTE
As of Dynamics 365 Field Service version 8.6, travel time and distance calculations can be added to bookings that are
manually scheduled .
In addition to completing the tasks mentioned earlier in this article, you need to go to Resource Scheduling >
Settings > Administration > Scheduling Parameters and set Auto Update Booking Travel to Enabled .
This will add a travel time to the booking visualization on the schedule board, displayed by a line preceding the
booking, and populate the Miles Traveled booking field (though this is not visualized on the schedule board).
In the following screenshot, an unscheduled work order requirement was dragged from the lower requirement
pane to a resource at 10:00 AM. Similarly to before, this implies that the field technician should arrive onsite at
10:00 AM; the only difference is that the travel time to get there from a home, office, or previous job location is
displayed before that time.
The auto-update booking travel feature will update travel time calculations as new bookings are made beyond the
initial schedule. In the following screenshot, you see two onsite work order requirements scheduled back-to-back
on the schedule board.
If a third onsite requirement is scheduled in between the original two, the travel time calculations are updated
accordingly, based on the new route order. The order of the bookings is decided by the estimated arrival time, not
the travel start time.
NOTE
When updates (like in the preceding screenshot) take place, the booking start and end times are not cascaded for the rest of
the day, as is evident by the overlap. Only the travel times and distances are updated. To ensure that the remaining bookings
cascade, correct overlapping times, and fit inside working hours after changes, organizations should consider using Resource
Schedule Optimization (RSO).
For more information on the Auto Update Booking Travel feature, see the additional notes section of this article.
In the following screenshot, the work location is location agnostic, and no travel times are displayed in results.
Additionally, the Auto Update Booking Travel feature (Field Service version 8.6 and later) updates subsequent
bookings when using the schedule assistant.
In the following screenshot, you'll see a resource's schedule with time available at the beginning of the day, which
may have been due to a cancellation.
When the schedule assistant is triggered, it finds the available time slot.
After it's booked, the travel time of the subsequent booking is updated as the location has changed.
NOTE
If the RSO is set to schedule within working hours, it will calculate time to leave at the end of the day for resources to travel
to their ending location, generally a home or office.
Travel outside working hours
Many organizations want to allow technicians to begin traveling before their working hours up to a limit. Configure
resource scheduling optimization to allow travel time before or after working hours as seen in the following
screenshot. For more information, see the article on allowing travel time outside of working hours with resource
scheduling optimization.
Scheduling based on real-time traffic is not applicable because most organizations schedule days or weeks in
advance, and you can't predict real-time traffic ahead of time.
Bing Maps and other mapping providers can provide real-time and historical travel-time calculations, and this
information can be called with Power Automate to calculate whether the current travel time is greater than the
estimated travel time and automatically update the booking status accordingly.
If a field technician begins travel to their next work order and sees that the travel time is much longer than
estimated by the system, they should indicate this with a custom booking status of "running late," so dispatchers
can plan accordingly.
Configuration considerations
By adding a travel charge to the service account of the work order, you can charge the customer a fee for travel
time and distance as work orders are completed. For more information, see the article on adding account-
related details to work orders.
A field technician's current location as derived from their mobile device running the Field Service Mobile app
can be used for travel time and distance calculations with the scheduling assistant. This is called Real-Time
Mode . For more information, see the article on enabling and testing location auditing.
Field Service uses the Bing Maps API for travel time and distance calculations, but other APIs such as Google
Maps can be used as well.
By default, work order requirements have a work location of Onsite , but default work location can be edited for
each schedulable entity by going to Resource Scheduling > Settings > Enable Resource Scheduling for
Entities > , and then selecting Enabled Entity .
Additional notes
The out-of-the-box functionality supports travel time and distance calculations only for driving, not walking or
flying.
If Auto Geocode Addresses is turned on, imported records will be geocoded, as will updates to the Address
1 field.
Auto Update Booking Travel for Field Service version 8.6 and later**
The Auto Update Booking Travel feature for manual scheduling needs two locations to work. For example, if a
resource has a starting location, and the first requirement scheduled to the resource has a location (for instance, the
work location is Onsite ), then the travel time will be calculated and visualized. If the resource does not have a
starting location (for instance, if the resource start location is Location Agnostic ), the first onsite requirement
scheduled will not have a travel time. However, if an onsite requirement is scheduled after another onsite
requirement, then the feature has two known locations, and the travel time between the two requirements will be
calculated even if the resource is location agnostic .
Here are a few more notes about the Auto Update Booking Travel feature:
The feature cannot be enabled or disabled based on specific users, schedule board tabs, or specific
schedulable entities.
The feature only applies to the Hours view of the schedule board, and travel time and distances are not
updated if the bookable resource booking form is edited manually, edited with a workflow, or if the bookings
are imported.
If you have an existing onsite booking, the subsequent onsite booking calculates travel time from the
previous booking up until the beginning of the next day's working hours, even if there are multiple hours in
between the two onsite bookings.
The time that the requirement is dragged to the schedule board is the time that the resource will arrive
onsite, and the travel time is added before that time. This is not configurable. For example, if you schedule
an onsite work order requirement at 10:00 AM by dragging the requirement to the 10:00 AM time slot, and
the feature calculates 20 minutes of travel time, then the travel will begin at 9:40 AM, and the resource will
arrive by 10:00 AM.
Multiresource scheduling with requirement groups
8/14/2019 • 7 minutes to read • Edit Online
Requirement groups allow you to define groups of resources that would be appropriate for a job and to then
schedule all those resources with a single search. With requirement groups, you can mix and match the different
types of resources—such as individual field technicians, a whole crew, equipment, or facilities—needed for a job.
For example, you might use a requirement group to find resources for a work order requiring:
One field technician with skill A and skill B
-or-
Two field technicians, one with skill A and the other with skill B.
You might also use a requirement group to find resources for a sales demonstration requiring:
Two people in the same sales territory, with both working onsite.
Two people in the same sales territory, with one onsite and one working remotely.
You can also use a requirement group to find resources for a project that can be done by any resource with the
right piece of equipment, who is available at 9:00 AM during a selected week.
To schedule multiple resources with requirement groups, follow these steps:
1. Create a requirement group template.
2. Create a new requirement group.
3. Book the requirement with the scheduling assistant.
NOTE
The All or Any setting is powerful when you need to add multiple option sets to a requirement group, which is done
by adding subgroups.
In the following screenshot example, the root requirement is set to Any , but each option within the root is set to All.
This means that when attempting to book the requirement group, the system searches for either all of option 1 or
all of Option 2 . The system searches for two resources, each with one required skill (characteristic), or searches for
one resource with two required skills.
The schedule assistant displays different options to fulfill the requirement group, noting the particular requirement
it is fulfilling in the Requirement column.
By default, it recommends options with fewer resources first, in an attempt to minimize travel time and/or cost. You
can also sort by Earliest Time First in the left pane.
Selecting and booking an option for multiple requirements creates multiple bookings reflected on the schedule
board.
If multiple bookings are created when scheduling a requirement group, you can use the split view feature on the
schedule board to view all related bookings.
In the preceding screenshot, the lower split view shows all bookings scheduled from the requirement group.
NOTE
Incident types with characteristics cannot relate to requirement group templates.
3. Select Requirement Group under related entities, and select add a new one .
4. Select a requirement group template from the drop-down menu to associate the template with the incident
type, and then select Save .
NOTE
When an incident type with a requirement group template is added to a work order, the number of work order
incidents is limited to one.
3. Navigate to Work Order > Requirement Groups to verify that requirements have been added to the
work order according to the requirement group template.
4. Book the work order
Select Book to schedule the work order.
Keyboard shortcuts
You can use keyboard shortcuts when creating requirement groups, shown in the following table.
C OMMAND K EY S
Work orders and scheduling requirements can be scheduled across multiple days and weeks. A common example
is scheduling a 40-hour work order across an entire work week where the field technician is expected to perform
more detailed work at the same location each day.
Dispatchers can schedule multi-day work in between existing bookings, by double-booking existing schedules, or
as a continuous block of time.
When scheduling multi-day work orders or requirements, dispatchers can choose an allocation method that
dictates how the duration is split up throughout the days and weeks.
Allocation methods include:
Full capacity
Percentage capacity
Distribute evenly
Front load
For more information, see the topic on allocation methods.
Let's explore multi-day scheduling and allocation methods by configuring 3 scenarios:
1. Schedule a 30-hour installation work order manually from the schedule board.
2. Schedule a 30-hour requirement with the schedule assistant.
3. Schedule and divide a 30-hour requirement among 2 resources with the schedule assistant.
Prerequisites
If the work you wish to schedule spans multiple weeks or has dependencies on previous steps and milestones,
consider using Dynamics 365 Project Service, which has Gantt chart functionality.
The requirement From Date and To Date will populate with the Date Window Star t and Date Window End
work order field values.
Next, go to the Hours view of the schedule board and select the multi-day work order requirement in the lower
pane.
Then select a resource on the board for which you would like to schedule the multi-day work order requirement.
Do not drag and drop.
NOTE
Dragging and dropping a multi-day requirement onto the Hours view will create a long continuous booking through non-
working hours.
A Create Resource Booking pane will display on the right where you can confirm or edit:
Star t Date and End Date : populated from the requirement's From Date and To Date fields.
Booking Status : Work order requirements are typically given a booking status of Scheduled by default
but you can choose from your organization's statuses here.
Booking Method : Select the Allocation Method to define the pattern of how the requirement should be
spread across the start and end dates.
After selecting Book , the system will create multiple bookings across multiple days.
On the Days view of the schedule board, you can more easily see the booking pattern. In our example, we chose
Front Load Hours as our booking method, so the bookings filled the resource's available time with the leftover
duration on the last day.
NOTE
Using Front Load Hours as the booking method creates multiple bookings around the resource's existing schedule in
instances where other bookings exist for the scheduled resource.
Dragging and dropping a multi-day requirement on the Days view will trigger the Create Resource Booking
side panel to schedule multi-day bookings like above.
Scenario 2: Schedule a multi-day requirement with the schedule
assistant
Unlike the previous scenario, rather than starting by creating a work order, we will start by creating a resource
requirement.
Go to Resource Scheduling > Resource Requirements > +New .
Enter a Name .
The From Date and To Date fields represent the date range the multi-day requirement should be spread across.
For Allocation Method , select one of the following:
Full capacity
Percentage capacity
Distribute evenly
Front load
For more details on each of these, see the topic on Allocation methods.
NOTE
You need to set an allocation method before saving.
The requirement details are based on the requirement's calendar, which you can edit by selecting Modify
Calendar in the top ribbon of the requirement.
Then select Book to trigger the schedule assistant for this multi-day requirement.
Resources with availability and that meet the other attributes will show as results. Simply select a resource, the
dates, and then Book . This will create multiple bookings across the date range according to the pattern of the
allocation method.
Once booked, you'll see the resource's availability decrease and the fulfilled duration increase. In our example, 30
hours of duration were fulfilled, 6 of 6 hours booked each day; and the resource's 8 hours of availability was
reduced to 2 hours each day.
NOTE
This scenario scheduled a requirement without a related work order. To schedule a multi-day work order with the schedule
assistant, you'll need to manually add a related requirement with an allocation method to a work order and delete or
disregard the automatically created one. Alternatively, you can manually create requirement detail records with Specify
Pattern for the auto-created requirement. This is because you need to set an allocation method before saving and the
requirements that are automatically created by work orders have an allocation method of None by default.
Select Book .
Select a resource and specific days for just that resource, then choose Book (not Book & Exit , as that will close the
schedule assistant)
Then choose another resource and specific days for only that resource. Then choose Book again.
Bookings are created for each resource on the days selected. Availability for each scheduled resource is updated as
well.
Configuration considerations
Each requirement has its own calendar that you can view and edit from the Modify Calendar option in the top
ribbon menu. The calendar is important because it allows you to edit the time zone of the requirement and how
the schedule assistant results should be displayed.
The Booking Methods Full Capacity , Percent Capacity , and Remaining Capacity reflect the Bookable
Resource's working hours calendar. For example, if the Bookable Resource's working hours calendar is 9:00 AM -
5:00 PM, Monday - Friday, and you select Full Capacity as the allocation method, it will assume Full Capacity
means the total time of the resource's calendar (which can be less than the requirement duration).
Availability does not need to be continuous. For example, if a dispatcher needs to schedule a resource for 4
hours one day, that resource will show as available as long as there is 4 total hours of availability, not necessarily
in a single block.
You can manually create requirement details as needed to schedule multi-day work according to a custom
pattern.
You cannot schedule more hours than are available in a defined week. For example, if the calendar is 9:00 AM -
5:00 PM, Monday - Friday, which equates to 40 hours per week, you cannot schedule more than 40 hours in one
week. This would have to be done manually.
Front load versus full capacity allocation methods: Front load will schedule around existing bookings, and full
capacity will schedule in addition to existing bookings, overbooking as needed.
Additional notes
Requirement groups cannot be scheduled for multiple days.
The schedule assistant will filter available resources for multi-day work by their location, but travel time will not
be calculated and added to the resulting bookings.
As you book requirements, multi-day or otherwise, the system tracks fulfilled duration and remaining duration.
These field values compare total booked time with the duration of the requirement.
See also
Allocation methods
Multi-resource scheduling
Fulfillment preferences
8/14/2019 • 8 minutes to read • Edit Online
Fulfillment preferences are customizable entities that let you choose how schedule assistant results are displayed,
like with neat hourly appointments or morning and afternoon time windows.
By default, the schedule assistant displays results based entirely on resource schedules and the earliest available
time, such as 10:39 AM. With fulfillment preferences set to hourly, the same resource's availability shows as
11:00 AM . This makes it simpler for the scheduler to view and understand availability and communicate it to the
customer.
Overview
Fulfillment preferences break down into two features: inter vals and time groups . Note that both are designed for
work done in a single day, not multiday work.
Intervals
Intervals display schedule assistant results in neat time slots that dictate start time of subsequent bookings. When
configured as 30-minute intervals, the schedule assistant will display a resource available at 9:27 AM as available at
9:30 AM and will book the start time (arrival time) for 9:30 AM. This includes travel time for onsite requirements
and work orders, meaning travel time will begin before 9:30 AM, and a field resource will arrive and start work at
9:30 AM.
For example, a hair salon may want to offer appointments every hour because 1-hour intervals are a good time
estimate for their work, which is mostly consistent and predictable. It's also easier to communicate 1-hour
appointments to customers when scheduling.
Time groups
Time groups enable schedulers to search and view results as blocks of time when using the schedule assistant.
Typical examples include mornings, afternoon, nights, and 2-hour windows. Unlike intervals, time groups do not
dictate the star t time of subsequent bookings . Time groups organize results, but leave the start time/arrival
time as-is, based on the particular resource's schedule.
When a time group is created for morning (8:00 AM to 12:00 PM) the schedule assistant will display a resource's
earliest availability within the defined morning bucket. Results will show a list of possible resources to start at 8:32
AM, 9:07 AM, and 11:23 AM, and all results will appear within the "morning" time group because the start times fall
within the 8:00 AM to 12:00 PM time group.
For example, a heating and cooling company wants to group air-conditioning installations into morning (8:00 AM
to 12:00 PM) and afternoon (1:00 PM to 5:00 PM) windows, with a 1-hour break for lunch in between. Because
installations are dependent on many variables, schedulers aren't comfortable committing to an exact time; they
would rather communicate to customers a morning or afternoon time range when installation resources will arrive
to begin working.
Inter vals and time groups can be combined to offer predefined intervals within a predefined time block, such as
grouping 1-hour appointments within morning and afternoon groups. This allows a scheduler to first identify
whether morning or afternoon works better for the customer, and then offer an appointment. This further simplifies
the scheduler experience and communication to the customer.
The following sections give instructions on setting up intervals and time groups and also how to set them up to
work together. Note that Universal Resource Scheduling version 3.1+ is required.
Interval setup
To set up intervals, you need to:
Create a fulfillment preference.
Associate the fulfillment preference to a requirement.
Book the requirement with the schedule assistant.
Create a fulfillment preference
1. Navigate to Universal Resource Scheduling > Fulfillment preferences > +New . Enter a name and save.
3. Enter a duration for Inter val . This is the duration between available time slots. Typical examples include 30
minutes, 45 minutes, 1 hour, and 2 hours.
4. Enter a time for Inter vals Begin , which defines when to begin counting the interval. So if this is set to 12:00
AM, the available options are 12:00 AM, 12:30 AM, 1:00 AM, and so on; however, results will also depend on
resource availability and working hours. If left blank, the interval will begin at the beginning of the search.
For example, if your interval is 30 minutes and Interval Begins is blank, when you attempt to book at 11:13
AM, your time slot options are 11:13 AM, 11:43 AM, 12:13 PM, and so on.
5. Enter a number for Results per inter val . This dictates how many options a scheduler will receive for each
interval. If left blank, the system defaults to 1.
The results per interval value determines how many options for a given time slot will appear in schedule
assistant results. So if you have 85 resources all available at 9:30 AM, and results per interval is set to 85,
then all resources will show. If results per interval is set to 5, then only the 5 best will show.
6. Save and close.
Associate fulfillment preference to a requirement
Navigate to the requirement you want to schedule and specify the fulfillment preference.
You can also associate the fulfillment preference from the requirement group entity, as seen in the following
screenshot:
Book the requirement with the schedule assistant
Select Book from the requirement ribbon. Note that the start times in the scheduling assistant appear in 30-minute
intervals.
For field service examples where resources perform multiple appointments each day, a shorter 15-minute interval
is recommended. This makes for the most efficient use of resources with simplified start times.
Right-clicking on the column header allows schedulers to group by time group details (by selecting "Group"). This
comes in handy when focusing on a specific time block that a customer prefers.
NOTE
Time group details ensure the start time of the booking falls within the start and end time of the time group; however, the
end time can fall beyond that range. In the preceding screenshot, a resource available at 11:59 AM appears in the "morning"
time group, and the duration of the booking will spill over into the lunch/afternoon time group.
Configuration notes
Intervals can also be set for requirement groups. All requirements within that requirement group will inherit
the same fulfillment preferences. The fulfillment preferences entity was originally named "time groups," and
therefore, the actual schema name for this entity is msdyn_timegroup , although the display name is
Fulfillment Preferences .
Time group details are only compatible for individual requirements.
Fulfillment preferences apply to location-agnostic and onsite requirements.
There is an attribute on the booking entity called Time Group Detail Selected
(msdyn_timegroupdetailselected ), which points to the time group detail entity. This value is
automatically populated when a booking is created through the schedule assistant. For example, if a
requirement is scheduled and the results fall into the time group “9 to 12,” the booking created through the
schedule assistant will have the value “9 to 12” in the time group detail selected field.
The Inter vals Begin time is dependent on the time zone of the requirement calendar when triggered from
the requirement; however, when triggered from the schedule board, it depends on the user's time zone.
Quick Scheduling does not support fulfillment preferences with time groups.
Supported vs. not supported functionality
In v3.1 of Universal Resource Scheduling (URS), some features will work when scheduling both individual
requirements and groups of requirements, and some features will not work for both. Please use the following table
for guidance.
Resource crews allow dispatchers to search and schedule multiple resources at once. This can include a group of
employees, subcontractors, equipment, facilities, or any combination thereof who will perform the same work
during a period of time. Crews speed up and simplify the scheduling process and allow team members to work
together more consistently.
Crews are ideal for scenarios where:
a group of resources will work together for a set number of days, weeks, or months.
a crew meets at a location in the morning, shares a vehicle, and is together all day from job to job.
a new employee is shadowing a veteran to learn new skills.
The primar y use case for booking crews is scheduling a requirement group with multiple requirements to
multiple resources, though single requirements can be manually scheduled to crews as well.
Without crews , dispatchers can schedule the same requirements multiple times manually by using the schedule
board (or with the schedule assistant), but that takes more time. If your scenario involves assembling resources
together for one job, and then disbanding everyone, crew scheduling is not applicable.
Scheduling a crew automatically creates bookings for all crew members; rescheduling bookings will reschedule all
crew bookings according to cascading settings on the bookings.
In this topic, we'll walk through how to use resource crews, and then explore a few additional considerations.
Prerequisites
Field Service v8.0+
Universal Resource Scheduling v3.0+
Instructions
1. Create a "crew" resource type
A crew consists of a crew resource. The crew resource serves as a container for the crew, and child resources who
are the members of the crew for a given time frame.
To create a crew resource, navigate to Universal Resource Scheduling > Resources > +New and set the
resource type to Crew .
On the General tab, assign a Name .
You can also assign a Crew Strategy. Crew strategy determines how the crew manages its work. There are 3
options:
Cascade and Accept Cascade Completely : All resources on a crew can manage all the work. This is useful
when a crew is made up of one user and the rest of the crew is equipment.
Crew Leader Management : A designated person (or persons) can manage the work of a crew. This is useful
when a crew is made up of multiple users. You can designate more than one person to be a leader and manage
the work.
Crew Member Self-Management : Resources can manage their own work. This is useful when a crew is made
up of users who regularly work together, but may not always work together at the same place or time. Self-
management also means better time capturing, which is good for organizations who bill for time spent on work.
NOTE
Crew strategies affect if and how a crew booking is rescheduled. For instance, if a crew leader's bookings are moved, then all
bookings are moved.
Add a Date Range to indicate when each resource will be part of the crew. It can be variable for each resource.
3. Add the crew to the schedule board
Crew members are also visualized on the schedule board as any resource would be.
Add crews to the schedule board by manipulating schedule board filters to match the service territory, roles,
business unit, characteristics etc. of the crew header. Or, manually add the crew to the board from Options >
Select Resources .
For example, if a schedule board is filtered to show resources for the Washington territory, and the crew header
resource is part of that territory, it will be displayed. This is true even if resource children are not part of that
territory.
Crew resources have a different resource cell layout on the schedule board. You will notice a different icon and a
resource count indicating how many resources are in the crew during the range displayed on the schedule board.
On the hourly list view, you can expand the crew resource to see the members of the crew.
For the time range a resource is part of a crew, there is a grey area displayed on the board. This serves to:
1. Remind dispatchers and resource managers that the resource is part of a crew.
2. Understand that moving their bookings will likely affect other bookings because crew bookings are kept in sync
unless specified otherwise.
3. Understand that scheduling a job to the resource without the crew will likely affect the crew’s ability to be
matched for future jobs.
4. Manually schedule the crew
Dragging a single requirement to the crew header resource will create a booking for the crew header resource,
along with all child resources that are associated to the crew during that time and are working for the full duration
of the booking. Bookings will not be created for child resources that are not working.
Note that requirement groups can't be manually scheduled to crews; only single requirements can be manually
scheduled.
When the schedule assistant searches, it assembles a team of resources in which there is a relevant resource for
every requirement in the requirement group. The crew resource itself is just a container and is not considered a
resource when it comes to matching. Each individual resource needs to match with a requirement in the
requirement group.
The ideal scenario would be matching three requirements to a crew of three resources.
As you can see in the preceding screenshot, the entire crew is presented as an option to book, along with additional
non-crew options like teams.
If you expand the crew, you will see that each member of the crew matched with a requirement within the
requirement group being scheduled.
When the crew is selected and booked, each booking for each crew member will relate to the requirement that they
were matched to, and will also relate to the requirement group. The crew resource gets a booking as well to make it
easy to manage the crew as a single unit.
NOTE
Scheduling a crew can be better than scheduling a collection of individual resources because crew members work with each
other frequently; this can boost productivity.
This will split the schedule board into two boards. The top board is the same board you were on before, and the
bottom schedule board shows only the crew and crew members.
Configuration considerations
Location of crew and crew members
The schedule assistant needs to understand the starting and ending location of resources when it books onsite
requirements for Field Service. Crew member locations are taken from their individual resource profiles and not
from the parent crew. It's important that you change the location of the crew member resource if a resource jumps
between crews. For example, if you want a crew to meet at a central location in the morning to travel together,
specify start/end location as organization unit address for the crew header resource and the resource children crew
members.
Resource type filter on requirements
The resource type filter on a requirement controls which resources can be searched as part of the schedule
assistant search. If no values are set, then all resources can be searched. If only “Crew” is selected, then only
members of a crew can return in the results. The option “Crew” will be renamed to “Crew Member” in an update to
help articulate the meaning better. This also applies to Resource Scheduling Optimization.
If both crew and user are selected, then only resources that are set to resource type “User” or are a member of a
crew can be searched.
Additionally, the newly created requirement group is tagged with an Auto Group Type of “Crew” .
Rescheduling crews
Consider the crew strategy when rescheduling or editing crew bookings:
Cascade and Accept Cascade Completely : any change to the booking affects everyone's bookings.
Crew Leader Management : only the designated leader or leaders can make changes on bookings. If a leader
changes a booking, everyone's booking changes. Individual team members cannot change bookings.
Crew Member Self-Management : All crew bookings are independent of one another, and bookings are not
kept in sync across the crew. When the crew is scheduled, each crew member gets scheduled, but can change
their own bookings regardless of others' work.
Additional notes
Attempting to book a resource that is par t of a crew
If you select a resource that is part of a crew, a warning message will be presented warning the scheduler that this
resource is part of a crew, so it may impact the crews ability to handle future jobs.
Multiday schedule boards not suppor ted for crews
Daily, weekly, and monthly schedule boards do not have specific support for crew scenarios.
Facility scheduling with Universal Resource
Scheduling
8/14/2019 • 18 minutes to read • Edit Online
Universal Resource Scheduling (URS) enables organizations to schedule interactions between customers and
company resources. For scenarios where the customer is expected to travel to the company's location, the facility
scheduling feature can coordinate physical spaces and related resources.
Typical examples include:
Reser ving a physical space
Reserve a room for an event or party
Reserve a room for an exercise class
Reserve a bay at a mechanic shop
Reserve a boat
Reser ving an appointment with a person at a facility
Laptop repair at a Microsoft retail store
Wealth management consultation at bank branch
Doctor's office with related nurse and doctor
In this topic, we'll explore a few example scenarios using facility scheduling, and describe how it's used in each.
Prerequisites
Universal Resource Scheduling (URS) v3.0
Field Service v8.0 (for work orders, if applicable)
In general, to use facility scheduling, an administrator must create a facility resource (with or without additional
related resources), configure a requirement that calls for facility resources, book the requirement, and view facility
resources and booking(s) on the schedule board.
Let's consider five scenarios to describe facility scheduling:
1. Schedule a facility
2. Schedule a facility with 5 generic rooms
3. Schedule a facility and related resource
4. Schedule a facility with 5 specific rooms
5. Schedule a facility with 5 specific rooms and 5 related resources
Filtering work location to location agnostic will remove travel time and distance calculations from schedule
assistant results.
4. Add the facility resource to the schedule board
Scheduling a facility is just like scheduling any other resource. You can drag and drop requirements to create
bookings; you can drag existing bookings to change the time or resource; or you can use the schedule assistant to
help sift through the list of facilities based on availability and other constraints.
To view facility resources on the schedule board, filter by resource type and/or organizational units.
Facility resources will also be displayed on the schedule board map based on the location of the related
organizational unit.
Setting the capacity to 5 means that when booking a facility with the schedule assistant, the facility resource will
show as available and can be double-booked up to the capacity limit (in this case, 5 times).
In the preceding screenshot, two separate requirements for a facility were both scheduled to the same facility
during the same time slot. Without increasing the capacity, once a timeslot at a facility is booked, it will no longer
show in schedule assistant results.
NOTE
Capacity scheduling is not intended for booking the same requirement multiple times, but rather to book multiple
requirements. Rebooking a previously booked requirement will cancel the existing booking and create a new one.
NOTE
The user resource type is typically designated for employees who access Dynamics 365 data; contact and account resource
types are typically for contractors who need to be scheduled but don't access data.
Start/end location should be set to Organizational Unit Address and the organizational unit should be set to the
same organizational unit of the facility resource (in this case, the doctor's office). This is recommended but not
required .
3. Associate the doctor resource to the facility resource
From the facility resource, navigate to Related > Bookable Resource Association (Resource 2) . This related
entity is called Resource Associations (msdyn_bookableresourceassociations ).
From here, associate the resource that represents the doctor.
In the following screenshot, Abraham McCormick represents a doctor and is associated to "Doctors Office North
Seattle," which represents the doctor's office.
Set the Work Location on each requirement to Facility , indicating the work will take place at the doctor's office.
NOTE
Using the Select > All option in the requirement group means that both requirements need to be fulfilled.
Set Par t of Same to Resource Tree . This ensures resources from different locations are not recommended for
work taking place at a facility. As an example, a doctor associated with Facility B should not be paired with Facility A.
Find more details about this setting in the configuration considerations section of this article.
Scheduling the requirement group creates a booking for the facility resource and the doctor resource.
NOTE
As in scenario 1, travel time and distance are calculated as the time and distance for the customer to travel to the facility.
There is no travel calculation considered for the doctor resource, as it's assumed he/she will be at the facility at the required
time.
Scenario 4: Schedule a facility with 5 specific rooms
In this scenario, schedulers want to track all rooms within a doctor's office and schedule each individual room to
patients.
This scenario is configured by creating a pool of facilities to represent the doctor's office and each individual room.
1. Create a facility pool resource
First, create a resource to represent the overall doctor's office where Resource Type = Pool and Pool Type =
Facility .
In this example, we call it "Health Clinic," as seen in the following screenshot.
3. Add each room resource as a child resource to the doctor's office resource pool
Navigate to the doctor's office facility pool resource, and go to Related > Resource Children .
Add each room resource as a child record to the parent facility pool (health clinic), as seen in the following
screenshot.
4. Create a requirement group
Create a requirement that calls for one or more facilities. In this example, we're looking for 2 specific rooms within
the same doctor's office (health clinic).
Set Par t of Same to Same Location to ensure each room is at the same physical address.
Each requirement should call for facility resource types, as seen in the following screenshot.
Again, the Work Location of each requirement should be set to Facility and the latitude and longitude fields of
the requirements should correspond to the customer's (or patient's) location.
NOTE
Latitude and longitude fields on all requirements within a group must be equal; updating the values on one requirement will
update the others.
Create resources to represent doctors and add them as resource children to the pediatric doctors pool.
5. Associate doctor pool to facility pool
Next, navigate to the original facility pool (health clinic), and go to Related > Bookable Resource Association .
Set the Resource 2 field to the pediatric doctor pool resource, as seen in the following screenshot.
This allows you to book the pediatrician pool and assign a specific pediatric doctor at a later time. Whether
pediatricians show as results will depend on capacity (as derived from the number of doctors in the pool). Using the
pool allows schedulers to book appointments based on capacity without having to assign a specific doctor at the
time of scheduling.
On the requirement, if Resource Type = Users, Accounts, Contacts, (Not Pools) , specific doctor resources
will show in results, as seen in the following screenshot.
NOTE
Use fulfillment preferences to display schedule assistant results in neat hourly timeslots.
Configuration considerations
Choosing the right work location on requirements
Let's take a look at the following work location types:
Facility
On Site
Location Agnostic
Facility work location implies the interaction takes place at the facility and travel time is calculated as the
distance between the customer location and the facility location. The requirement's latitude and longitude
fields are used as the customer location. It also means at least one facility or facility pool must return in
schedule assistant search results in order for a resource(s) to be returned.
On Site work location implies the interaction takes place at the customer location and travel time is
calculated as the distance between the customer location and the resource (typically field technician)
location, which is variable based on the resource's schedule that day. The requirement's latitude and
longitude fields are used as the customer location. As a result, facility resources and facility pools will be
excluded from the results.
Location Agnostic work location implies the interaction takes place remotely and the location of the
customer nor the resource is considered for scheduling. Travel time is not applicable and is not calculated.
Facility resources can still be returned as part of the schedule assistant search, but travel time will not be
displayed or considered in ranking.
"Part of Same" options on requirement groups
Same Location : Same location means that only teams of resources working at the same location will be
returned. This uses the logic expressed in this document to determine the location, using the Resource
Associations (msdyn_bookableresourceassociations) and the Bookable Resource Group
(bookableresourcegroup) entities. Using this option, regardless of which specific facility or facility pool other
non-facility resources may be associated to, all that matters is that the resources are at the same physical
location (organizational unit).
Same Resource Tree : This option adds an extra layer of stringency to the search. It means that the teams
assembled must actually be associated to the same facility or facility pool in order to be returned as a team.
For example, let’s assume there is one physical location, Location A.
There are 2 facilities at location A: facility 1 and facility 2. If resource 1 is associated to facility 1, and "Same
Resource Tree" is selected, the one team that can be assembled is facility 1 + resource 1. Facility 2 and
resource 1 cannot be returned. This combo could however be returned if “Same Location” is the only option
selected.
It works the same with facility pools. Let’s assume there is one physical location, Location A. At location A are
2 facilities, facility 1 and facility 2, as well as a facility pool (facility pool 1). If resource 1 is associated to
facility pool 1, and “Same Resource Tree” is selected, the one team that can be assembled is facility pool 1 (or
one of it’s child facilities) + resource 1.
NOTE
If neither of these two options are selected on the requirement relationship (msdyn_requirementrelationship), and work
location is set to facility, the schedule assistant search will execute as if “Same Resource Tree” was selected.
Same Organizational Unit : An even more stringent option is same organizational unit. This option
ensures that the parent organizational unit of the resources are the same. It does not check the bookable
resource group or the bookable resource association entity. It only checks the parent organizational unit.
If your implementation uses requirements that are location agnostic, this option may be used without either
of the other two options; however, it completely ignores the two aforementioned entities (associations and
groups). This could work in a simple implementation where resources are always staffed at the same
location, and you do not need the advanced location search functionality of the work location “facility.”
NOTE
The Par t of Same field schema name is msdyn_requirementrelationship
When to use "facility with capacity," "multiple facilities," and "facility pool"
Facility with capacity : this option is configured by adding a capacity to a single facility. It's most useful
when schedulers care most about not overbooking, and either don't need to schedule specific facilities or can
handle coordination in person when customers arrive at the facility.
Multiple facilities : this option is configured by creating multiple facility resources and relating them to
each other through an organizational unit. This option makes the most sense when each facility needs to be
scheduled individually.
Facility pool : this option is configured by creating a facility pool and adding facilities as pool members. This
option makes the most sense when schedulers want to (1) utilize capacity scheduling by having the facility
pool capacity increase and decrease as facilities are added or removed and (2) use local scheduling where
bookings are first assigned to the facility pool and then later assigned to pool members. Example: a hotel
(facility pool) is first scheduled for a weekend and travelers are assigned specific rooms (facility pool
members) at a later date when they arrive.
When upgrading from Field Service v7.x to v8.x, facility type resources may not appear in schedule assistant
results due to default filter settings. To fix this, go to Field Ser vice > Schedule Board . Double-click on a
schedule board tab, and then Open Default Settings in the upper right. Scroll down to Other Settings .
Set Retreive Resources Quer y to 3.0.0.0 as seen in the following screenshot. Filter Layout and
Resource Cell Template should also be set to 3.0.0.0.
Additional notes
For requirements that are not part of a requirement group, only facility or facility pool resources can return in
the schedule assistant if Work Location is set to Facility .
A resource can't be related to two facilities (child or association) at the same time.
There is currently no specific way to visualize every resource related to a facility on the schedule board. The
closest way to achieve this is to filter by organizational units.
Manually scheduling a single requirement to a facility will not create records for all resources related to the
facility.
Facility pool location
The location for a facility pool is taken from the parent organizational unit. If a facility resource is a member of a
facility pool, the location of the facility is taken from the pool resource. For example, if you create a facility with a
location/organizational unit of location A , and you add this facility to a pool, which is located at location B , the
facility will be considered as located at location B for as long as it remains in the pool.
Booking location
When a team is selected and booked, the latitude and longitude of the booked facility/facility pool's location will be
stored on the booking record. The work location will also be set based on the work location used when booking in
the schedule assistant. In the following conditions, the work location, latitude, and longitude will still be set on the
booking:
If bookings are created without using the schedule assistant
If the requirement's work location is set to facility
There are latitude and longitude values on the requirement
Resource pools
8/14/2019 • 18 minutes to read • Edit Online
Resource pool scheduling allows you to assemble groups of similar resources to manage capacity and give
schedulers the option to assign specific resources at a later time.
Resource pool scheduling is useful for several scenarios, including:
To avoid being forced to book specific resources up front, and instead book the “resource pool” while
ensuring no over-commitment. For example, a hotel must search for generic room availability, but travelers
are not assigned a specific room until they arrive at the hotel.
To shield central schedulers from details, and leave those details to a local resource manager. For example,
customers make laptop repair appointments by calling a central dispatch service, who books appointments
at Microsoft Retail stores countrywide. Each morning, the manager of the local store assigns specific
specialists.
Specific resources may not yet be named, but capacity of the pool is established. Schedulers can still
schedule since capacity of the pool can be set as if all the resources were named. For example, a tradeshow
offers different booth options to sponsors. Capacity of booths is considered when booking, but specific
booths will be confirmed later. Organizers can take reservations well in advance of having a defined floor
layout; the layout may even be decided based on how many reservations there are.
To deliberately enable overbooking for expected cancellations. For example, a doctor's office has a fixed
number of rooms to help patients, but may inflate capacity and schedule more appointments than rooms in
order to account for cancellations.
In this topic, we'll walk through 2 hypothetical scenarios to explain resource pool scheduling:
1. Schedule a pool, then assign specific resources later
2. Overbook a pool for expected cancellations
Prerequisites
To use resource pool scheduling, you'll need Universal Resource Scheduling (URS) v3.0.
6. Set Star t Location and End Location to Organizational Unit Address , and assign an organizational unit
with latitude and longitude values because the pediatricians work at a defined health clinic.
a. Start and End Locations can be set to either Organizational Unit Address to represent a physical
location where the pool works, or Location Agnostic for a pool of resources that will perform work
remotely (for example, customer service phone calls). Resource address is not an option, as pools are
currently excluded from Onsite scheduling (requirements where Work Location is set to Onsite).
7. Set Derive Capacity From Group Members to Yes .
a. Setting to Yes : Capacity will increase and decrease as pool members are added to or removed from the
pool. In our example scenario, we set to "yes" because it allows us to add 5 pediatricians to the pool in the
next step. This also allows the pediatrician pool to be booked up to 5 times for any single time slot.
b. Setting to No : The capacity of the pool will default to one and can be manually edited. Pool members
can still be added and removed. See scenario 2 in this article for more details.
8. Add more pool resource attributes.
a. You can add any additional information about the pool that you would like considered when it comes to
scheduling. Consider the pool as a standard resource as it relates to adding skills, roles, organizational
units, territories, and so on. For example, if you have a requirement that requires “skill A,” when searching
for availability using the schedule assistant, only pools with “skill A” will be considered.
Step 2: Add pool members
Members can be added to a pool through the bookable resource group entity (bookableresourcegroup).
1. From the pool you just created, go to Related > Resource Children .
2. Select +Add New Bookable Resource Group , and:
a. Assign a Name .
b. In the Resource 2 field, select the resource you would like to add to the pool.
c. Select a Date Range during which the resource will be part of the pool. This will effect capacity if the
pool is set to derive capacity from pool members.
d. Repeat these steps for each pool member.
NOTE
Resources can be associated as children of the pool with date effectivity. For example, on Monday, Resources 1, 2, and 3 can
make up the pool, while on Tuesday, resources 4, 5, and 6 can make up the pool. To do this:
1. Create a new bookable resource group record.
2. Set the parent resource to the pool, and the child resource to the resource that is in that pool.
3. Set the From Date to the date and time that the resource is part of the pool and set the To Date to the date and time
when the resource is no longer associated to the pool.
NOTE
In our example, the requirement group field on the requirement record is blank. This means that this is a single requirement
intended to be scheduled to one resource. One benefit of single requirements is that they can be scheduled and rescheduled
by manual drag and drop. This is useful if dispatchers want to manually reschedule bookings from a pool to a pool member.
Step 5: Book the pool
1. Select Book at the top of the requirement form to trigger the schedule assistant.
2. When searching for availability for a requirement or requirement group, both the pool and its child
resources (pool members) can be returned in the results.
3. Select the pool resource and a time slot (in this example, our pediatrician pool and the 9AM - 10AM time
slot), and select Book & Exit .
Step 6: Book more requirements to the pool
Since a pool can be booked multiple times up to defined capacity, now we'll create another requirement and book it
to the same time slot.
The following screenshot shows a near identical requirement for another pediatrician that we will book to our pool.
We will select the same resource pool as we did in step 5, and the same time slot at 9 AM to 10 AM.
The resource pool will show as a result in the schedule assistant for the 9 AM time slot up to five times since five
pediatric resources were added to the pool making the capacity five.
Next, head to the schedule board and then to the schedule board tab where your pool resource is displayed.
Load the Hourly Schedule Board and find your pool resource. Right click the Pool Resource and choose to View
Pool Resources in Split View . This will split the Schedule Board and a new dedicated Schedule Board will be
displayed showing just the Pool and its members. Based on the dates being displayed on the Schedule Board, only
the members of the pool with membership during that date range will appear in the Pool Schedule Board. If a
resource is part of the pool for only some of the days being displayed on the Schedule Board, they will be
displayed, and there will be a mask showing the days where they are not part of the pool.
Here we see five bookings at the 9:00am time slot.
NOTE
The Schedule Board sor ting functionality applies to the split view, but the Schedule Board filtering functionality does not.
As an alternative to rebooking from the schedule board, go to the requirement record, edit the resource types, and
book again.
Scenario 2: Overbook a pool for expected cancellations
In our second scenario, hotel managers want to make reservations for travelers by first checking for specific date
range availability, and then assigning the traveler a specific room when she arrives. Furthermore, hotel managers
want to overbook the hotel to account for expected cancellations.
To accommodate this scenario, we will create a pool of facilities with extra capacity to represent the hotel rooms,
schedule reservations to the hotel pool, and finally reassign reservations to specific rooms within the hotel pool.
Step 1. Create a pool resource
First we will create a pool resource to represent the hotel.
1. From the Field Service or Universal Resource Scheduling solutions, go to Resources > Active Bookable
Resources view > and select +New .
2. Set Resource Type to Pool .
3. Set Pool Type to Facility .
4. Enter a Name.
5. Set Star t Location and End Location to Organizational Unit Address .
6. Assign an Organizational Unit from the lookup to represent the location of the hotel.
a. The selected organizational unit must have latitude and longitude values.
7. Set Derive Capacity from Group Members to No .
a. This time, we manually override capacity to allow for overbooking, rather than have the number of
facilities in the pool (for instance, the number of rooms in the hotel) dictate capacity.
Step 2. Create and add pool members
1. Create resources with Resource Type set to Facility to represent each room in the hotel.
2. Go to the hotel pool resource you created in the previous step and add each room resource as a child by
selecting Related > Resource Children .
Step 3. Manually add additional capacity
1. While on the hotel pool resource, go to Show Working Hours at the top of the form.
2. Select Show Capacity .
3. Enter the desired capacity. In this example, we use a capacity of six though our pool has only five child resources
(in other words, five rooms).
Configuration considerations
Resource pools will not display in schedule assistant results for requirements where Work Location =
Onsite . By default, work order-related requirements are set to onsite. Only requirements with a Work
Location = Facility or Location Agnostic will show up in schedule assistant results.
Crew resources and pool resources cannot be made children of a pool.
Location of Pool Members : If a resource is the child of a pool through a bookable resource groups
(bookableresourcegroup) record, the location of the child resource is taken from the pool. Additionally, if a
resource pool is related to a facility or facility pool resource through bookable resource association
(msdyn_bookableresourceassociation), the location is taken from the facility or facility pool.
When a pool resource has Derive Capacity from Group Members set to Yes , the pool's capacity for a
given time slot is effected by:
the number of pool members
the dates the pool members are part of the pool and
the working hours of the pool members
Choosing the right resource type
Whether the pool resource, pool members, or both show in schedule assistant results depends on the resource
types selected on a requirement record. If the resource type Pool is selected, and if the resource pool has
availability along with all other matching constraints expressed on the requirement, the pool itself can return as an
option to book. If the resource type Pool is not selected on the requirement, pool members can still return in the
results, presuming that the pool member’s resource type is checked off on the requirement. If no resource types are
selected, all resource types are considered.
For example, consider a requirement that only has resource type Account selected, a resource with resource type
Pool , and pool type of Account, Contact, User . In this example, the pool resource itself will not be returned in the
schedule assistant search, but the child pool members (with resource type Account ) will be returned by the
schedule assistant.
Using characteristics with pools
The same logic that is applied to the requirement resource type attribute applies to all constraints. Consider the
following example: a requirement has a required characteristic called Electric Vehicle Mechanic . There is a pool
that has the characteristic Mechanic , but not Electric Vehicle Mechanic . The pool has a child member that has
both the characteristics Mechanic and Electric Vehicle Mechanic .
When running the schedule assistant on the requirement, presuming availability, the pool resource itself will not be
presented to book since it is missing the required characteristic (Electric Vehicle Mechanic ), but the pool
member will be presented since the resource has the necessary characteristic for this job. The reason for this is that
the pool members should have all the attributes expressed on the pool, but they may have additional attributes as
well if they have specialties. Since not all the pool members have these additional attributes, like the Electric
Vehicle Mechanic , if this requirement gets booked to the pool and the one pool member who has this
characteristic is not available as the appointment time nears, what happens? Who will be assigned to this booking
currently booked to the pool? You may not have other resources to pickup the work. Therefore, the idea is to book
the actual resource itself to ensure that this unique job has coverage.
Additional notes
Requirement groups can't be dragged and dropped or substituted
When changing the working hours of a resource, capacity is not recalculated
Pool availability affects member availability and vice versa
Being part of a pool can severely limit a resource's ability to be scheduled. Resources cannot be expected to operate
as part of a pool and independently at the same time. If a pool resource itself is booked to capacity for a given time
slot, pool members will not show as available for that time slot and vice versa. If all pool members are booked for a
given time slot, the pool will not show as available for that time slot.
Example 1: Pool resource only
When searching for availability, the schedule assistant will look at the pool capacity set on the pool resource, and
will subtract existing bookings that are booked to the pool resource itself, or any of the pool’s child resources.
Consider a pool's capacity is set to 10. Let’s also assume there are no child resources for this pool. When finding
availability using the schedule assistant, the pool will be looked at as if there are 10 resources associated to the
pool.
For example, let’s say you are searching for a 30-minute requirement. If the pool has 10 bookings from 10 to 10:30,
the pool will not be recommended for the requirement between 10 AM and 10:30 AM. This is because the total
capacity of the pool at 10 AM is 10, but there are 10 bookings scheduled to this pool resource at 10 AM. However, if
the pool only has 9 bookings between 10 AM and 10:30 AM, then the pool can be recommended.
Example 2: Pool resource and child resources
If the bookings for the pool and its members exceed the total capacity established on the pool, every resource in
the pool and the pool itself is considered unavailable. But if there is overall aggregate availability, then each
resource still has its own availability calculation. For example, consider if a pool resource has a capacity of 10, and
there are 9 bookings between 10 AM and 10:30 AM on the pool resource, and the child resource has one booking
from 10 to 10:30. In this case, since in aggregate the pool and its children have as many or more bookings (10)
than the capacity on the Pool (10), the entire pool and its child resources are considered unavailable for that
timeframe (10:00 AM to 10:30 AM).
However, if the pool resource has 8 bookings and the child resource has 1 booking, since this is a total of 9
bookings, the pool and its child resources will not be removed between 10 and 10:30. In this case, the pool itself
will show as available, however the child resource will not return as available since there is already a booking at 10
AM for the child resource.
Pools vs. crews: when to use each?
One main difference between pools and crews is crews are expected to do work together and bookings cascade (at
least by default). This means scheduling a crew will create bookings for crew members, whereas booking a pool
does not create bookings for pool members. Additionally, crews can be a compilation of different types of resources
such as a person and a piece of equipment. In contrast, pools are designed to be homogeneous meaning entirely
people, equipment, or facilities.
Schedule within time constraints
10/14/2019 • 7 minutes to read • Edit Online
When scheduling a work order, case, quote, or any entity enabled for scheduling, you can set date and time
parameters to control when the requirement is booked.
This is done by entering date and time values on the work order form in the preference section, or similar fields on
the requirement form if you're scheduling entities other than work orders.
For instance, we will consider the following scheduling scenarios throughout this topic:
Scenario 1: Schedule between two dates
An installation work order must be scheduled and is expected to be completed this week.
Example: 9/10/2019 - 9/15/2019
Enter Date window star t and Date window end
Considered by schedule assistant and Resource Scheduling Optimization (RSO)
Scenario 2: Schedule between two times of day
A diagnosis and repair work order must be scheduled before the end of the day tomorrow.
Example: 9:00 AM - 5:00 PM
Enter Time window star t and Time window end
Considered by RSO
Scenario 3: Schedule between two dates and times
An inspection work order should be automatically scheduled for completion in the afternoon some day within the
next two weeks.
Example: 9/10/2019 9:00 AM - 9/11/2019 5:00 PM
Enter Time from promised and Time to promised
Considered by the schedule board, schedule assistant, and RSO
Let's configure these 3 scenarios to understand how dispatchers can schedule work orders within time constraints.
Prerequisites
Any version of Dynamics 365 Field Service.
Understand that Resource Scheduling Optimization considers all date and time parameters, but the schedule
board and schedule assistant do not. See the scenarios at the beginning of this topic to understand which
scheduling methods consider which date and time parameters.
This will automatically populate the From Date and To Date fields on the related work order resource
requirement and vice versa. This is true for the other fields in the Preferences section as well, such as Time
Promised and Time Window .
When attempting to schedule this work order with the schedule assistant - from either the Book button on the
form or from the Find Availability search on the schedule board - these date values will populate the Search
Star t and Search End filters. Resources that are available for the entire duration of the work order within the date
range will display as options.
NOTE
If the current time (time of scheduling) is later than the search start, search start will become the current time because you
cannot schedule a work order in the past.
Scenario 2: Schedule between two times of day
In this next scenario, a diagnosis and repair work order must be scheduled before the end of the day tomorrow.
To schedule based on a date and time, simply complete Time From Promised and Time To Promised on the
work order.
These values will be passed to the related requirement and appear as new filters when the schedule assistant is
triggered.
Time From Promised and Time To Promised implies that the estimated arrival time must fall within the time
range for which the resource has availability for the duration of the work order. This is based on the resource's
working hours, and is not necessarily completed before the end of Time To Promised . This differs from date
window start and end.
Furthermore, when manually dragging and dropping a requirement on the schedule board, a popup will warn the
dispatcher if the estimated arrival time falls within the promised time window or not.
NOTE
Time From Promised and Time To Promised is a continuous time range that does not consider the service organization's
or the customers' working hours. For example, if the time from and to promised is set to 9/10/2019 9:00 AM - 9/15/2019
5:00 PM, then any time during this range is eligible as long as resources are working.
Finally, setting up service level agreements (SLAs) for work orders will populate the time from and time to
promised fields in order to help dispatchers schedule to meet the SLAs.
When setting up RSO, make sure Scheduling Windows is a constraint in the optimization goal you are running
RSO with. For more information, see the topic on RSO configuration. If you're new to RSO, see the RSO quickstart
guide.
After running RSO, you'll see the results on the schedule board. In our example, the work order could have been
scheduled for either 9/12 or 9/13 based on the date window of the work order; whichever day it is scheduled, it
should be scheduled in the afternoon between 12:00 PM and 5:00 PM.
Configuration considerations
Modify calendar
You can define a time zone on the requirement to help dispatchers view schedule assistant results in the time zone
of the customer, and it allows for dispatchers to work in different time zones than the resources. From the
requirement, select Modify Calendar in the ribbon menu, then choose a Time Zone from the dropdown, then
save and close.
When you book the requirement, the start times of the schedule results will reflect the chosen time zone.
Booking rules
Dynamics 365 Field Service can perform custom booking rule validations, called Booking Rules , when creating a
booking with the schedule board or schedule assistant. Booking rules are custom JavaScript functions that run prior
to the Bookable Resource Booking record being created. The JavaScript function can accept a parameter that
will contain information for the Bookable Resource Booking record and must return a JavaScript object with the
required properties.
In the context of scheduling within time parameters, you can create a Booking Rule that performs custom
validation on the date and time fields or even custom date and time fields you create. For example, you could create
a rule that checks if a booking starts on a Monday, Wednesday, or Friday, and if it does not, display an error
message to the dispatcher on the schedule board. For more information, see the topic on booking rules
Scheduling lock options
Scheduling lock options prevent RSO from rescheduling a booking to a different time or resource. From the
booking, simply set a value in the scheduling lock options field.
Fulfillment preferences
Fulfillment preferences let you choose how schedule assistant results are displayed, like with neat hourly
appointments or morning and afternoon time windows. They can help dispatchers schedule work orders during
times that are convenient for the customer. For more information, see the topic on fulfillment preferences.
Booking setup metadata
You can define which fields on the entity enabled for scheduling should serve as the start and end dates for the
related requirement. This is done in booking setup metadata. Go to Resource Scheduling > Settings >
Administration > Enable Resource Scheduling for Entities , then double click an enabled entity.
In the attribute mapping section, you can choose any date and time fields on the entity.
For example, imagine you enable Leads for scheduling. You can choose two date fields on the Lead entity (either
existing or custom fields) that will automatically be the from and to dates when you attempt to schedule the Lead.
Additional notes
NOTE
Using Date Window Star t and Date Window End means the work order must be completed during the date range based
on the total duration of the requirement. For example, if you expect a work order to take 25 hours, but the date range is 1
day (24 hours), then no resources will return as results because no one can complete the 25 hour work order in 1 day, even if
he or she works 24 hours each day as working hours.
Variable calendars : Out of the box, Dynamics 365 Field Service cannot consider variable calendars where
certain days and times are restricted or required for scheduling. For example, imagine a customer who
requires on-site service would like the work order to be scheduled on Mondays, Wednesdays, or Fridays
between 12:00 PM and 5:00 PM each day. This can't be achieved with the out-of-the-box date and time
preference fields or calendar. As a possible workarounds, use notes to inform the dispatcher of the
customer's time preferences, or to use Booking Rules to create custom logic with JavaScript.
Scheduling entities other than work orders : The time parameter fields on the work order - Date
Window Star t and Date Window End , Time From Promised and Time To Promised , and Time
Window Star t and Time Window End - all exist on the resource requirement entity. This means you can
use these fields when scheduling entities other than work orders, such as cases, quotes, and custom entities.
Advanced filters for the schedule assistant in
Universal Resource Scheduling
7/7/2020 • 2 minutes to read • Edit Online
Beyond the standard filters exposed within the schedule assistant's filter panel, you'll find a few advanced filters that
provide additional granularity for scheduling needs.
In this article, we'll take a look at the schedule assistant's advanced filters:
Real-time mode
Ignore travel time
Allow overlapping
Ignore duration
Ignore proposed bookings
NOTE
For more information, see the video Schedule Assistant: advanced filters.
Prerequisites
The schedule assistant is a part Universal Resource Scheduling, which is included and installed with Dynamics 365
Field Service, Project Service Automation, and Customer Service.
Real-time mode
Filtering by real-time mode can be useful in emergency scenarios where a dispatcher needs to book the closest
possible resource, so that they can arrive onsite more quickly.
The schedule assistant will use the location of the technician's mobile device when calculating the estimated travel
time to arrive at the work order location. The "real time" location is displayed on the schedule board map as a truck
icon.
The mobile device's location is collected from the time of the last sync to a defined threshold in the past. The time
threshold for when the acceptable location of a previous sync is defined in the Geo Location Expires After X
Minutes field found in Resource Scheduling app > Settings > Administration > Scheduling parameters .
See the article on geofencing to learn how to set up location auditing and sharing.
Configuration considerations
Default values and sorting
When the schedule assistant is triggered, you'll see that some fields have default values. For example, schedule
assistant search results are listed in alphabetical order by default. These default values can be changed in the
Schedule Assistant Retrieve Constraints Quer y .
To get there, double-click on the schedule board tab. Open default settings in the top right. Under the schedule
types section, select the gear icon next to Default Retrieve Constraints Quer y .
From here, you can edit the XML to define how the schedule assistant searches for each entity that is available for
scheduling.
Additional notes
Do not edit the schedule assistant Retrieve Constraints Quer y for the territory shown below. It can damage the
schedule assistant logic.
<Territories ufx:select="lookup-to-list(Requirement/msdyn_territory)" />
Enable an entity for scheduling in Universal Resource
Scheduling
8/14/2019 • 6 minutes to read • Edit Online
Dynamics 365 Field Service uses Universal Resource Scheduling to schedule work orders to the most appropriate
resources by enabling the work order entity for scheduling by default. Considering your business processes, other
entities may also be enabled for scheduling, including custom entities.
Enabling an entity for scheduling allows dispatchers to schedule that entity through the schedule board, the
schedule assistant, and even resource scheduling optimization (RSO).
In this article, we'll look at how to enable an entity for scheduling and show how it works on the schedule board.
For the purposes of this article, let's consider an example. A solar energy company must perform consultations over
the phone and on site at their customers' homes before a solar panel installation can take place because details
regarding the home's structure, location, and local laws need to be discussed as part of the qualification process.
The solar panel company would like to use the schedule board and other scheduling tools to assign leads to
appropriate sales resources in order to perform the consultation and qualification process with potential customers.
To configure this scenario, we will enable the Lead entity for scheduling and add a new requirement view to the
schedule board that specifically relates to lead resource requirements.
Prerequisites
Field Service v6.1+
Must be logged in as a user with Field Ser vice - Administrator or System Administrator security roles
You will see a list of entities that have been enabled for scheduling. Appointments , Projects , and Work Orders
are enabled for scheduling by default if you have Dynamics 365 Field Service or Project Service Automation
solutions installed.
You will see a section called Setup Wizard - Enable Scheduling that lets you set up a new entity for
scheduling. For the following fields:
Add Entity: Select the entity from the list of entities in your Dynamics 365 organization. For our example,
we will choose the Lead entity.
Booking Relationship: Select Create New Relationship .
Requirement Relationship: Select Create New Relationship .
NOTE
If you have previously created relationships from the entity to the bookable resource booking or resource requirement
entities, then they can be selected here as well.
Before scheduling a lead, a related resource requirement must be created. These can be created manually or
created by a custom workflow.
To create a resource requirement, go to the Related tab on the entity and choose Resource Requirements .
NOTE
As part of the Field Service solution, requirements are automatically created when work orders are created.
Enter the information that will provide details on what requirements are needed for a resource to be scheduled to
this lead. Details might include dates, duration, priority, and territory.
Once the requirement is created, you can book the lead to resources by selecting the Book button.
This will trigger the schedule assistant and display available resources that meet the criteria on the requirement.
If quick book is enabled for the entity, the Book button will trigger the quick scheduler panel, which also shows
available resources that meet the criteria on the requirement.
Once the lead is booked, a new Bookable Resource Booking record is created and is also shown as a related
entity.
Next, let's talk about scheduling lead requirements from the schedule board.
However, the views in the lower pane of the schedule board are simply system views and can be edited and added
to. It's common to add custom resource requirements views for work orders (or leads in our example). Let's create a
schedule board view that shows only leads to be scheduled.
Go to Settings > Customizations > Entities > Resource Requirement > Views .
Create a new view and add fields to the view that provide details for what you are scheduling. Use the drop-down
to capture fields from the entity (in this case, Lead ).
Name the view using the properties or Save As functions. In this example, we will call it our new view
"Unscheduled Leads."
Most importantly, edit the filter criteria to show the appropriate records. To ensure only the lead resource
requirements will be displayed, select the Lead entity and filter the records appropriately.
NOTE
You may have many lead records in the system, but if there are no requirements related to the leads, then no records will
show on the schedule board. Resource requirements will need to be created for each lead you want to schedule either
manually or through a workflow to auto create upon creation of a lead.
Configuration considerations
Onsite leads
If resources must perform work on site at the customer's location, travel time and distances should be considered
when scheduling. In these cases, we recommend using the work order entity, as it is designed for on-site service.
However, if you would like to schedule leads to be performed on site:
1. Create a lead.
2. Create a related resource requirement.
3. On the requirement, set Work Location to Onsite .
4. On the requirement, add Latitude and Longitude values. These serve as the lead location and can be
compared to the locations of resources in the system during scheduling.
1. (Optional) Consider going to the Lead Booking Setup Metadata and adding a default Work Location for
when lead requirements are related and mapping requirement latitude and longitude fields to lead latitude and
longitude fields for auto population.
Additional notes
If the entity you want to enable for scheduling is not displayed in the Add Entity list, go to the managed
properties of the entity (Settings > Customizations ) and set the Can be customized setting to True . For
more information, see our article on managed properties.
To turn off scheduling for a previously enabled entity, select Deactivate in the ribbon on the Booking
Setup Metadata record.
Share a schedule board tab
8/14/2019 • 3 minutes to read • Edit Online
You can have multiple schedule board tabs, each showing different resources and requirements. Typically, these are
divided by territory or lines of business.
A schedule board tab can be shared:
publicly, available to all schedule board viewers (mostly dispatchers),
privately for just the person who created it
only to specified people
By default, there exists a schedule board tab called Initial Public View that includes all resources and
requirements.
In this topic, we'll explore creating a new schedule board tab and sharing it with specific users.
Prerequisites
Field Service v6.1+
Universal Resource Scheduling v1.0.2+
Instructions
First we will walk through how to create a public and private schedule board tab, but then focus on sharing one
with specific people.
Go to Field Ser vice > Schedule Board and select the + in the top right to create a new tab.
The schedule board tab settings form will appear where you can choose various configurations for the tab.
The Shared With field controls who can see the tab.
Select Specific People .
Selecting Ever yone will expose the schedule board tab to all users who can access the schedule board. Selecting
Just Me will expose the schedule board to only the user who creates it.
Next, give appropriate security access to the users you want to share the schedule board tab with.
Go to Settings > Security and make sure each user has at least minimum user access to the Schedule Board
Settings entity as seen in the following screenshot. This can be achieved by manually editing the users' security
role or by assigning the users a copy of the Field Ser vice - Resource security role.
NOTE
We recommend giving relevant users minimum security level privileges for read, write, and create. Then use the Shared
With option (Everyone, Specific People, Just Me) on the schedule board tab settings to share appropriately. This is better
than using the Dynamics 365 security model, as that could lead to oversharing.
Next you'll need to choose the specific users to share the schedule board tab with.
Go to Advanced Find and look for Schedule Board Settings , then select Results. All schedule board tabs are
saved as records in the Schedule Board Settings entity.
This shows all schedule board tab records and you should see the one you just created. In our example, it's
"Schedule Board #3".
Double-click the record to go to the form, and select Share on the top ribbon.
Finally, use the pop-up screen to add users and teams to share the schedule board with. Any user or team added
here can see the schedule board tab, given they also have access to the schedule board.
See the following for an example of an acceptable URL to a specific schedule board tab.
https://fieldservice.crm.dynamics.com/webresources/msdyn_/fps/ScheduleBoard/scheduleboard.html?#tab=AE595A88-
A57C-E911-A95A-000D3A3B9A2B
Be sure to test the link by entering it into a browser. Note that people who follow the link will be prompted to log in
to Dynamics 365 Field Service if they aren't already logged in.
Additional notes
Even if a schedule board tab is shared with a specific user, that user must have the minimum user permissions
on the Schedule Board Settings entity to view it. Minimum permissions are included with the Field Ser vice
- Administrator , Field Ser vice - Dispatcher , and Field Ser vice - Resource security roles.
We recommend giving relevant users minimum security level privileges for read, write, and create. Then use the
Shared With option (Everyone, Specific People, Just Me) on the schedule board tab settings to share
appropriately. This is better than using the Dynamics security model, as that could lead to oversharing.
You can share a schedule board tab with a team for convenience.
To edit a schedule board, it must be shared with you and you must have write privileges.
Resource utilization on the schedule board in
Universal Resource Scheduling
8/14/2019 • 2 minutes to read • Edit Online
Dispatchers and service managers need to understand resource utilization to make better scheduling decisions,
whether those decisions entail assigning work orders to field technicians or reserving equipment for customer jobs.
Utilization is the amount of time a resource is scheduled to work. It is calculated as the percentage of booked time
versus working hours. In all schedule board views, utilization is automatically calculated and displayed in each
resource's cell.
In this topic, we will look at how resource utilization is calculated and displayed in both the Hours and Days views
of the schedule board.
Prerequisites
Utilization is calculated and displayed on the schedule board for all versions of Field Service.
Hours view
For each resource, utilization percentage is derived from Total Booked Hours divided by Total Working Hours
in the schedule board timeframe.
Total Booked Hours is the sum of the hours booked to the resource.
Total Working Hours is the sum of the resource's working hours.
NOTE
Working hours are defined on each Bookable Resource record. Go to Resource Scheduling > Resources . See the topic
on setting up bookable resources for more details.
These values will change based on how many hours, days, and weeks you are viewing, and these are edited by
selecting a view, a date range, and how many days to display.
This is because as you view more days, the bookings and working hours will vary.
In the hourly view, the total working hours will be the sum of the hours seen on the schedule board as you scroll
from the far left to the far right.
In the previous screenshot example, Matthew works a 12-hour shift from 9 AM to 9 PM, and this shift repeats for
5 days . Users will see this as they scroll from left to right across the schedule board.
Therefore, Matthew’s total working hours in this hourly view are 12 multiplied by 5, resulting in 60 hours.
If Matthew is booked for a single 6-hour work order, then his utilization is 6 divided by 60, resulting in 10 percent,
as shown in his resource card.
If the duration of the work order is increased to 12 hours, then his utilization is 12 divided by 60, resulting in 20
percent, as shown in the following screenshot.
Days view
In the Days view, the total working hours will be the sum of the hours seen on the schedule board.
In our example case, we see 10 days, so Matthew’s total working hours are 12 multiplied by 10, resulting in 120
hours.
Matthew already has a 12-hour booking for one day, so his utilization percentage becomes 12 divided by 120,
resulting in 10 percent.
Configuration considerations
Proposed and canceled bookings do not contribute to utilization
Though the field service process uses many field service booking statuses such as traveling, in progress, on break,
and completed, each of those relate to a booking status of either Committed , Proposed , or Canceled . The
purpose of a proposed status is to suggest work that needs to be confirmed, while the canceled status is used to
notify stakeholders that the booking is no longer scheduled.
For example, the In Progress status is categorized as Committed through the status field on the booking status
entity, as seen in the following screenshot.
Bookings that have a Proposed or Canceled booking status are ignored for utilization.
As seen in the following example, Brady was assigned a Proposed booking, but his utilization remained at 0
percent.
Sort schedule assistant results by utilization
When using the schedule assistant to book requirement groups, dispatchers have the option to sort results by
utilization.
Customize the schedule board with a custom
resource attribute
8/14/2019 • 6 minutes to read • Edit Online
The schedule board can be customized and extended to help you reach your business needs. Common examples
include customizing:
1. the resource cells where the resources' names, pictures, and utilization are listed by default
2. the fields in the filter pane where dispatchers choose the resources in a view
3. the sort options (also located in the filter pane) allowing dispatchers to sort the current resources on the the
schedule board based on various criteria.
Consider the following customization scenario:
Each bookable resource (field technician) has a cost based on factors like seniority and certification level.
Dispatchers would like to see the general cost of their resources, along with the ability to filter and sort by cost. This
is common for scenarios where an organization prioritizes scheduling internal employees over external contracting
parties, who are usually more expensive. Rather than use an exact resource cost, this scenario uses a score of 1
(lowest resource cost) to 10 (highest resource cost) and exposes the score:
In the resource cell, for viewing the cost with a graphical element
In the filter panel, to filter a by a maximum cost level for the desired resources
In the sort options, to sort from lowest to highest cost or vice versa
In this topic, we'll walk through how to configure this common example scenario.
Prerequisites
Field Service v6.2.1+
Universal Resource Scheduling v1.1.1+
NOTE
If you want to set these changes as the default for all schedule boards, after double-clicking a schedule board tab, select
Open Default Settings in the top right and make the code changes to Resource Cell Template , Filter Layout , and
Retrieve Resources Quer y .
Below is the new code snippet to copy and paste into the resource cell template, followed by an image that shows
the delta (highlighted in yellow) that can be used to modify an existing template. Replace fa-euro if you need a
symbol different from the euro.
<div class='resource-card-wrapper {{iif ResourceCellSelected "resource-cell-selected" ""}} {{iif
ResourceUnavailable "resource-unavailable" ""}} {{iif IsMatchingAvailability "availability-match" ""}}'>
{{#if imagepath}}
<img class='resource-image' src='{{client-url}}{{imagepath}}' />
{{else}}
<div class='resource-image unknown-resource'></div>
{{/if}}
<div class='resource-info'>
<div class='resource-name primary-text ellipsis' title='{{name}}'>{{name}}</div>
<entity name="bookableresource">:
For further context on schedule board extensibility, visit our topic that provides a deep overview of scheduling
extensibility.
See also
A sample walkthrough to help you learn how to implement extensibility.
Extensibility language syntax (UFX).
Extensibility-specific release notes.
Edit schedule board booking template
8/14/2019 • 4 minutes to read • Edit Online
When a requirement is scheduled to a resource, a booking record is created and displayed on the schedule board
during the respective resource's time slot. The fields displayed in the schedule board booking is called a Booking
Template and is editable.
Prerequisites
Field Service v6.1+
To edit the HTML that controls the booking template, double-click the name of the schedule board tab, then scroll
down to the Schedule Types section and select the entity on the left for which you would like to change the
booking template.
In this example, we will choose work order, and then find the Booking Template field at the end of the form.
Next, modify the booking template by deleting the existing value and entering HTML and CSS that can reference
fields from the Bookable Resource Booking entity and linked entities, such as the work order.
Here is an example that pulls values from the work order that relates to the booking.
<div style="line-height: 11px !important; width: 99%; overflow: hidden; display: block; text-overflow:
ellipsis;">
WO:
<B>{msdyn_msdyn_workorder_bookableresourcebooking_WorkOrder.msdyn_name}</B><br/>
Account: <b>
{msdyn_msdyn_workorder_bookableresourcebooking_WorkOrder.msdyn_account_msdyn_workorder_ServiceAccount.name}</b>
<br/>
Incident: <b>{msdyn_msdyn_workorder_bookableresourcebooking_WorkOrder.msdyn_primaryincidenttype}</b><br/>
Duration: <b>{duration} minutes</b><br/>
</div>
[Note!] To avoid typing mistakes, go to Customization > Entities > Bookable Resource Bookings and
copy the field names. Fields from the Bookable Resource Booking entity can be referenced directly using the
field name in curly brackets. Example: {duration} .
If you want to display a field from a linked entity, find the name of the N:1 relationship - for the work order entity,
it's msdyn_msdyn_workorder_bookableresourcebooking_WorkOrder - and add a period (.) followed by the
field name of the target entity. For example, the primary incident type field on the work order has a schema name
of msdyn_primar yincidenttype ; simply add this after the relationship schema and enclose the whole string with
curly brackets, as follows:
{msdyn_msdyn_workorder_bookableresourcebooking_WorkOrder.msdyn_primar yincidenttype}
Linking to yet another entity (like from work order to account) is also possible - simply connect the entities with
period, like in our previous example.
Following these instructions will edit the booking template for work order requirements displayed on this schedule
board tab. If you would like to edit the default booking template for all schedule board tabs, then select Open
Default Settings and edit the Booking Template field there.
NOTE
When < Default > is displayed in a schedule board tab setting field, this means the value is being dictated by the default
settings.
We also want our dispatcher to see whether a work order is a service call or another type of job. The customizer
has created a field new_isser vicecall on the work order entity, values are 0 or 1. Using the same approach as
above, we first draw a gray wrench as background, put an orange wrench on top and limit its size to 0%
(new_isservicecall = 0) or 100% (new_isservicecall = 1).
Go to Resource Scheduling > Administration > Scheduling Parameters and set Disable Sanitizing HTML
Templates to Yes . This is required to be able to include CSS statements into the booking templates.
Next, add the following HTML and CSS text to Booking Template field in Schedule Board Tab Settings .
<div style="line-height: 11px !important; width: 99%; overflow: hidden; display: block; text-overflow:
ellipsis;">
<div class="back-stars" style="color: #AAAAAA; position: relative; display:inline-block;">
<i class="fa fa-star" aria-hidden="true"></i>
<i class="fa fa-star" aria-hidden="true"></i>
<i class="fa fa-star" aria-hidden="true"></i>
<i class="fa fa-star" aria-hidden="true"></i>
<i class="fa fa-star" aria-hidden="true"></i>
<div class="customerrating" style="width:
{msdyn_msdyn_workorder_bookableresourcebooking_WorkOrder.msdyn_account_msdyn_workorder_ServiceAccount.new_custo
merrating}0%; color: #FFBC0B; position: absolute; top: 0; left:0; overflow: hidden; display:-webkit-box">
<i class="fa fa-star" aria-hidden="true"></i>
<i class="fa fa-star" aria-hidden="true"></i>
<i class="fa fa-star" aria-hidden="true"></i>
<i class="fa fa-star" aria-hidden="true"></i>
<i class="fa fa-star" aria-hidden="true"></i>
</div>
</div>
<div class="repair-back" style="color: #AAAAAA; position: relative; display:inline-block; padding-left:10px;
vertical-align:text-top;">
<i class="fa fa-wrench" aria-hidden="true"></i>
<div class="repair" style="width:
{msdyn_msdyn_workorder_bookableresourcebooking_WorkOrder.new_isservicecall}00%; color: #FFBC0B; position:
absolute; top: 0; left:0; padding-left:10px; overflow: hidden; display:-webkit-box">
<i class="fa fa-wrench" aria-hidden="true"></i>
</div>
</div>
<br/>
WO:
<b>{msdyn_msdyn_workorder_bookableresourcebooking_WorkOrder.msdyn_name}</b><br/>
Account: <b>
{msdyn_msdyn_workorder_bookableresourcebooking_WorkOrder.msdyn_account_msdyn_workorder_ServiceAccount.name}</b>
<br/>
Incident: <b>{msdyn_msdyn_workorder_bookableresourcebooking_WorkOrder.msdyn_primaryincidenttype}</b><br/>
Duration: <b>{duration} minutes</b><br/>
</div>
When building these advanced booking templates, make sure to test on multiple browsers and also consider
accessibility.
See also
Add custom resource attributes to the schedule board
Booking alerts in Universal Resource Scheduling
8/14/2019 • 3 minutes to read • Edit Online
While managing resources and scheduling, dispatchers must be aware of important updates and status changes to
ensure accurate schedules and timely job completion. For example, a dispatcher needs to know if a field technician
is running late or that prerequisites for a job have not been met so that they can take appropriate actions. Beyond
scheduling, dispatchers may also need to ensure billing and customer satisfaction concerns are handled.
In Dynamics 365 Field Service and in Universal Resource Scheduling, Booking Aler ts bring attention to important
notifications so that dispatchers can schedule with confidence. Booking alerts display notes and reminders on the
schedule board, and can relate to bookings, work orders, users, and other entities. They can be triggered based on
timers, set alarms, or workflows.
Prerequisites
Field Service v6.1+
Field Ser vice - Dispatcher security privileges
Subject and Description define the message that appears on the alert.
Priority can be used for additional logic, but won't trigger any specific behavior.
Regarding allows the user to link the alert to a specific record. For any entity, the booking alert will
immediately show up on the record's timeline. However, only upon reaching the Due Date , the alert will
also show up on the schedule board's detail pane Aler ts tab.
Assignees is the field where you can assign one or more people. Each assignee can choose to snooze or
dismiss the alert.
NOTE
When setting the Regarding field, pay attention to the entity type that you select. By default, the work order, the associated
resource requirement, and the booking have the same name. On top of the Regarding field, you can use a filter to limit
results to the desired entity.
The icon indicates the number of active alerts for that booking; clicking it expands or collapses the details. Snooze
and Dismiss work the same way as in the panel.
Additional notes
By creating the booking alert, the system automatically creates one Booking Aler t Status record for every
assignee. This allows the affected users to individually snooze (there is a field called Next Time To Show )
or dismiss alerts. When a user dismisses the alert, the Booking Aler t Status records are deactivated. When
every assignee dismisses the alert, its Activity Status field is set to Completed .
In most situations, the user will not create the alert manually. Instead, Power Automate or a workflow can be
used to automate the record creation upon certain events.
When deleting records, keep the relationship Booking – Booking Aler t – Booking Aler t Status in mind.
By default, you can't remove a booking that has booking alerts associated to it.
You can edit the fields inside a booking alert by editing the Booking Aler t Template in the schedule board
tab settings. For more information, visit the topic on schedule board tab settings.
Schedule board tab settings
8/14/2019 • 12 minutes to read • Edit Online
Schedule board tab settings allow you to define the layout and functions of schedule board tabs.
There are 3 ways to access a schedule board's tab settings:
1. Double-click the name of the schedule board tab.
2. While viewing the schedule board tab, select the gear icon in the top right of the schedule board.
3. While viewing the schedule board tab, select the settings icon > Open Tab Settings - see the following
screenshot for reference.
When you access the schedule board tab settings, you'll see the following:
Name: This is the name displayed at the top of the schedule board.
Shared With: Decides which users can view the schedule board tab
Everyone
Specific People: after choosing this option, you can select the specific people to share the schedule board
with by doing an advanced find of the Schedule Board Settings entity and sharing the related schedule
board record with the specific users.
Just Me
NOTE
Users with Field Ser vice - Administrator , Field Ser vice - Dispatcher , and Field Ser vice - Resource security roles can
edit schedule board tab settings of schedule boards they create or are shared with them (meaning the Shared With field =
Ever yone or Specific People AND the schedule board is shared with their user record).
Open Default Settings: Lets you choose the default tab settings when new schedule boards are created. When
values in a particular schedule board tab setting show < Default View > , this means the value is coming from
the default tab settings. As seen the following screenshot, when the Open Default Settings button is selected,
the < Default View > values are replaced by the actual values and you are now editing default schedule board
tab settings.
Reset to Default: This will reset the current tab setting values to the values outlined in the default settings.
Map settings
The Map Settings section is where you specify the placement of the map and the views displayed when selecting
or hovering over map records.
Map view tab placement
When set to Filter Pane , the map will be placed on the left-hand side. This allows schedulers to see both the map
and the details of the selected record at the same time.
When set to Details Pane , the map will be placed on the right-hand side. This allows schedulers to see both the
filter pane and the map at the same time.
To illustrate how these colors affect the schedule board, see the following example. In our example, we have a day
view of the schedule board where each resource works 12 hours each day, and the range is 2 days. The colors are
configured as follows:
Fully Booked: Blue because the total booking duration (12 hours) equals the working hours for that
particular resource's day.
Par tially Booked: Light Blue diagonal lines because the total booking duration (7 hours) is less than the
working hours for that particular resource's day.
Overbooked: Red because the total booking duration (14 hours) exceeds the working hours for that
particular resource's day.
Not booked: White because no bookings exist for that resource for that day.
Schedule assistant
Search for
This setting decides the default value for the Search For field in the schedule assistant filter pane.
Set to All resources to search for all applicable resources in the system that meet the schedule assistant
filters for the requirement.
Set to Resources visible on board to search for resources that meet the schedule assistant filters for that
requirement and meet the current schedule board resource filters. This schedule assistant filter value can still
be manually changed by the dispatcher at the time of scheduling. If a scheduler is responsible for a specific
schedule board and specific resources, then we recommend Resources visible on board because this
ensures the scheduler cannot schedule requirements to other resources he or she is not responsible for.
For smaller organizations or organizations with less rigid resource and line of business divisions, the All
resources setting will allow schedulers to search across all applicable resources across the entire
organization.
Unavailable resources
This setting determines how unavailable resources appear when the schedule assistant is triggered.
Set to Unavailable resources do not appear to ensure that resources who do not meet schedule
assistant filter criteria are temporarily removed from the view of available resources.
Set to Unavailable resources appear dimmed (when searching for resources visible on board) to
ensure that resources who do not meet schedule assistant filter criteria remain on the schedule board, but
appear dimmed. For schedule boards with many resources, using the Unavailable resources do not
appear setting can reduce the need to scroll and make it easier for scheduler to compare available
resources.
Book based on
Though booking an onsite requirement (typically a work order) will always have a total duration that equals travel
time plus requirement duration, this setting changes the schedule assistant visualization to make it easier to
understand when travel time starts and when the estimated arrival time is.
Set to Star t of Travel to visualize the booking start as when travel begins.
Set to Estimated Arrival to visualize the booking start as when the resource is estimated to arrive on site.
Consider whether the scheduler is communicating with the customer in real time; customers are typically
more interested in when the resource will arrive at their location, so administrators should make it easier for
the scheduler to communicate this time by selecting the Estimated Arrival . See this blog post for more
details.
Available Color, Partially Available Color, Unavailable Color
The colors selected in the schedule assistant section represent how resource availability (or unavailability) appears
when the schedule assistant is triggered from the days, weeks, or months view.
Other settings
Requirement Page Count
This controls the maximum number of resource requirement records displayed on a single page in the lower pane
of the schedule board. See the following screenshot for reference.
Filter Layout
This controls the fields displayed in the filter pane on the left-hand side of the schedule board. These fields are used
to filter which resources are displayed on the board.
Schedule types
The following settings are dependent on the entity being scheduled. Though requirement records are always
scheduled, the requirement can be related to work orders, cases, custom entities, or related to nothing at all. First,
select the scheduleable entity on the left to edit the settings for when that entity is scheduled. Select None to edit
default settings and the settings for when a requirement is scheduled by itself, unrelated to a work item such as
work orders or projects.
Booking Tooltips View
Select the system view that dictates the fields displayed when hovering your mouse over a booking.
Booking Template
HTML and CSS that controls the fields inside a booking time slot on the schedule board.
Here is the default work order HTML:
Requirement Panels
Use this section to control the requirement views at the bottom of the schedule board. Select a requirement system
view, enter a name, select the plus icon (+) to add it, then select Apply. After adding views, you can change the order
in which they appear on the schedule board with the up and down arrows.
Field Service and Universal Resource Scheduling come with default requirement views such as "Open
Requirements" and "Unscheduled Work Orders". Select the Hide default requirement panels to remove them
from the lower pane.
Additional notes
Some of the extensible schedule board settings are only available on the hourly view, and not on the daily, weekly,
and monthly views. The following configuration settings are only available in the hourly view:
Non-working hours color.
Booking details view.
Booking tooltips view.
Booking template.
Preview the new and improved schedule board in
Universal Resource Scheduling
4/1/2020 • 3 minutes to read • Edit Online
A fully redesigned schedule board is available as a public preview in the April 2020 release of Dynamics 365 Field
Service. In this article, we'll take a look at what's new, and how to preview the new schedule board in your
environment.
The new schedule board is faster, with better usability, and it lays the foundation for new capabilities for multi-day
scheduling and intelligent interactions.
Performance
The new schedule board is faster and more responsive when:
Loading the schedule board
Selecting schedule board tabs
Dragging and dropping work orders
Rescheduling bookings
Usability and accessibility
The new schedule board is a Power Apps Component Framework (PCF) control built on the Unified Client Interface,
making it more flexible, supportable, and accessible. The new schedule board will work better on different screen
sizes and across form factors.
New color schemes and ways of depicting travel time make it easier for dispatchers to see statuses and details.
For instance, the previous screenshot shows a new "ghost booking" feature that helps dispatchers know if a
booking will fit into a schedule before the booking is even scheduled.
Foundation for new capabilities
The new schedule board provides the foundation for future releases that will provide dispatchers insights and
recommendations to improve schedules.
Prerequisites
NOTE
The new schedule board is released as a public preview in April 2020. It has limited capabilities during the preview period.
1. Go to Controls tab.
2. Enable it for web experience.
3. Select the edit button then Enable Preview .
4. Publish changes.
Go to the schedule board and use the toggle button in the top right of the schedule board to switch between the
current and preview schedule boards.
Configuration considerations
During preview, the new schedule board is only available in English.
The new schedule board will currently only appear within the Universal Resource Scheduling app - not yet
available in other apps.
After enabling the preview, if you uninstall the Universal Resource Scheduling solution, you'll have to disable the
schedule board again.
The new schedule board is currently supported on Microsoft Edge, Chrome, and Firefox browsers. Currently,
Internet Explorer 11 is not supported.
When to use the new versus current schedule board
Users who perform simple drag and drop scheduling or users who only need to view the schedule board can use
the new schedule board during preview. Other users should continue to use the current schedule board.
Continue to use the current schedule board for common functions like:
Creating and deleting schedule board tabs.
Schedule board tab settings.
Schedule board configurations like number of days in a view or applying filter territories.
Map view and scheduling.
Days, weeks, and months view.
Add new schedule board to custom sitemap area
When using a custom sitemap or an app module, you'll need to update the sitemap to consume the new schedule
board preview.
The following snippet is what it looks like before:
<SubArea Id="msdyn_ScheduleBoardSubArea" ResourceId="SitemapDesigner.NewSubArea"
VectorIcon="$webresource:msdyn_/Icons/SVG/Calendar.svg"
Url="$webresource:msdyn_/fps/ScheduleBoard/ScheduleBoard.html"
Client="All,Outlook,OutlookLaptopClient,OutlookWorkstationClient,Web" AvailableOffline="true" PassParams="false"
Sku="All,OnPremise,Live,SPLA">
ID:
msdyn_scheduleboardtoggle
Additional notes
The schedule board is only supported in Unified Client Interface web (Field Service v8.x+) and not in tablets or
phones.
Uninstall schedule board preview
To uninstall the new schedule board preview solution ("Resource Scheduling Controls"), perform the following
steps.
1. Go to the Schedule Board Settings entity customization form.
2. Remove the new schedule board preview control from the grid.
3. Save and publish the changes.
4. Go to the resource scheduling app, clear the browser's cache, and reload schedule board. The old schedule
board will load without the preview toggle in the top right of the screen.
5. Once the solution is uninstalled, the new schedule board will not be available for the environment until you
upgrade your Field Service app to the latest available version.
URS extensibility updates
10/1/2019 • 4 minutes to read • Edit Online
October 2018
May 2018
April 2018
February 2018
December 2017
July 2017
October 2018
Intervals
The schedule assistant now supports a feature called intervals. When searching for availability using a single
requirement (or a requirement group), the requirement can be related to a fulfillment preference ( msdyn_timegroup
) record, through the lookup field on the requirement called fulfillment preference ( msdyn_timegroup ). On the
fulfillment preference record, there are settings to define what intervals ( msdyn_interval ) the results should be
rounded to, and how many results a scheduler should see per interval ( msdyn_resultsperinterval ) when using the
schedule assistant list view. There are also other settings related to intervals, such as ( msdyn_intervalsbegin ) and (
msdyn_resetpertimegroupdetail ), but there isn't support to change these values in the filter control of the schedule
assistant.
When scheduling a requirement group, the filter control is not yet extensible. Therefore, this feature will be
available to everyone out of the box when scheduling requirement groups even if the schedule assistant filter
layout was customized.
May 2018
Resource cell template
Hide resource image
The default resource cell template shipped in this update includes support for automatically hiding the resource
image if the resource row in the Schedule Board is configured to a small height. If you have a custom resource cell
template, add the below template updates to your resource cell template configuration record.
The first and last line are newly introduced to light up the functionality. The updated markup to hide the resource
image:
The first line is new. The updated markup to hide the second row of text in the template:
April 2018
Retrieve Constraints Query
Ignore proposed bookings
The default Retrieve Constraints Query shipped in this update includes a default value for the Ignore Proposed
Bookings parameter used by the Schedule Assistant. To change the default value for this parameter, or if you have a
custom Retrieve Constraints Query, update or add the below new property to the Requirement bag transformation
part in your Retrieve Constraints Query configuration record.
The added IgnoreProposedBookings property:
<IgnoreProposedBookings ufx-type="bool">true</IgnoreProposedBookings>
December 2017
Retrieve Resources Query
Schedule Board visible date range
Included in this update, the Retrieve Resources Query gets as input the visible date range of the Schedule Board.
This lets the query use the board's date range in its database queries. The default Retrieve Resources Query
shipped in this update has not changed. However, you can now customize the query to depend on the board's
visible date range.
The updated input parameters available in the XPath $input variable are ScheduleBoard/StartDate and
ScheduleBoard/EndDate .
The below snippet (not shipped) shows how the new input parameters can be used to query the total number of
bookings per resource in the date range visible on the board.
<filter>
<condition attribute="statecode" operator="eq" value="0" />
<condition attribute="starttime" operator="le">
<ufx:value select="$input/ScheduleBoard/EndDate" attribute="value" />
</condition>
<condition attribute="endtime" operator="ge">
<ufx:value select="$input/ScheduleBoard/StartDate" attribute="value" />
</condition>
</filter>
</link-entity>
The below snippet (not shipped) shows how the Resource Cell Template can then be customized to show the total
number of bookings.
When changing the dates on the Schedule Board, the Resource Query is not automatically executed again.
Rather, you must click the search button to re-execute the search using the new Schedule Board visible dates.
For more context, here is a blog post on the subject - https://blogs.msdn.microsoft.com/crm/2017/12/15/new-
use-schedule-board-date-ranges-in-custom-queries-in-universal-resource-scheduling/
July 2017
The July 2017 update for URS was the initial release for extensible queries, custom filter layouts, and resource cell
template
Extend Universal Resource Scheduling actions to use
your preferred geospatial data provider (Field
Service, Project Service Automation)
10/1/2019 • 2 minutes to read • Edit Online
You can create a custom plug-in and register on the Universal Resource Scheduling actions that provide geospatial
functionality to use data from a data provider of your choice instead of the default Bing Maps API.
The following Universal Resource Scheduling actions provide geospatial functionality in Dynamics 365 Field
Service and Dynamics 365 Project Service Automation:
msdyn_GeocodeAddress for geocoding addresses
msdyn_RetrieveDistanceMatrix for calculating travel times and distances between two locations.
The Field Service and Project Service Automation solutions contain a plug-in registered on these two actions that,
by default, uses the data provided by Bing Maps API to perform geospatial operations.
Create custom plug-in to use your preferred geospatial data provider
See also
Register and deploy custom plug-in to use your preferred geospatial data provider
Sample: Custom plug-in to use Google Maps API as geospatial data provider
Universal Resource Scheduling
Create custom plug-in to use your preferred
geospatial data provider
10/1/2019 • 5 minutes to read • Edit Online
This topic provides information about the two geospatial actions in Universal Resource Scheduling, how to create a
custom plug-in for the two geospatial actions, and provides examples from a sample custom plug-in on using
Google Maps API for geospatial data.
try
{
// If a plugin earlier in the pipeline has already geocoded successfully, quit
if ((double)OutputParameters[LatitudeKey] != 0d || (double)OutputParameters[LongitudeKey] != 0d)
return;
tracingService.Trace("Checking geocodeResponse.Result...\n");
if (geocodeResponse.Results != null)
{
if (geocodeResponse.Results.Count() == 1)
{
tracingService.Trace("Checking geocodeResponse.Result.Geometry.Location...\n");
if (geocodeResponse.Results.First()?.Geometry?.Location != null)
{
tracingService.Trace("Setting Latitude, Longitude in OutputParameters...\n");
}
else throw new ApplicationException($"Server {GoogleConstants.GoogleApiServer} application
error (missing Results[0].Geometry.Location)");
}
else throw new ApplicationException($"Server {GoogleConstants.GoogleApiServer} application error
(more than 1 result returned)");
}
else throw new ApplicationException($"Server {GoogleConstants.GoogleApiServer} application error
(missing Results)");
}
catch (Exception ex)
{
// Signal to subsequent plugins in this message pipeline that geocoding failed here.
OutputParameters[LatitudeKey] = 0d;
OutputParameters[LongitudeKey] = 0d;
OutputParameters[LongitudeKey] = 0d;
//TODO: You may need to decide which caught exceptions will rethrow and which ones will simply signal
geocoding did not complete.
throw new InvalidPluginExecutionException(string.Format("Geocoding failed at {0} with exception --
{1}: {2}"
, GoogleConstants.GoogleApiServer, ex.GetType().ToString(), ex.Message), ex);
}
try
{
// If a plugin earlier in the pipeline has already retrieved a distance matrix successfully, quit
if (OutputParameters[MatrixKey] != null)
if (((EntityCollection)OutputParameters[MatrixKey]).Entities != null)
if (((EntityCollection)OutputParameters[MatrixKey]).Entities.Count > 0) return;
tracingService.Trace("Checking distancematrixResponse.Results...\n");
if (distancematrixResponse.Rows != null)
{
tracingService.Trace("Parsing distancematrixResponse.Results.Elements...\n");
}
else throw new ApplicationException($"Server {GoogleConstants.GoogleApiServer} application error
(missing Rows)");
}
catch (Exception ex)
{
// Signal to subsequent plugins in this message pipeline that retrieval of distance matrix failed
here.
OutputParameters[MatrixKey] = null;
//TODO: You may need to decide which caught exceptions will rethrow and which ones will simply signal
geocoding did not complete.
throw new InvalidPluginExecutionException(string.Format("Geocoding failed at {0} with exception --
{1}: {2}"
, GoogleConstants.GoogleApiServer, ex.GetType().ToString(), ex.Message), ex);
}
// For debugging purposes, throw an exception to see the details of the parameters
CreateExceptionWithDetails("Debugging...", InputParameters, OutputParameters, SharedVariables);
}
After you have written your custom plug-in code, build the project to generate a plug-in assembly (.dll), which will
be used to register the plug-in on the Universal Resource Scheduling geospatial actions.
Register and deploy custom plug-in to use your preferred geospatial data provider
Register and deploy custom plug-in to use your
preferred geospatial data provider
10/1/2019 • 5 minutes to read • Edit Online
Before a plug-in can be used, it must be registered and deployed on the server.
Building your plug-in project will result in a plug-in assembly (.dll). This topic provides information on how you
can register and deploy the plug-in assembly for the two geospatial actions to use your preferred geospatial data
provider. For information about writing a plugin, see Create custom plug-in to use your preferred geospatial data
provider
Primar y If you want to treat your custom plug-in as primary and the
default Bing plug-in as secondary, set the execution order of
your plug-in to 0 . This will result in your plug-in getting
executed prior to the Bing plug-in. The Bing plug-in will
examine the "latitude" and "longitude" values that your
custom plug-in returns, and only proceeds to geocode with
Bing if both the returned values are 0. This would be the
preferred way if your custom plug-in is expected to provide
the majority of your geocoding needs.
Completely override If you always want your custom plug-in to be the source of
geocoding and completely override Bing from geocoding even
when your custom plug-in fails to geocode, you will need to
always return something other than 0,0 for "latitude" and
"longitude" values. You may want to decide which exception
conditions throw a .NET exception and which ones simply do
not return a result. To not return a result and not allow any
subsequent plug-in to return a result, your custom plug-in
needs to return something like 0.0001, 0.0001.
Register and deploy your custom plug-in
You can register and deploy plug-ins using the Plug-in Registration Tool or programmatically by writing
registration code using certain SDK classes. More information: Register and Deploy Plug-ins.
For this section, we will use the Plug-in Registration tool, which provides a graphical user interface to easily
register and deploy plug-ins. Also, this section contains information based on the assumption that you are working
with the sample custom plug-in, and have built the sample project to generate the CustomPlugin-FS-
Geospatial.dll assembly. If you have developed your own custom plug-in, the name of the assembly and plug-ins
will differ, but the overall instructions to register the plug-in will remain the same.
TIP
For detailed information about how to use Plug-in Registration Tool in general, see Walkthrough: Register a plug-in using the
plug-in registration tool
1. Get the Plug-in Registration Tool. To get the Plug-in Registration Tool, see Download tools from NuGet.
2. Navigate to the [Your folder]\Tools\PluginRegistration folder, and double-click the
PluginRegistration.exe file to run the tool.
3. Click CREATE NEW CONNECTION .
4. In the Login dialog, specify the credentials to connect to your Dynamics 365 instance, and click Login .
5. If you have access to multiple organizations in the Dynamics 365 instance, you are prseneted with a list of
organizations to choose to connect to. Otherwise, your default organization is used.
6. You should see a collapsed list of registered plug-in or custom workflow activity assemblies. Select
Register > Register New Assembly .
7. In the Register New Assembly dialog box:
Under the Step 1 section, click the ellipses […] button to select the CustomPlugin-FS-
Geospatial.dll assembly.
Under the Step 2 section, select both the plug-ins.
Under the Step 3 section, select the Sandbox option.
Under the Step 4 section, select the Database option.
Select Register Selected Plugins .
The CustomPlugin-FS-Geospatial.dll assembly and the two plug-ins for the
msdyn_GeocodeAddress and msdyn_RetrieveDistanceMatrix are now registered and deployed to the
server.
8. The next step is to register a step for each action. A step refers to the SDK message processing step entity
that is used to configure when and how the plug-in is to be executed.
In the Registered Plug-ins & Custom Workflow Activities tree view, expand the (Assembly)
CustomPlugin-FS-Geospatial node, and select a registered plug-in, say
Microsoft.Crm.Sdk .Samples.msdyn_RetrieveDistanceMatrix .
9. Right-click Microsoft.Crm.Sdk .Samples.msdyn_RetrieveDistanceMatrix , and select Register New
Step .
10. In the Register New Step dialog box, specify the following:
Message : msdyn_RetrieveDistanceMatrix
Execution Order : As required. See Execution order considerations while registering your custom plug-
in earlier in this topic.
Event Pipeline Stage of Execution : PostOperation
Execution Mode : Synchronous
Leave the rest of the fields with their default values. Click Register New Step .
You are now done with registering steps to call your custom plug-in for the both the geospatial actions.
If you view any of the Universal Resource Scheduling geospatial actions in the Plug-in Registration tool, you will
see both the default and your custom plug-in registered for the action. For example, see the plug-ins for the
mdyn_GeocodeAddress action.
See also
Sample: Custom plug-in to use Google Maps API as geospatial data provider
Sample: Custom plug-in to use Google Maps API as
geospatial data provider
4/1/2020 • 8 minutes to read • Edit Online
You can use a custom plug-in to use geospatial data from a data provider of your choice instead of using the
default Bing Maps API in Field Service and Project Service.
Sample is available here: Custom plug-in to use Google Maps API as geospatial data provider (Dynamics 365)
Prerequisites
Internet connection is required to download the sample project and to restore the NuGet packages used in the
sample project.
Requirements
Dynamics 365 Field Service solution must be installed on your Dynamics 365 (online) instance. More
information: Install and setup Field Service
Provide your own Google API key in the GoogleDataContracts.cs file in the sample:
public const string GoogleApiKey = "<PROVIDE YOUR GOOGLE API KEY";
Demonstrates
This sample shows how to create a custom plug-in for the msdyn_GeocodeAddress and
msdyn_RetrieveDistanceMatrix actions in Universal Resource Scheduling to use Google Maps API for
geospatial data instead of using the default Bing Maps API.
namespace Microsoft.Crm.Sdk.Samples
{
/// <summary>
/// msdyn_GeocodeAddress Plugin.
/// </summary>
public class msdyn_GeocodeAddress : IPlugin
{
const string PluginStatusCodeKey = "PluginStatus";
const string Address1Key = "Line1";
const string CityKey = "City";
const string StateKey = "StateOrProvince";
const string PostalCodeKey = "PostalCode";
const string CountryKey = "Country";
const string LatitudeKey = "Latitude";
const string LongitudeKey = "Longitude";
const string LcidKey = "Lcid";
/// <summary>
/// Retrieve geocode address using Google Api
/// </summary>
/// <param name="pluginExecutionContext">Execution context</param>
/// <param name="organizationService">Organization service</param>
/// <param name="tracingService">Tracing service</param>
/// <param name="notificationService">Notification service</param>
public void ExecuteGeocodeAddress(IPluginExecutionContext pluginExecutionContext, IOrganizationService
organizationService, ITracingService tracingService)
{
//Contains 5 fields (string) for individual parts of an address
ParameterCollection InputParameters = pluginExecutionContext.InputParameters;
// Contains 2 fields (double) for resultant geolocation
// Contains 2 fields (double) for resultant geolocation
ParameterCollection OutputParameters = pluginExecutionContext.OutputParameters;
//Contains 1 field (int) for status of previous and this plugin
ParameterCollection SharedVariables = pluginExecutionContext.SharedVariables;
try
{
// If a plugin earlier in the pipeline has already geocoded successfully, quit
if ((double)OutputParameters[LatitudeKey] != 0d || (double)OutputParameters[LongitudeKey] !=
0d) return;
tracingService.Trace("Checking geocodeResponse.Result...\n");
if (geocodeResponse.Results != null)
{
if (geocodeResponse.Results.Count() == 1)
{
tracingService.Trace("Checking geocodeResponse.Result.Geometry.Location...\n");
if (geocodeResponse.Results.First()?.Geometry?.Location != null)
{
tracingService.Trace("Setting Latitude, Longitude in OutputParameters...\n");
}
else throw new ApplicationException($"Server {GoogleConstants.GoogleApiServer}
application error (missing Results[0].Geometry.Location)");
}
else throw new ApplicationException($"Server {GoogleConstants.GoogleApiServer} application
error (more than 1 result returned)");
}
else throw new ApplicationException($"Server {GoogleConstants.GoogleApiServer} application
error (missing Results)");
}
catch (Exception ex)
{
// Signal to subsequent plugins in this message pipeline that geocoding failed here.
OutputParameters[LatitudeKey] = 0d;
OutputParameters[LongitudeKey] = 0d;
//TODO: You may need to decide which caught exceptions will rethrow and which ones will simply
signal geocoding did not complete.
throw new InvalidPluginExecutionException(string.Format("Geocoding failed at {0} with
exception -- {1}: {2}"
, GoogleConstants.GoogleApiServer, ex.GetType().ToString(), ex.Message), ex);
}
}
}
}
namespace Microsoft.Crm.Sdk.Samples
{
/// <summary>
/// msdyn_RetrieveDistanceMatrix Plugin.
/// </summary>
public class msdyn_RetrieveDistance : IPlugin
{
const string PluginStatusCodeKey = "PluginStatus";
const string SourcesKey = "Sources";
const string TargetsKey = "Targets";
const string MatrixKey = "Result";
/// <summary>
/// Initializes a new instance of the msdyn_RetrieveDistance class
/// </summary>
/// <param name="unsecure"></param>
/// <param name="secure"></param>
public msdyn_RetrieveDistance(string unsecure, string secure)
{
// TODO: Implement your custom configuration handling.
}
/// <summary>
/// <summary>
/// Execute the plugin
/// </summary>
/// <param name="serviceProvider"></param>
public void Execute(IServiceProvider serviceProvider)
{
if (serviceProvider == null)
{
throw new InvalidPluginExecutionException("serviceProvider");
}
try
{
// If a plugin earlier in the pipeline has already retrieved a distance matrix successfully,
quit
if (OutputParameters[MatrixKey] != null)
if (((EntityCollection)OutputParameters[MatrixKey]).Entities != null)
if (((EntityCollection)OutputParameters[MatrixKey]).Entities.Count > 0) return;
tracingService.Trace("Checking distancematrixResponse.Results...\n");
if (distancematrixResponse.Rows != null)
{
tracingService.Trace("Parsing distancematrixResponse.Results.Elements...\n");
}
else throw new ApplicationException($"Server {GoogleConstants.GoogleApiServer} application
error (missing Rows)");
}
catch (Exception ex)
{
// Signal to subsequent plugins in this message pipeline that retrieval of distance matrix
failed here.
OutputParameters[MatrixKey] = null;
//TODO: You may need to decide which caught exceptions will rethrow and which ones will simply
signal geocoding did not complete.
throw new InvalidPluginExecutionException(string.Format("Geocoding failed at {0} with
exception -- {1}: {2}"
, GoogleConstants.GoogleApiServer, ex.GetType().ToString(), ex.Message), ex);
}
// For debugging purposes, throw an exception to see the details of the parameters
CreateExceptionWithDetails("Debugging...", InputParameters, OutputParameters, SharedVariables);
}
});
}
}
sb.AppendLine("SharedVariables -- ");
foreach (var item in shareds) sb.AppendLine("\t" + item.Key + " : '" + item.Value + "' ");
throw new InvalidPluginExecutionException(sb.ToString());
}
}
}
Universal Resource Scheduling (URS), the scheduling engine underlying Field Service and Project service, ships
with extensive resource matching capabilities to book the right resources for a job. While the URS solution ships
with Field and Project service, URS can also be used to schedule any workstream in Dynamics 365. In this article
we'll take a look at how the built-in resource constraints are implemented and how to customize URS with custom
resource constraints.
T ERRITO RY
New York
New Jersey
Seattle
C H A RA C T ERIST IC
Project Manager
Designer
Financial Analyst
Organizational Unit entity:
O RGA N IZ AT IO N A L UN IT
Contoso US
Contoso EU
While a single Resource record works to capture single-valued constraints, like the Resource Type and
Organizational Unit above. If we want to associate a Resource to multiple Territory or Characteristic records, we
must use a 3rd entity, a many-to-many (N:N) relationship, to store these associations.
We use the Resource Territory entity to associate multiple territories for a resource.
Resource Territory Records:
and the Resource Characteristic entity to store multiple characteristics for a resource.
Resource Characteristic Records:
Similar to Resource, a Requirement record captures single-valued constraints and child records store multi-valued
constraints.
Here is the Requirement entity:
Job 2 1 hr Seattle
The Requirement Characteristic entity:
Requirement Characteristic Records:
Job 1 Designer
Sometimes, the requirement may have a constraint modeled as a lookup attribute, while the resource may store
the matching attributes on the N:N table. For example, In the case of Requirement, the Territory constraint is a
lookup attribute to the Territory entity. A Requirement captures a demand for work and the territory the work will
be done in. A Resource record, however, can be associated to many Territory records.
Constraints property bags
When the user selects values in the Filter panel and clicks the Search button, the values are sent to the Resource
Matching API. For multi-valued constraints, the Filter panel shows the data from the master entities Territory and
Characteristic and includes the selected values in the constraints property bag.
Here is a sample property bag with constraints sent to the Resource Matching API:
NAME VA L UE
ResourceType User
This tells the Resource Matching API to find resources of type User that are associated with the New York or
New Jersey territories.
When in the Schedule Assistant, the constraints are first retrieved from a Requirement record through the Retrieve
Requirement Constraints API . The retrieved constraints are then pre-filled in the Filter panel and sent to the
Resource Matching API.
The Retrieve Requirement Constraints API queries the Requirement record and all related child constraints (e.g.
Requirement Characteristic). It responds with a constraints property bag expressing all the resource constraints
captured on the selected Requirement.
Here's a sample response from the Retrieve Requirement Constraints API:
NAME VA L UE
Requirement Job 2
Duration 1 hr
Territories Seattle
A step by step guide with code samples needed for each step is described in Extending URS: Find resources by
language - a step by step guide
Custom constraints
We'll use "language" as an example scenario. An organization wants to filter resources by the language they speak.
They also want to capture on the Requirement record the language required for a job. This constraint follows a
similar pattern to the built-in Territory constraint. A new master entity Language stores the different languages a
resource can speak. A Resource record can be associated to many Languages through a many-to-many
relationship entity. On the Requirement entity, we'll create two new lookup attributes: Required Language and
Secondary Language . When finding available resources for a requirement, only resources associated with either the
Required Language or the Secondary Language will be shown.
Since extensible constraints work fully with the relational model of Dynamics 365, any structure used to express
constraints can be used in URS. Here's a more powerful example of custom constraints. Let's assume an
organization picks up products from a location and delivers them to a customer's location. The Resource entity is
extended with a Maximum Weight attribute describing the maximum weight it can carry, in case of a vehicle
resource. The Requirement entity is related to the Dynamics 365 Product entity with a many-to-many relationship;
each Product gets a new Weight attribute, too. When a Requirement record is created to capture required work, it
is related to all the products required to complete the job. When a user finds availability for a Requirement, the
total weight of all related Product records is retrieved and only resources that can carry this weight, defined in the
Maximum Weight attribute, are returned.
Here, we'll describe the custom language constraint. First, we have our new Language entity:
L A N GUA GE
English
Spanish
Here is the Requirement entity with our two new attributes, Required Language and Secondary Language
representing the languages the resource needs to speak to be matched with this requirement:
SEC O N DA RY
REQ UIREM EN T DURAT IO N T ERRITO RY REQ UIRED L A N GUA GE L A N GUA GE
Extensibility points
Based on the resource matching flows described above, these are the extensibility points we need to modify for our
custom constraints to work:
1. Retrieve Requirement Constraints API
The API needs to read our new Required Language and Secondary Language attributes so when a user finds
availability for a Requirement our new constraints are retrieved.
2. Filter panel
A user should be able to select from a list of Language records in the Filter panel to filter for matching
resources. When finding availability for a Requirement, the Filter panel should show the Required Language
and Secondary Language from the Requirement record pre-selected in the list of Languages.
3. Resource Matching API
The API will get as input the new Language constraints; it needs to return only resources speaking the
selected languages.
Extensible queries
Internally, the Retrieve Requirement Constraints API (#1 above) and the Resource Matching API (#3 above) use
FetchXML to query data from Dynamics 365. The Retrieve Requirement Constraints API issues multiple queries to
retrieve the Requirement record and its child constraints (e.g. Requirement Characteristic etc.) The Resource
Matching API, based on the resource constraints passed to it as input, will dynamically construct the correct
FetchXML query so only Resource records matching the specified FetchXML criteria are returned from Dynamics
365.
In the July 2017 update for URS, to support extensible resource matching, Universal FetchXML (UFX) was
introduced. Two important features UFX adds to FetchXML are: 1) Multiple result sets, a single UFX Query can
return results from multiple entities, and 2) Dynamic FetchXML, a UFX Query can dynamically construct FetchXML
based on input data.
With UFX, a single query can be constructed to query for a Requirement record and all its child records. The
Retrieve Requirement Constraints API executes a customizable UFX Query to retrieve a Requirement and its child
constraints. The query can be customized to retrieve custom constraint records as well.
The constraints property bag returned from the Retrieve Requirement Constraints API is passed as input to the
Resource Matching API. The API executes a customizable UFX query. With UFX, the query uses the input constraints
to dynamically construct the correct FetchXML to find matching resources. This UFX query, too, can be modified to
construct the proper FetchXML to only return resources matching the custom constraints.
Extensible Filter Layout and Resource Template
In the July 2017 update for URS, the Filter panel (#2 above) was updated to support customization through an XML
layout definition. The new layout supports dropdown controls to show a list of records from master entities and
the typical number , datetime and checkbox controls. The layout can be modified to allow users to select records
from custom constraint entities. The custom constraints, like the ones shipped with URS, are then passed as input
to the Resource Matching API.
Another client side extensibility point made available in the July 2017 update is the resource cell. The resource cell
is rendered through a customizable Handlebars.js template. The results from the Resource Matching API is made
available to the template. Therefore, by customizing the query executed by the Resource Matching API, custom data
can be rendered in the resource cell.
A step by step guide with code samples needed for each step is described in Extending URS: Find resources by
language - a step by step guide
See also
Universal Fetch XML
URS extensibility release notes
Extending URS: Find resources by language - a step
by step guide
1/16/2020 • 18 minutes to read • Edit Online
This step by step guide is a companion to Understanding and customizing resource matching in Universal
Resource Scheduling (URS)
In this step-by-step guide, we'll extend URS resources with a Language constraint. Consider an organization that
wants to filter resources by the languages they speak. They also want to capture on the Requirement record the
language required for the job. This constraint follows a similar pattern to the built-in Territory constraint. A new
master entity Language will store the different languages a resource can speak. A Resource record can then be
associated to many Languages through a many-to-many relationship entity. On the Requirement entity, we'll
model this by creating two new lookup attributes: Primary Language and Secondary Language . When finding
available resources for a requirement, only resources associated with either the Primary Language or the
Secondary Language will be shown.
F IEL D VA L UE
Name language
Prefix lang
F IEL D VA L UE
Name Language
Publisher Language
F IEL D VA L UE
Version 1.0.0.0
3. Click Save
Create the Language entity
1. In the Language solution, create a new Entity
2. Fill out the New Entity form with the below details:
F IEL D VA L UE
3. Click Save
Create the many-to -many relationship from the Resource entity to the Language entity
1. In the Language entity, create a new Many-to-Many Relationship
2. Fill out the New Relationship form with the below details:
F IEL D VA L UE
Current Entity
Other Entity
F IEL D VA L UE
F IEL D VA L UE
TIP
For the below steps, it is helpful to use a text editor that supports XML syntax highlighting to make your changes, and then
paste your changes back into the Universal Resource Scheduling editor.
The Filter Layout configuration is an XML layout definition to customize the layout of the Filter panel.
NOTE
For this exercise, we'll remove all default filters shipped with URS from the Filter panel and add Languages as the only
available filter.
The control element adds a new control to the Filter panel. Here is the description of each attribute:
key The key to use to store the selected values in the constraints
property bag
inactive-state The inactive statecode for this entity. This is used to exclude
inactive records from the dropdown
Filter Layout:
TIP
For the below steps, it is helpful to use a text editor that supports XML syntax highlighting to make your changes, and then
paste your changes back into the Universal Resource Scheduling editor.
The Retrieve Resources Query configuration is a UFX Query used by the Resource Matching API. It takes as input
the values entered in the Filter panel and dynamically constructs the correct FetchXML to find matching resources.
Below are the new snippets added to the Retrieve Resources Query to match and order by the Resources'
Languages.
<filter>
<condition attribute="lang_languageid" operator="eq">
<ufx:value select="$input/Languages/bag[1]/@ufx-id" attribute="value" />
</condition>
</filter>
</link-entity>
<filter>
<condition attribute="lang_languageid" operator="eq">
<ufx:value select="$input/Languages/bag[2]/@ufx-id" attribute="value" />
</condition>
</filter>
</link-entity>
<filter>
<condition attribute="lang_languageid" operator="in">
<ufx:apply select="$input/Languages/bag[position() > 2]">
<value>
<ufx:value select="@ufx-id" />
</value>
</ufx:apply>
</condition>
</filter>
</link-entity>
<filter type="or">
<condition entityname="lang_primary" attribute="lang_languageid" operator="not-null"
ufx:if="$input/Languages/bag[1]" />
<condition entityname="lang_secondary" attribute="lang_languageid" operator="not-null"
ufx:if="$input/Languages/bag[2]" />
<condition entityname="lang_others" attribute="lang_languageid" operator="not-null"
ufx:if="$input/Languages/bag[position() > 2]" />
</filter>
The values selected in the Filter panel is passed as input to the query and is available in the XPath $input
variable
The Retrieve Resources Query uses FetchXML to query the Resource (bookableresource) entity. We are using the
FetchXML link-entity element to only return resources associated with the Language records selected in the
Filter panel. To support showing the matched languages and ordering by primary or secondary language,
described later in the section Resource Cell Template, we are using multiple link-entity joins.
Here is the description of each element and attribute :
filter and condition Filter the many-to-many relationship records to only the ones
that match the specified Language IDs
ufx:value and select Outputs the result of the XPath expression in the select
attribute
ufx:apply and select Emit the child FetchXML elements for each result returned
from the XPath expression in the select attribute
<bag>
<lang_order ufx:select="iif(lang_primary and lang_secondary, 1, iif(lang_primary, 2, iif(lang_secondary, 3,
4)))" />
</bag>
UFX Queries are processed in sequential order. After the resources are retrieved through FetchXML, the results are
assigned to the Resources property. We are sorting the results based on the lang_order property added earlier
and re-assigning the sorted results to the Resources property.
Here is the description of each element and attribute :
NOTE
The default Retrieve Resources Query shipped with URS is a large query that supports all the resource constraints included
with URS. For this exercise, we'll use only a subset of the default query and add Languages as the only filter.
<filter>
<condition attribute="lang_languageid" operator="eq">
<ufx:value select="$input/Languages/bag[1]/@ufx-id" attribute="value" />
</condition>
</filter>
</link-entity>
<filter>
<condition attribute="lang_languageid" operator="eq">
<ufx:value select="$input/Languages/bag[2]/@ufx-id" attribute="value" />
</condition>
</filter>
</link-entity>
<filter>
<condition attribute="lang_languageid" operator="in">
<ufx:apply select="$input/Languages/bag[position() > 2]">
<value>
<ufx:value select="@ufx-id" />
</value>
</ufx:apply>
</condition>
</filter>
</link-entity>
<filter type="or">
<condition entityname="lang_primary" attribute="lang_languageid" operator="not-null"
ufx:if="$input/Languages/bag[1]" />
<condition entityname="lang_secondary" attribute="lang_languageid" operator="not-null"
ufx:if="$input/Languages/bag[2]" />
ufx:if="$input/Languages/bag[2]" />
<condition entityname="lang_others" attribute="lang_languageid" operator="not-null"
ufx:if="$input/Languages/bag[position() > 2]" />
</filter>
<bag>
<imagepath ufx:select="accountimagepath | contactimagepath | userimagepath" />
TIP
For the below steps, it is helpful to use a text editor that supports XML syntax highlighting to make your changes, and then
paste your changes back into the Universal Resource Scheduling editor.
The Schedule Assistant Filter Layout configuration, like the Schedule Board Filter Layout, defines the layout of the
controls in the Filter panel. Since the Schedule Assistant uses more filters than the Schedule Board, like Start Time,
End Time, Duration, etc., a different layout is used.
NOTE
For this exercise, we'll reuse only a subset of the default filters shipped in URS from the Schedule Assistant Filter Layout
configuration and add the Languages dropdown as the only available filter.
The filter we are adding to the layout is the same as above in Filter Layout Configuration. The other controls are
needed to modify the Schedule Assistant search parameters.
The complete Schedule Assistant Filter Layout
TIP
For the below steps, it is helpful to use a text editor that supports XML syntax highlighting to make your changes, and then
paste your changes back into the Universal Resource Scheduling editor.
The Retrieve Constraints Query configuration is a UFX Query used by the Retrieve Requirement Constraints API. It
takes as input the ID of a Requirement record (selected in the UI) and returns the Requirement record and all its
child records.
NOTE
The default Retrieve Constraints Query shipped with URS is a large query that supports all the requirement constraints
included with URS. For this exercise, we'll use only a subset of the default query and add Languages as the only filter.
UFX Queries are processed in sequential order. The Retrieve Constraints Query uses FetchXML to query the
Requirement (msdyn_resourcerequirement) entity and assigns the result, a Requirement record, to the Requirement
property. We are adding to the constraints property bag a new property Languages that combines both attributes,
the Primary Language and Secondary Language, into a single list of entities (EntityCollection). This is required
since we are showing the Languages control in the Filter panel as a list of records. An alternative would be to
create two separate controls in the Filter panel for the two attributes.
Here is the description of each element and attribute :
<filter>
<condition attribute="statecode" operator="eq" value="0" />
<condition attribute="msdyn_resourcerequirementid" operator="eq">
<ufx:value select="$input/@ufx-id" attribute="value" />
</condition>
</filter>
</entity>
</fetch>
<bag>
<InitialWorkLocation ufx:select="msdyn_worklocation" />
</bag>
</Requirement>
TIP
For the below steps, it is helpful to use a text editor that supports HTML syntax highlighting to make your changes, and
then paste your changes back into the Universal Resource Scheduling editor.
The Resource Cell Template configuration is a Handlebars template used to render content in the resource cell. The
output from the Retrieve Resources Query is available to the template.
We are modifying the default resource template to show a green ✔✱ indicator if the resource matched the
primary and secondary languages, a green ✔ indicator if the resource only matched the primary language, and a
yellow ✔ indicator if the resource matched only the secondary language.
{{#if lang_primary}}
<span style='color:green;'>✔{{#if lang_secondary}} ✱{{/if}}</span>
{{else if lang_secondary}}
<span style='color:#ffe700;'>✔</span>
{{/if}}
The lang_primary and lang_secondary properties are returned from our custom Retrieve Resources Query we
setup above. Consult the Handlebars website for documentation on the templating syntax.
Resource Cell Template:
{{#if lang_primary}}
<span style='color:green;'>✔{{#if lang_secondary}} ✱{{/if}}</span>
{{else if lang_secondary}}
<span style='color:#ffe700;'>✔</span>
{{/if}}
</div>
{{/if}}
</div>
{{#if (eq (is-sa-grid-view) false) }}
<div class='matching-indicator'></div>
{{/if}}
</div>
{{#if (eq (is-sa-grid-view) false) }}
{{> resource-map-pin-template this }}
{{/if}}
</div>
UFX is an advanced query language that allows you to query data using dynamic FetchXML, shape and prepare
the resulting data for consumption by the Universal Resource Scheduling (URS) solution. This query language
enables you to create custom queries to customize and extend the schedule board and schedule assistant filters to
meet the unique business needs of the organization.
UFX consists of two components UFX Bag and UFX Query.
For practical and performance reasons the in-memory bag is implemented on top of the Dynamics 365 apps
SDK Entity object.
K EY VA L UE TYPE
age 36 int
In JSON:
{
"name": "John",
"age": 36
}
In XML:
<bag>
<name ufx-type="string">John</name>
<age ufx-type="int">36</age>
</bag>
C AT EGO RY VA L UE
C AT EGO RY VA L UE
{
"citizen": true, // implicit bool
<bag>
<citizen ufx-type="bool">true</citizen>
<age ufx-type="int">36</age>
<name ufx-type="bag">
<first ufx-type="string">John</first>
<last ufx-type="string">Doe</last>
</name>
<children ufx-type="list">
<bag>
<name ufx-type="string">Sam</name>
</bag>
<bag>
<name ufx-type="string">Judy</name>
</bag>
</children>
</bag>
<bag xmlns:ufx="https://schemas.microsoft.com/dynamics/2017/universalfetchxml">
<accounts ufx:source="fetch">
<fetch top="10">
<entity name="account" />
</fetch>
</accounts>
</bag>
A UFX Query is processed sequentially and can contain many FetchXML queries.
Here's a snippet of the result of the previous UFX Query serialized to XML. Observe some values have metadata
further describing them.
<bag>
<accounts ufx-type="list">
<bag ufx-id="166e39dd-34a1-e611-8111-00155d652f01" ufx-logicalname="account">
<accountid ufx-type="guid">166e39dd-34a1-e611-8111-00155d652f01</accountid>
<accountnumber ufx-type="string">ABSS4G45</accountnumber>
<name ufx-type="string">Fourth Coffee (sample)</name>
<statecode ufx-type="option" ufx-formatvalue="Active">0</statecode>
<websiteurl ufx-type="string">https://www.fourthcoffee.com/</websiteurl>
<primarycontactid ufx-type="lookup" ufx-formatvalue="Yvonne McKay (sample)" ufx-
logicalname="contact">7c6e39dd-34a1-e611-8111-00155d652f01</primarycontactid>
...
</bag>
<bag ufx-type="bag" ufx-id="186e39dd-34a1-e611-8111-00155d652f01" ufx-logicalname="account">
<accountid ufx-type="guid">186e39dd-34a1-e611-8111-00155d652f01</accountid>
<accountnumber ufx-type="string">ACTBBDC3</accountnumber>
<name ufx-type="string">Litware, Inc. (sample)</name>
<statecode ufx-type="option" ufx-formatvalue="Active">0</statecode>
<websiteurl ufx-type="string">https://www.litwareinc.com/</websiteurl>
<primarycontactid ufx-type="lookup" ufx-formatvalue="Susanna Stubberod (sample)" ufx-
logicalname="contact">7e6e39dd-34a1-e611-8111-00155d652f01</primarycontactid>
...
</bag>
...
</accounts>
</bag>
The select UFX directive takes an XPath expression that selects values from the current bag.
<bag xmlns:ufx="https://schemas.microsoft.com/dynamics/2017/universalfetchxml">
<accounts ufx:source="fetch">
<fetch top="10">
<entity name="account" />
</fetch>
</accounts>
Certainly the most powerful aspect of a UFX Query is its ability to dynamically generate FetchXML based on input
data.
In the sample below, we search for accounts by a value supplied by the user and available as a UFX Bag through
the XPath $input variable. Notice the UFX if and value directives on the condition element.
<bag xmlns:ufx="https://schemas.microsoft.com/dynamics/2017/universalfetchxml">
<accounts ufx:source="fetch">
<fetch top="10">
<entity name="account">
<filter>
<condition attribute="name" operator="like" ufx:if="$input/NameFilter">
<ufx:value select="$input/NameFilter" attribute="value" />
</condition>
</filter>
</entity>
</fetch>
</accounts>
</bag>
If the NameFilter property in the input bag contained %city% the produced FetchXML condition executed by
Dynamics 365 would look like this.
{
"primarycontactid": "7e6e39dd-34a1-e611-8111-00155d652f01",
"primarycontactid@ufx-type": "lookup",
"primarycontactid@ufx-logicalname": "contact",
"primarycontactid@ufx-formatvalue": "Susanna Stubberod (sample)"
}
In XML:
lookup-to -list()
lookup-to-list(lookup, ...[lookup]): Takes a number of lookup values, converts each of them to a bag with the
ufx-id and ufx-logicalname metadata set, and flattens them into a single list
option-to -list()
option-to-list(option, ...[option]): Takes a number of option values, converts each of them to a bag with a
single option property, and flattens them into a single list
order()
order(list, string, bool): Orders a list by a property in each bag. The property is specified in argument 2,
descending is specified in argument 3.
order(list, list): Order a list by multiple sort orders specified as a list in argument 2. Each bag in the second list
can have a name and descending property
iif()
iif(any, any, any): If argument 1 is true, returns argument 2, otherwise returns argument 3
See also
Understanding and customizing resource matching in Universal Resource Scheduling (URS)
URS extensibility release notes
Bug fixes for Universal Resource Scheduling
5/19/2020 • 50 minutes to read • Edit Online
Version 3.12.25.5
On the daily view mode of the schedule assistant, when Ignore Duration advanced setting is selected, all
eligible resources were not returned regardless of their availability. This bug is now fixed in this update.
Fixed a bug where quick book is used on a requirement group, and resources work in a different time zone than
the time zone of the calendar of the requirements in the group, only a part of the available timeslots were
returned. With the fix, all available time slots are returned in this scenario.
When searching for resources in the daily view of the schedule board: once the searched Resources are
returned, bookings of the resources are not returned on the center area, until the board is refreshed. This bug is
now fixed in this update.
When a default search radius unit of kilometers is used and no available resources are returned, the schedule
assistant crashes. This bug is now fixed, and users can expand the filter panel, even when no resources were
returned to change the filters on the filter pane.
When quick book is used on a work order with an associated requirement group, and a resource is booked,
Booking Status selected is invalid for Work Order error is thrown. This issue is now fixed.
When looking for available resources on a service activity record and Least Busy sort is selected, no available
resources were returned. This is now fixed on the schedule assistant.
Quick book will honor the default resource search radius defined on the booking setup metadata record of the
schedulable entity (for example, work order, case, resource requirement, and so on).
When any changes are made to a booking (like moving the booking or reassigning the booking), the custom
booking rules defined by the user would get triggered. But extending existing booking would not trigger the
booking rule. This bug is now fixed.
When fulfillment preferences (intervals) are used with a requirement group, the start date of the schedule
assistant filter pane is populated incorrectly, which is now fixed in the update.
Schedule board center-area grid is misaligned when browser zoom is changed to 80 percent or 110 percent on
Microsoft Edge and Google Chrome browsers. With this fix, the misalignment of the grid is fixed.
Fixed a bug where a custom entity cannot be enabled for scheduling, when the name of the entity has more than
100 characters. With this fix, any entity that has a name with more than 100 characters can also be enabled for
scheduling.
3.12.24.5
Fixed a bug where the search time window of the resource requirement is greater than the time range displayed
on the schedule board and schedule assistant, the resource booked hours capacity on the resource cell were not
displayed. The expand and collapse button next to the resource in daily, weekly, and monthly views were also not
displayed.
3.12.24.4
When you enable any entity for scheduling (for example, case, lead, account), enable Quick Book feature on the
Booking Setup Metadata record of this schedulable entity, and set Disable Requirement Auto Creation
for Bookings to yes. The resource requirement records will not be generated post the creation of the booking
record.
The bug where there are multiple pages of available resources suggested on the schedule assistant, only the
resources in the first page set were shown and resources on higher pages were not shown. This bug is fixed, and
paging through to next pages, resources will be shown as expected.
When there are multiple work hours are entered on the same day for a resource (for example, 8 AM to 3:30 PM
and 2 PM to 5 PM), there was a bug where the resource work hours calendar was only showing work hours as 2
PM to 5 PM. With this fix, the calendar for the resource would show that the resource is working 8 AM to 5 PM.
Also, the same should be reflected on the schedule board.
When a resource has working hours (for instance, 9 AM to 5 PM on a day) and has time off 12 PM to 1 PM,
there is a bug where schedule board shows that the resource has no working hours on that day, though the time
off is for only one hour. This bug is fixed, and with this fix, the resource should show as working from 9 AM to 12
PM and 1 PM to 5 PM on the schedule board.
When creating a resource requirement using a work hours template, performance improvements are made to
reduce the time of creation for the resource requirement record.
When the resource work hours are entered by using non-recurrence patterns for a large number of days, and
large number of resources (for instance, more than 2000 resources in the org), when looking for available
resources, the schedule assistant takes almost 40 seconds to load resources. Performance improvements are
pushed as part of this fix, where in this case, the schedule assistant loads much faster (around five to ten
seconds, largely based on the amount of data).
3.12.23.71
The issue with the filtering on the lookup type fields on the schedule board's requirement panel is fixed.
When hovered on the bookings on the schedule board, the tooltip was shown instantly, which sometimes
blocked the view or blocked using right-click on the bookings. This issue is now fixed by adding a hover delay.
When hovered on the booking, tooltip will be displayed with a delay.
3.12.23.27
The rendering issue for tooltips on bookings of the schedule board is now fixed, by making the tooltip scrollable
when the height of the tooltip is larger than the browser size. The hyperlinks on the tooltip can also be selected
to open them in a new browser window.
The text Hide default requirement panels is now made visible on the schedule board tab settings under the
Requirement Panels section, which was previously only partially visible.
Fixed an issue where entering a comma on the filter control of the filter panel was clearing the input on the filter
control. With the fix, the comma will not influence the autocomplete, which was causing issues for customers
who have a comma in their filter options.
If the work hours tab is renamed or removed from a custom bookable resource form, when you select the
Show work hours button, an error will be displayed: The Work Hours tab has been renamed or
removed from this form. Please update this form to include the Work Hours tab. Update so that the
work hours tab can be added back to the form.
Fixed an issue on the Create resource booking panel on the schedule board. With the fix, the Star t Date and
End Date on the panel will always reflect the From Date and To Date of the requirement selected in the
Requirement Panel at the bottom of the board.
The map pins of the resource requirement records are loaded on the map view of the filter panel on the
schedule board, based on the view that is defined on Requirement Map Filter View on schedule board
settings. We fixed the issue where, if the view used here has no filters on the view definition, the map panel
never completes loading. With this fix, the map panel would load, regardless of the filters on the view used.
Fixed an issue where Universal Resource Scheduling is used as the scheduling engine; users who are not
system administrators were unable to complete the appointment records. With the fix, any user with privileges
to complete the appointment record can mark the appointment as complete.
3.12.22.9
For organizations that have schedule board preview enabled, the schedule board preview can be accessed from
Field Ser vice application sitemap along with Universal Resource Scheduling application sitemap.
Fixed an issue where booking tooltip blinks when the height of the tooltip is greater than the height of the
visible center Gantt area, where bookings are displayed on the schedule board. With this fix, the tooltip would
not blink and the user would be able to select the hyperlinks on the tooltip to open the respective record in a
new window.
Fixed the issue where intervals functionality of fulfillment preferences was not working on the schedule
assistant.
Resolved the issue of duplicated time slots for the resources on the list view type of the days view of the
schedule board.
Multiple calls to retrieve data in the list view type of the days view are reduced to one call, in order to improve
schedule board performance.
Fixed the issue where available time slots of resources are displayed differently on schedule assistant and the
quick scheduling pane for the schedulable entities that do not have an associated resource requirement record.
The horizontal and vertical view types are now hidden from the requirement group's find availability or
schedule assistant screen.
Fixed the error The star t address and end address cannot be empty , which is incorrectly thrown on the
Get Driving Directions functionality on the schedule board, due to an uncaught exception.
Advanced find on the business closures entity is now supported.
When using the schedule assistant/find availability functionality, the available time slots should be shown in the
same timezone of the requirement calendar; however, if a schedulable entity like case doesn't have a
requirement record associated, then the results need to be shown in the timezone of the CRM user preference.
The issue of resource name truncation in the days view of the schedule board is now fixed.
Fixed the focus shifting issue on the schedule board, where focus is shifted to a previous booking in focus, when
booking status of the bBooking assigned to a resource at the bottom of the resource list. With this fix, the focus
would stay on the booking in context.
Fixed a translation issue on requirement groups in Japanese, where the name of the requirement or subgroups
changes from Japanese to English when the record is saved.
Quick scheduling now supports and handles different date format styles like English (South Africa).
Fixed an issue with the Allow Overlapping functionality on the bookings. With this fix, when a booking is
marked as Allow Overlapping set to yes, the schedule assistant (find availability) will show the above booking
as an available time slot if the Allow Overlapping advanced setting on the filter view is selected.
3.12.21.9
The following Universal resource Scheduling 2020 Wave 1 features in GA and preview planned are included in
this release:
Next generation schedule board experience (preview)
Enhanced work hours calendar for resources
requirement dependency for efficient workflow
resource scheduling dashboard
This release also includes all fixes included in the 3.12.9.76 EA package.
Fixed an issue where the booking method on booking panel was not selectable on the list view of the days view
in schedule board.
Fixed a caching issue on the Get Driving Directions pop-up functionality of the schedule board, where
previously cached values were being used for calculating the route.
Resolved the incorrect location displayed for the booking on the map view of the schedule board, due to the
incorrect formatting issue in conversion of the latitude and longitude on the map in languages like German.
Fixed the issue where bookings of some schedulable entities cannot be moved to a different day in multiday
views like days and weeks views on the schedule board.
Fixed the issue when a requirement is dragged on to a crew resource on schedule board, a booking is only
created for the crew resource and not the underlying active crew resources.
Fixed an issue where a custom JavaScript is used in the schedule board client extensions to set the default filter
values, but the prepopulated default values are only displayed when the respective filter control is selected.
Fixed an issue where quick scheduling is used on a schedulable entity without associated resource requirement
record, and search start and search end dates are passed as the same day; available time slots were displayed
for three days rather than one passed in day. With the fix, the available will only be displayed for the date passed
in.
Fixed an issue where booking tooltips are not displayed on hover, when network latency is high.
Fixed a null reference exception for booking status metadata checks during the upgrade to improve upgrade
experience.
3.12.5.13
resource location can be displayed on the map view of the schedule board's daily view, using the custom entity
using the custom geo data settings in the scheduling parameters.
Fixed the issue with the action msdyn_SearchResourceAvailability was not taking the ConsiderTravelTime
parameter into consideration when providing the available time slots.
Fixed upgrade errors while generating the booking setup metadata records and a few other upgrade
improvements.
Fixed the issue where filters were not saved on the resource utilization view.
Booking created Successfully notification on the schedule assistant is only shown when the booking is
created successfully.
Fixed the incorrect booking time offset on daylight savings time dates for GMT + 1 timezone on the booking
and resource requirement forms.
Fixed null reference issues on the requirement group form.
Improved error handling on the copy function of the resource requirement form.
Resource name handling is improved in the search resources lookup on the days view of the schedule board.
Resource and grid alignment issues are fixed in the hourly view of the schedule board.
Calendar performance improvements are made for the generation of resource requirements from the project
form.
Improved error handling on the booking rules.
Schedule board scrolling issues are fixed, when moving the bookings of the resources at the bottom of the list.
Fixed the issue with the booking tooltip: when there are only two resources displayed on the schedule board, the
tooltip masks the booking itself.
Fixed the issue of the visual duplication of the bookings on the days, weeks, and months views of the schedule
board.
Improved error handling when creating bookings on the schedule board, by adding additional null checks.
Performance on the schedule board improved by just loading the requirements that are not location agnostic on
the map view.
Fixed the filter panel crash when using the fetch-based filter value and saved as default value.
Fixed the issue with the schedule assistant filter layout when a filter is changed from multi combo field to non-
multi combo filter.
When Double book if needed option is checked on the schedule assistant booking panel, even though the
resource does not have enough availability for the requested hours, the resource can be double booked up to 24
hours in one day.
3.12.4.9
Fixed an upgrade issue related to the timezone conversion of the TimeGroupDetail record.
Fixed incorrect booking time offset on daylight savings time dates for Auckland timezone.
Fixed the issue where some resources show unavailable on the schedule board, due to the number of calendar
rules on all the resources on the schedule board.
When there are characteristics on the filter panel that are paged, the rating value of the selected characteristic is
lost in the filter, which is now fixed.
Fixed the flickering issue on the second page of the open requirements tab of the requirement panel.
Fixed the alignment of the available time on the days view of the schedule assistant.
The filters on the filter panel now support text fields.
3.12.3.9
The one hour offset issue for the bookings created on the schedule board is fixed in the Brazil daylight savings
time.
The caching issue with the schedule assistant's default availability view setting is set to board is now fixed.
When a new booking is created on the days view of the schedule board, the board will be refreshed
automatically.
resource requirement map pins are loaded, only when the map view is opened on the filter panel of the
schedule board.
Fixed an upgrade issue due to bad data in the filter values.
3.12.2.114
When the schedule board map view is opened, the map automatically zooms out to show all the map pins.
The resource lookup is displayed on the schedule board in Arabic.
On the schedule assistant results list view, work start time aligns with the estimated arrival time values on the
create resource booking pane.
Added additional handling to avoid the corruption of the booking setup metadata and the schedule board
settings records.
Bookings can be edited in the days view of the schedule board by right-clicking on the booking and selecting
Edit .
The select resources dialog opens and loads successfully on the filter view of the schedule board, even when
there are more than 100 resources enabled to be displayed on the schedule board.
When Turkish language is enabled on the org, resource requirement records load under the Unscheduled
Work orders tab of the requirement pane of the schedule board.
When double-clicking on the save button the new bookable resource booking form, would not create duplicate
records.
Resources can be searched on the schedule board by their name in the search resources search box.
map view on the schedule board only shows the pins for the requirements that are returned from the
requirement view configured for requirement map filer view setting on the map settings of the schedule board
tab settings.
When Hebrew language is enabled on the org, schedule board loads in the Chrome with browser zoom at 90%.
The requirement demand pie chart on the schedule assistant information at the bottom is accessible, via screen
readers.
3.12.1.158
Workflows can be triggered when resource requirements are created with any allocation method.
When upgrading URS from version 2.x to version 3.x, resource filters on the schedule board tabs are preserved.
3.12.0.448
Grid alignment issues while scrolling on the schedule board for right-to-left languages (like Hebrew, Arabic) are
fixed.
When a new route is created for a map pin selected on the map panel, the route will stay on top of other routes,
even after the auto refresh, which happens when a booking is created or modified.
On the list view of the schedule board, any linked entity record can be opened by using keyboard, by hitting on
the space bar when focused on the linked entity.
The warning message notification on the schedule assistant is made user-friendly, when Maps are not enabled
for a resource requirement when work location is onsite.
The selected values of the filter "pool type" are also saved along with other filters, when the current filters are
saved as default filters.
When a crew type resource is booked, only the working members of the crew will be booked, crew members,
who are not working, will not get booked.
Custom date fields added to the filter panel as custom filters, will also respect the time zone of the schedule
board tab (under Scheduler settings)
When schedule board settings are opened from the booking setup metadata record of the Schedulable entity, by
clicking the Cancel button on the schedule board settings, the form will be closed.
The scrolling issues on the vertical view of the schedule assistant are fixed.
On the list view type of days, weeks, and month views of schedule board, the focus will stay on the resource
Search box until the typing is complete until focus is moved to a different area of the schedule board.
The quick scheduling experience will search for available resources in the date range provided in the
requirement group and displays available resources on the book resources panel in the date range.
On successful creation of bookable resource booking record in the offline mode, no unintended warnings will be
displayed on the form.
When looking for a substitute resource on a booking using the "Find Substitution" via schedule assistant, the
resource can be substituted on the suggested time slot by clicking on the "Substitute" button, when hovered on
the suggested time slot.
When there are more than 30 suggested resources on the schedule assistant, there will be paging of resources
and more suggested resources can be reached by scrolling to the next page.
When a map pin is selected for a booking on the schedule board, after editing the selected booking, (by
dragging and extending the booking), the map pin stays selected.
Schedule board will support booking alerts are in large number (~200).
Only active booking statuses will be displayed on the booking status dropdown field on the booking panel of
schedule board, when creating bookings.
When searching for available resources for a requirement group, suggested resources will always be shown in
list view only.
Resources on the schedule board tab can be selected via Select resources under the filter Options on the Internet
Explorer Version 11.
When calling the msdyn_SearchResourceAvailability action using a requirement with a fulfillment preference for
time group as input, the output time slot of the action will contain valid TimeGroupDetails.
Bookable resource bookings can be created on the daylight saving days (entering and exiting daylight savings
time).
Enhancements
Accessibility improvements are made on the schedule board and schedule assistant.
3.11.0.421
Columns in the list view of the schedule board resize based on the size of the browser (Internet Explorer)
A few accessibility issues on the schedule board and quick scheduling panel are fixed.
Days/weeks/month views on the schedule board support the bookings for the schedulable entities without
resource requirements.
When viewing the bookings of requirement group in Split view, the bookings in the Split view will be shown in
the same timeline as of the requirement group bookings in the top half of the grid.
work hours of a resource with capacity greater than 1 in a day, will reflect on the schedule board accordingly.
Resource capacity booked percentage reflects the resource's bookings in the days, weeks, and month views of
the schedule assistant.
The focus remains on the selected date when a resource is selected from the resource dropdown filter after
selecting a date on the calendar of the quick scheduling panel.
When a resource requirement with a characteristic and rating is booked, the characteristic filter will be
populated with the characteristic and rating value from the resource requirement in the filter view of the
schedule assistant.
The search start/search end and time from promised/time to promised date time filters on the filter view of the
schedule assistant reflect the from date/to date and time from promised/time to promised from the resource
requirement records.
The membership of the members of a crew type resource on the schedule board is shown in the timezone of the
schedule board.
Only one resource can be selected from the recommended resources on the list view of the schedule assistant.
When searching for available resources for an onsite requirement group, and a suggested time slot is selected,
the estimated arrival time and start fields in the create resource booking panel are filled with the start time and
travel start time values from the list view.
When hovered on the bookings on the schedule board, booking card is displayed with a delay.
A booking can be created for a work order in the days, weeks, or month views of the schedule assistant.
Schedule board loads bookings of resources, even with resources who have no calendar or have multiple
calendars.
Rebook for bookings would work even with null values of the filters passed to the schedule assistant.
The schedule board and schedule assistant will load booking and resource availability on the Internet Explorer
Version 11.
Enhancements
Support for preferred and mandatory resource in finding available resources.
Usability improvements to the facility search scenarios via quick scheduling experience.
3.10.0.239
Only valid hex characters can be entered on the status color field on booking status form.
The overlapping bookings in the vertical view of the schedule board are separated by 1-px spacing.
Non-working hours color name is consistent across the schedule board tab settings and the schedule board
settings configuration record.
Long names will be wrapped inside the booking tooltip.
Deletion of a resource is not allowed if it has any group memberships active or inactive, parent, or child, has any
associations active or inactive, resource 1 or resource 2.
When default sorting is added to the schedule assistant retrieve constraints UFX query in the default schedule
board settings, the sort by filter of the schedule assistant is pre-filled with the field by which sorting is done and
the returned resources are sorted accordingly.
A few accessibility issues on the schedule board are fixed.
Schedule board to load the resources in days, weeks, and month views with resources having a valid calendar
and wouldn't fatally fail if a resource has an invalid calendar.
Combo control filter with multiset to false, the selected value will show in the filter.
Active resource requirements view is sorted on created on by descending order.
Derive capacity from group members field on the pool resource form can be set to yes or no as required.
Search resources can be used to search resources in the suggested resources in the list view of the schedule
assistant.
Custom booking template with fields from linked entities of bookings is supported.
Resource type filter on the schedule assistant will not remember the previously selected values, once unselected.
The schedule assistant loads as expected when clicked on book button on a work order form in Arabic.
When a booking is created by schedule assistant, the booking method field on the booking form is populated as
schedule assistant.
3.9.0.42
The filter is not enabled for the owner column on the unscheduled work orders requirements view in the
requirement grid of the schedule board.
The refresh button on the requirement grid is disabled while the grid is refreshing the data.
Alignment for resource icons and the zoom slider on the schedule board are fixed for Arabic language.
When searching for resources in one view like horizontal, when switched to another view, like list view, the
search is still retained along with the search text and results.
The bookings can be moved to a different time or resource by dragging and dropping the booking on days,
weeks, and month views of the schedule board.
Quick scheduling would be using the "As The Crow Flies" approximations to calculate travel time if Bing maps
integration is not enabled.
Improved error messaging on the schedule assistant when looking for available resources and on the schedule
board when displaying the bookings.
When auto update booking travel is enabled, and onsite bookings are created by the quick scheduling, the travel
time to the subsequent bookings is updated based on the location of the previous booking.
The schedule assistant search for available resources will be successful with continuous multiple associations on
a single day for a resource type facility.
When an onsite requirement is selected in the requirement grid, the location pin is selected and focused in the
map view. Once clicked on "Find Availability," the location pin on the map view will stay selected entering and
exiting the schedule assistant.
Alignment of the fields on the fulfillment preferences form is fixed.
Alignment of the sort arrows on the sort options control on the schedule board is fixed.
Time out issues request to msdyn_RetrieveResourceAvailability is posted from a web app are fixed.
Enhancements
FetchXML query is replaced by query expression for the action that fetches work order bookings to improve the
performance.
3.8.0.105
The date selector on the schedule assistant list view is dimmed because it has no effect on the resources
displayed when searching for availability of a requirement or a work order.
When booking a schedulable entity record, only the booking status that is mapped to the booking status field
logical name of the booking setup metadata record of the schedulable entity will be on the schedule assistant.
For example, when scheduling a work order, only the option set values of the field msdyn_fieldservicestatus will
be displayed in the booking status drop-down on the schedule assistant,
When searching for availability of resources on a requirement, the number of matching resources returned in
the search on the schedule assistant is limited to the value set on the field resource availability retrieval limit on
the default metadata settings of the booking setup metadata record. The default value of resource availability
retrieval limit is 100.
Only one booking setup metadata for an entity can be created.
For German locale, on the schedule assistant, remaining duration does not overlap with the pie chart visual next
to it.
Only Active resources can be added to a resource pool or resource crew's children.
A few accessibility issues on the schedule board are fixed.
The resource requirement form can be customized to remove optional fields like resource type from the form.
Selected sort on the schedule board is determined by the Sort result by filter on filters.
The booking alerts template field on the default schedule board settings shows the default HTML template
value.
Book and Book & Exit buttons on the schedule assistant are enabled only when at least one eligible resource is
returned on the schedule assistant.
Multiple characteristics can be selected on the filters on the schedule board.
A booking cannot be deleted when it has an associated booking alert.
When booking a requirement in the weekly view or monthly view of the schedule assistant, if the availability
search start date is today and is not the first day of the week or month, the start date will correctly default to
today, so that the book button is enabled.
The work location filter on the schedule assistant will show all three possible values: onsite, facility, and location
agnostic.
The filters on the schedule board will show the right values in the drop-down even when the user manually
types in the filter.
When Auto Update booking travel is enabled in the scheduling parameters, travel time of the adjacent bookings
is updated when a booking is created in the list view of the schedule assistant.
Correct search results are displayed on the quick scheduling panel for all timezone values set on the resource
requirement form.
A multi resource work order, that is, a work order associated with a requirement group, can be booked via quick
scheduling.
Requirement group bookings can be viewed in split view.
The Timeline header on the schedule board will be shown even after exiting the schedule assistant by selecting
exit search.
The rating values on the rating model form are ordered by rating values, not the names.
The resource card can be opened by right-clicking the resource, even when the resource has characteristics with
no rating values.
When booking a requirement group via the schedule assistant, selecting a time slot on the list view opens up the
Create resource booking Panel on all browsers.
When booking a requirement group or the requirements under that requirement group, the same results are
displayed on the schedule assistant.
Facility requirements can be booked via quick scheduling with the correct duration of the booking.
You can book work orders on the days view of the schedule assistant.
Multiple issues preventing upgrade.
Enhancements
Performance improvements to schedule board refresh times when multiple crew type resources are present on
the schedule board.
Performance improvements to searching for resource availability for requirement Groups.
Reduced unnecessary calls to retrieve the resource requirements name and booking setup metadata. Other
duplicated calls are also reduced when searching for availability.
Self-service scheduling API is now available to schedule the single resource requirement, with a corrected
process name Resource Scheduling – Search Resource Availability and unique name
msdyn_searchresourceavailability.
From and to date fields on the resource requirement entity are restricted to have only the User Local behavior to
avoid Time Zone functionality loss on the schedule assistant and loss of the time zone data on resource
requirements.
Added a suggestion to service health diagnostics to show the suggestion/fix with manual steps when resource
booking sync job is disabled but the feature synchronize resource bookings with outlook is enabled.
When using URS on Unified Service Desk, the schedule board can be loaded without having to pass the full
Unified Interface context.
Quick scheduling now supports scheduling of onsite requirements.
3.7.0.70
Requirement group control loads in the service form on the customer service scheduling app.
When a schedulable entity without a resource requirement is booked via the schedule assistant (pop-out
schedule board) days, weeks, or months views, the booking status is populated to the default status.
The resource routes are optimized by listing using the schedule board driving directions in the sort order of a
booking's start time.
Optimized rebooking in the schedule board by fixing a client-side console error.
Map view icon is no longer displayed in the schedule assistant view.
Changes on the default schedule board settings form are saved when accessed from booking setup metadata
record.
Drag and drop the bookings from one resource to another or from one time to another of the same resource in
days, weeks, or months views.
Resource names with apostrophes, like O'Brien, can be searched on the schedule board resources.
Booking a resource requirement for the facility resource type now populates the resource filter field as a facility
in the schedule assistant (pop-out schedule board).
Book based on setting for the schedule board shows how the time slot suggestions are displayed in the Hourly
view of the schedule assistant, and more details on how to use book based on are included.
Duration filter on the schedule assistant for Hebrew is fixed when the value of the duration is 1.
Travel start time on the schedule assistant list view shows as travel time subtracted from the work start time.
Drag and drop multiple open requirements to an expanded resource in days, weeks, or months view to create
multiple bookings.
Rendering of the resources on the schedule board is improved.
View resource cards in the schedule assistant for requirement groups availability.
Schedule assistant minimizes the number of resources necessary to fulfill a requirement group when the Sort
result by field is set to Fewest resources first.
Multiple issues preventing upgrade.
Drag resource route on the map to a requirement pin to create a booking for the resource.
The Select resources filter can be used to select the resources to be displayed on the schedule board.
Only active members of the crew with valid crew membership will be booked when a crew is booked.
Driving directions and the map view on the schedule board have the same traffic icon.
The position of the hover book button on the suggested time slots is adjusted when the preceding booking is
extended beyond the suggested time slot.
When a requirement is selected and the requirements panel is refreshed, the requirement selection persists.
Enhancements
Made improvements to uptake new endpoint Bing distance matrix APIs.
Self-service scheduling API is now available to schedule the single resource requirement.
The work location for new requirements added to a requirement group is now inherited from the work location
of the existing requirements in the requirement group, and is kept in sync.
The calendars of the requirements of a requirement group are kept in sync and share the same calendar.
Changing a calendar or time zone for one requirement updates it for all the requirements of the requirement
group.
When booking a requirement group, the schedule assistant is launched in the time zone of the requirement
group's requirements because they all share the same requirement.
Performance improvements to searching for resource availability, viewing bookings on the schedule board,
creating bookings for crews, creating bookings in the hourly views of the schedule board, and when using other
URS plug-ins.
3.6.0.18
On the schedule assistant, the radius unit behavior reflects kilometers or miles as per the preferred unit of
distance when "Search for" field is changed.
The zoom level on the "Map View" on the "Filter Panel" will be preserved after entering or exiting the Schedule
assistant search.
Only activated members of a crew get booked when a crew is booked.
On the schedule board setting for schedule assistant, the unavailable resources field can be changed from
"Unavailable resources do not appear" to "Unavailable resources appear dimmed" to show the unavailable
resources on the schedule assistant.
Alignment of scheduler settings controls.
On a schedule assistant search for available resources on a location agnostic resource requirement, the "Time
From Promised" and "Time to Promised" time window precedes over the "Search Start" and "Search End" time
window, and the recommendations will be presented to make sure the technician can start work in the "Time
From Promised" and "Time To Promised" window.
Onsite multi-resource requirements will be presented with travel time in the schedule assistant
recommendations.
The filter panel's characteristic field on the schedule assistant is populated with the characteristic from the
resource requirement or work order.
Multiple issues preventing upgrade.
Resource utilization of a resource on non-working day, along with the color code of the non-working day.
Dragging the technician travel route to a requirement pin to schedule the booking in the maps view on the filter
panel of schedule board.
The schedule board setting "Order Number" default maximum value is increased to 1000 from 100.
Duration field value text in Hebrew on schedule assistant.
Enhancements
When inserting a booking between two bookings or reassigning a booking to another resource, the travel time
of all associated bookings will be recalculated and updated on hourly schedule board and schedule assistant.
This feature can be enabled by "Auto Update booking travel" field under Resource Scheduling > Settings >
Administration > Scheduling Parameters .
When the Book button is used on the resource requirement and the timezone on the pop-out schedule board is
updated, the date time fields on the bottom requirement info panel will reflect the changed timezone.
All the date and times in the filter panel and requirements panel on the schedule board are updated when the
time zone is changed in the scheduler settings on the schedule board.
Various performance improvements when searching for resource availability.
3.5.0.107
Booking status on the create resource booking panel is always defaulted to either front load or the last used
value on the schedule board.
On the schedule assistant, a new booking can be created in custom time, by clicking and dragging in the
demand panel, which opens the create resource booking panel for confirmation of booking details.
A resource requirement record can be created by quick create forms on the schedule board, even there are no
resources on the schedule board tab are working.
When the start and end locations of the bookable resource are set to organizational unit address, the
organizational unit field becomes mandatory field.
The row height and column width slider tooltip value is now localized.
The location of the tooltip, when dragging and dropping an existing booking on the board is corrected in the
Hebrew language orgs.
Slider controls on the scheduler settings of the schedule board are aligned in the orgs with right-to-left
languages.
Error handling improvements on the schedule board.
Resource requirement details associated view of resource requirements includes additional details like duration,
from and to fields.
The skills subgrid in the resource requirement form will only show relevant data and hide the redundant data
like the resource requirement name field.
On the schedule board, bookings can be created with the start/end dates in the past.
Contains solution upgrade improvements.
Select resources dialog opens for selection of resources to be shown under the schedule board tab
The working time of the schedule board tab can be configured by using the start time and end time slider
controls under the scheduler settings of the schedule board tab.
Duplicate booking creation on the schedule board, due to network race conditions is now fixed.
The availability cells in the days view of the schedule board are appropriately aligned on the daylight savings
days at 12:00 AM.
The duration of the bookings on the multi-day views of the schedule board can be decreased by dragging the
right end of the booking to left or left end of the booking to right.
The pre-filled characteristic-Rating value in the filter view, can be selected to view it the filter view.
Booking rules dialog respects the cancel button and wouldn't create a booking.
When looking for available resources using a resource requirement for resource type facility, in the list view of
the schedule assistant, organizational unit column shows the appropriate string values.
When clicked on maintain bookings for a team member, opens up the schedule board with the project bookings
for the selected team member.
Book button is displayed on the resource requirement form for the users only with appropriate read/write
privileges to the entity.
Resource requirement for facility type pool can be searched for available resources using the schedule assistant
or find availability.
Enhancements
Improvements are made to the date time controls by leveraging the Office fabric UI control on the resource
requirement, fulfillment preferences, and time group detail forms.
Scheduling Health Diagnostics provides capabilities to detect and suggest self-healing options with regards to:
Unsupported customizations on internal use only web resources.
Actions and workflows that are in draft state.
Essential SDK message processing rules that are in disabled state.
Missing metadata records such as booking setup metadata records, default UFX query values.
Improvements are made to the icons on the booking right-click menu.
If Connect to Maps is disabled, the travel times will be calculated based on the "Crow fly" approximations.
Performance improvements for the retrieve resource availability action calls on the multi-resource requirements
with fulfillment preferences (intervals).
3.4.0.141
Custom date and time fields now display properly on schedule board panels.
Issues opening and saving schedule board resource picker under options in filter control.
Paging issues when using schedule board resource picker under options in the filter panel.
When "Time From Promised" on the requirement is in the past and you search for availability, the value is now
moved to the current time and the search button is enabled.
Changing the schedule board working time no longer immediately closes the settings dropdown.
Book button now appears on views and forms when using USD.
Resources associated to a facility with a parent Organization Unit that is different from the associated facility
correctly use facility organizational unit when it comes to schedule assistant facility search.
Miles/kilometers default properly from scheduling parameters entity.
Generic resource type is removed from resource picker under the select resources dialog.
Auto focus on characteristic rating value in filter control when entering schedule assistant on certain devices.
Overbooked requirements no longer show a negative duration in booking panel when in schedule assistant
Facility searched properly group results by organizational unit, regardless of the value in the "part of same" field
on the requirement group control.
Resources that are location agnostic, yet are associated to a facility, will return in facility searches for the time
they are associated to the facility.
Issue selecting pool type on schedule board filter panel while using Firefox browser.
Selecting cells in daily, weekly, and monthly boards while in schedule assistant now passes information to the
booking panel properly.
Schedule boards that have characteristics with rating values saved no longer prompt user to enter a rating
value.
Issue on certain devices where current timeline bar on schedule board wasn't showing correct time.
Work location on booking is now set properly when using drag and drop on schedule board.
Misaligned labels for languages that read right to left.
Issue loading schedule board in Internet Explorer 11.
Issue creating schedule alerts from certain places.
Enhancements
Various performance improvements when creating bookings.
Dragging to extend a booking on multi-day schedule boards opens booking panel instead of booking dialog.
3.2.0.405
If a booking has the work location field set to location agnostic, the booking will be treated as location agnostic
even if there is a latitude and longitude value on the booking.
Issue with schedule board list view refreshing when changing between hourly and daily.
When searching for a resource in the resource search bar on the schedule board list view, if no resources can be
found, the board properly removes all resources.
Issue dragging a requirement from the map to the schedule board while using Firefox browser.
Changing "derive capacity" field on a pool resource from no to yes now triggers the calendar to be calculated
based on the child resources of the pool.
Issues when changing between horizontal and vertical schedule board while in split view.
Issue loading schedule board with many explicitly saved resources.
Resource's location is now properly taken from the facility it is associated to.
When using a language that reads from right to left, the resource name is now properly rendered on the
schedule board.
When launching the schedule assistant from a schedulable entity, the user now lands back on the same form
after clicking book and exit.
Schedule board no longer shows resource with a capacity greater than 1 as available all day.
When booking a requirement group using the schedule assistant, the booking status dropdown now properly
filters to the booking statuses for that schedulable entity.
Issues loading requirement group control in the Microsoft Edge browser.
When using the schedule assistant to schedule a requirement group for a facility, there is no longer a travel time
conflict between the facility and the resources.
Double booking option in schedule assistant on daily, weekly, and monthly boards now properly books the
resource even if the resource has no remaining capacity.
Appointment schedule board settings are now generated properly.
Issues in certain scenarios where schedule board had issues loading in Internet Explorer.
"Supplied DateTime represents an invalid time" error.
Error message when scheduling a single requirement to a crew resource.
Enhancements
Resources associated to facilities will no longer return in onsite schedule assistant searches. This prevents
customers from accidentally scheduling a resource that should be stationed at a facility from going to a
customer location.
Resources that are not associated or related to a facility will no longer return in facility searches. Currently, when
a resource is set up to work at a facility through an association or as a child resource of a pool, URS does not
account for travel to the facility.
When using the schedule assistant to schedule a requirement group, if the requirement's work location is set to
facility, and there are no options selected under the "part of same" attribute, the search will execute as if part of
same "resource Tree" is selected.
Saving a filter on the schedule board now shows a green confirmation check mark instead of a yellow warning
symbol.
Warning message will now be displayed when trying to change the latitude or longitude field on a booking.
Added validation to check that if a resource is associated to a facility, then it should not be allowed to be a child
resource of a pool associated to a facility or facility pool for the same time frame.
3.1.0.166
If a booking has the work location field set to location agnostic, the booking will be treated as location agnostic
even if there is a latitude and longitude value on the booking.
Issue with schedule board list view refreshing when changing between hourly and daily.
When searching for a resource in the resource search bar on the schedule board list view, if no resources can be
found, the board properly removes all resources.
Issue dragging a requirement from the map to the schedule board while using Firefox browser.
Changing "derive capacity" field on a pool resource from no to yes now triggers the calendar to be calculated
based on the child resources of the pool.
Issues when changing between horizontal and vertical schedule board while in split view.
Issue loading schedule board with many explicitly saved resources.
resources location is now properly taken from the facility it is associated to.
When using a language that reads from right to left, the resource name is now properly rendered on the
schedule board.
When launching the schedule assistant from a schedulable entity, the user now lands back on the same form
after clicking book and exit.
Schedule board no longer shows resource with a capacity greater than 1 as available all day.
When booking a requirement group using the schedule assistant, the booking status dropdown now properly
filters to the booking statuses for that schedulable entity.
Issues loading requirement group control in the Microsoft Edge browser
When using the schedule assistant to schedule a requirement group for a facility, there is no longer a conflict of
travel time between the facility and the resources.
Double booking option in schedule assistant on daily, weekly, and monthly boards now properly books the
resource even if the resource does not have any remaining capacity.
Appointment schedule board settings are now generated properly.
Issues in certain scenarios where schedule board had issues loading in Internet Explorer.
"Supplied DateTime represents an invalid time" error.
Error message when scheduling a single requirement to a crew resource.
Enhancements
Resources associated to facilities will no longer return in onsite schedule assistant searches. This prevents
customers from accidentally scheduling a resource that should be stationed at a facility from going to a
customer location.
Resources that are not associated or related to a facility will no longer return in facility searches. Currently, when
a resource is set up to work at a facility through an association or as a child resource of a pool, URS does not
account for travel to the facility. Therefore, only resources set to work at a facility will return in facility searches.
When using the schedule assistant to schedule a requirement group, if the requirement's work location is set to
facility, and there are no options selected under "part of same" attribute, the search will execute as if part of
same "Resource Tree" is selected.
Saving a filter on the schedule board now shows a green confirmation check mark instead of a yellow warning
symbol.
Warning message will now be displayed to a user if they try to change the latitude or longitude field on a
booking.
Added validation to check if a resource is associated to a facility then it should not be allowed to be a child
resource of a pool that is associated to a facility or facility pool for the same time frame.
2.4.11.59
Read a blog post about the bug fixes.
2.4.10.56
Read a blog post about the bug fixes.
2.1
Read a blog post about the bug fixes.