{"id":32854,"date":"2022-10-17T16:32:14","date_gmt":"2022-10-17T11:02:14","guid":{"rendered":"https:\/\/www.inogic.com\/blog\/?p=32854"},"modified":"2023-01-27T12:11:55","modified_gmt":"2023-01-27T06:41:55","slug":"advanced-schedule-board-customizations-in-dynamics-365-field-service","status":"publish","type":"post","link":"https:\/\/www.inogic.com\/blog\/2022\/10\/advanced-schedule-board-customizations-in-dynamics-365-field-service\/","title":{"rendered":"Advanced Schedule Board Customizations in Dynamics 365 Field Service"},"content":{"rendered":"<p>In our previous <a href=\"https:\/\/www.inogic.com\/blog\/2022\/09\/schedule-board-extensibility-in-microsoft-dynamics-365-field-service\" target=\"_blank\" rel=\"noopener\">blog<\/a>, we looked into basic configurations for extending the Schedule Board functionalities by adding various types of Controls within the Filter Panel, which filters the Bookable Resources based on the filter conditions.<\/p>\n<p>There can be various complex scenarios where we have to customize the Dynamics 365 Field Service Schedule board, in this blog we can go through the configuration of the Schedule Board for complex link entities within Filter Layout Queries.<\/p>\n<p>In Dynamics 365 Field Service, the Dispatcher uses the Schedule board to allocate the Bookable Resource for specific Resource Requirements to work on the same, and the Dispatcher must assign the Resource item to the appropriate Resources on the field. Currently, Field Service has a specific set of OOB filters within the Filter Panel of the Schedule Board to filter out the Resources, but in some, the business scenario will require having the resources filtered out based on attributes of related Account, User, etc. So, this can be achieved using customizations within the Unified Fetch XML queries i.e. Retrieve Resource Query, Filter Layout Query of the Schedule Board Setting.<\/p>\n<p>This blog will go through the steps to configure these kinds of conditions for Resource Filtration on the Schedule board.<\/p>\n<p>For Example, we will consider a scenario where on the schedule board we have to Filter Resources based on below conditions:<\/p>\n<ul>\n<li>Filter <strong>Pricelist <\/strong>for<strong> Bookable Resources<\/strong> if the Resource Type is <strong>Account<\/strong>.<\/li>\n<li>Add filter for <strong>Resource Score <\/strong>of<strong> Bookable Resources<\/strong> if the <strong>Resource Type<\/strong> of <strong>Account<\/strong>.<\/li>\n<\/ul>\n<p>Let\u2019s explore the configuration for Universal Fetch XML Queries to customize the Schedule board with the above-mentioned requirement in Dynamics 365 Field Service.<\/p>\n<p>1. Navigate to the respective <strong>Schedule Board<\/strong> &gt;&gt; <strong>Board Setting<\/strong> and edit the \u201c<strong>Filter Layout<\/strong>\u201d Query with the below tag to add the Lookup control for Pricelist selection in the Filter Layout Panel.<\/p>\n<p>Please refer to the below screenshot for the same.<\/p>\n<pre class=\"lang:css gutter:true start:1\">&lt;control type=\"combo\" source=\"entity\" key=\"Pricelist\" label-id=\"Resource Pricelist\" entity=\"pricelevel\" multi=\"true\" \/&gt;<\/pre>\n<p><img decoding=\"async\" class=\"alignnone size-full wp-image-32859\" style=\"border: 1px solid #0a0a0a; padding: 1px; margin: 1px;\" src=\"https:\/\/www.inogic.com\/blog\/wp-content\/uploads\/2022\/10\/1Dynamics-365-Field-Service.jpeg\" alt=\"Dynamics 365 Field Service\" width=\"1439\" height=\"825\" srcset=\"https:\/\/www.inogic.com\/blog\/wp-content\/uploads\/2022\/10\/1Dynamics-365-Field-Service.jpeg 1439w, https:\/\/www.inogic.com\/blog\/wp-content\/uploads\/2022\/10\/1Dynamics-365-Field-Service-300x172.jpeg 300w, https:\/\/www.inogic.com\/blog\/wp-content\/uploads\/2022\/10\/1Dynamics-365-Field-Service-1024x587.jpeg 1024w, https:\/\/www.inogic.com\/blog\/wp-content\/uploads\/2022\/10\/1Dynamics-365-Field-Service-768x440.jpeg 768w, https:\/\/www.inogic.com\/blog\/wp-content\/uploads\/2022\/10\/1Dynamics-365-Field-Service-660x378.jpeg 660w\" sizes=\"(max-width: 1439px) 100vw, 1439px\" \/><\/p>\n<p>2. Similarly, for Resource Score (custom field on the Account) will add control for Resource Score optionset selection in the Filter Layout Panel.<\/p>\n<p>Please refer to the below screenshot for the same.<\/p>\n<pre class=\"lang:css gutter:true start:1\">&lt;control type=\"combo\" source=\"optionset\" key=\"ResourceScore\" label-id=\"Resource Score\" entity=\"account\" attribute=\"custom_resourcescore\" multi=\"true\" &gt;\r\n\r\n&lt;data&gt;\r\n\r\n&lt;value id=\"483050000\" \/&gt;\r\n\r\n&lt;value id=\"483050001\" \/&gt;\r\n\r\n&lt;value id=\"483050002\" \/&gt;\r\n\r\n&lt;value id=\"483050003\" \/&gt;\r\n\r\n&lt;\/data&gt;\r\n\r\n&lt;\/control&gt;<\/pre>\n<p><img decoding=\"async\" class=\"alignnone size-full wp-image-32858\" style=\"border: 1px solid #0a0a0a; padding: 1px; margin: 1px;\" src=\"https:\/\/www.inogic.com\/blog\/wp-content\/uploads\/2022\/10\/2Dynamics-365-Field-Service.jpeg\" alt=\"Dynamics 365 Field Service\" width=\"1437\" height=\"813\" srcset=\"https:\/\/www.inogic.com\/blog\/wp-content\/uploads\/2022\/10\/2Dynamics-365-Field-Service.jpeg 1437w, https:\/\/www.inogic.com\/blog\/wp-content\/uploads\/2022\/10\/2Dynamics-365-Field-Service-300x170.jpeg 300w, https:\/\/www.inogic.com\/blog\/wp-content\/uploads\/2022\/10\/2Dynamics-365-Field-Service-1024x579.jpeg 1024w, https:\/\/www.inogic.com\/blog\/wp-content\/uploads\/2022\/10\/2Dynamics-365-Field-Service-768x435.jpeg 768w, https:\/\/www.inogic.com\/blog\/wp-content\/uploads\/2022\/10\/2Dynamics-365-Field-Service-660x373.jpeg 660w\" sizes=\"(max-width: 1437px) 100vw, 1437px\" \/><\/p>\n<p>3. Now we have to add the Link Entity conditions for filter conditions which will filter out the resources based on the below conditions:<\/p>\n<ul>\n<li>Filter <strong>Pricelist<\/strong> if the Resource Type is <strong>Account<\/strong>.<\/li>\n<li>Add filter for <strong>Resource Score<\/strong> if the <strong>Resource Type<\/strong> of <strong>Account<\/strong>.<\/li>\n<\/ul>\n<p>For these conditions will have to add the Link Entity for Account of the Resource from Bookable Resource Booking within \u201c<strong>Retrieve Resource Query<\/strong>\u201d as shown below:<\/p>\n<pre class=\"lang:css gutter:true start:1\">&lt;link-entity name=\"account\" from=\"accountid\" to=\"accountid\" link-type=\"inner\" ufx:if=\"$input\/Pricelist | $input\/ResourceScore\"&gt;\r\n\r\n&lt;attribute name=\"accountid\" alias=\"accountid\" groupby=\"true\"\/&gt;\r\n\r\n&lt;attribute name=\"entityimage_url\" alias=\"accountimagepath\" groupby=\"true\"\/&gt;\r\n\r\n&lt;attribute name=\"name\" alias=\"AccountName\" groupby=\"true\"\/&gt;\r\n\r\n&lt;attribute name=\"custom_resourcescore\" alias=\"custom_resourcescore\" groupby=\"true\" \/&gt;\r\n\r\n&lt;!--Resource pricelist--&gt;\r\n\r\n&lt;filter type=\"and\"&gt;\r\n\r\n&lt;condition operator=\"in\" attribute=\"defaultpricelevelid\" ufx:if=\"$input\/Pricelist\/bag\"&gt;\r\n\r\n&lt;ufx:apply select=\"$input\/Pricelist\/bag\"&gt;\r\n\r\n&lt;value&gt;\r\n\r\n&lt;ufx:value select=\"@ufx-id\" \/&gt;\r\n\r\n&lt;\/value&gt;\r\n\r\n&lt;\/ufx:apply&gt;\r\n\r\n&lt;\/condition&gt;\r\n\r\n&lt;!--Resource Score--&gt;\r\n\r\n&lt;condition attribute=\" custom_resourcescore\" operator=\"in\" ufx:if=\"$input\/ResourceScore\/bag\/option\"&gt;\r\n\r\n&lt;ufx:apply select=\"$input\/ResourceScore\/bag\/option\"&gt;\r\n\r\n&lt;value&gt;\r\n\r\n&lt;ufx:value select=\".\" \/&gt;\r\n\r\n&lt;\/value&gt;\r\n\r\n&lt;\/ufx:apply&gt;\r\n\r\n&lt;\/condition&gt;\r\n\r\n&lt;\/filter&gt;\r\n\r\n&lt;\/link-entity&gt;<\/pre>\n<p>Please find below comments for the highlighted ufx:if tags:<\/p>\n<ul>\n<li>ufx:if=&#8221;$input\/Pricelist | $input\/ResourceScore&#8221;: This UFX tag in the link entity tag defines that this link entity condition applies only if the Pricelist or ResourceScore control in the Filter Layout Panel has values, otherwise this filter will not be applied.<\/li>\n<li>ufx:if=&#8221;$input\/Pricelist\/bag&#8221;: As per our requirement we have to check two attribute values within the same Link Entity of <strong>Account<\/strong>, one for <strong>Price List<\/strong> and one for <strong>Resource Score<\/strong>. Therefore, in order to define the <strong>Pricelist<\/strong> attribute condition, we have to add this ufx: if tag.<\/li>\n<li>ufx:if=&#8221;$input\/ResourceScore\/bag\/option&#8221;: Similarly, for the <strong>Resource Score<\/strong> condition, this tag will define this condition and will only be applied if the <strong>Resource Score<\/strong> control has values on the <strong>Filter Panel<\/strong>.<\/li>\n<\/ul>\n<p>Let\u2019s see the result of our customizations on the schedule board with scenarios:<\/p>\n<p>a. Filter <strong>Pricelist<\/strong> as <strong>Retail<\/strong> on <strong>Resources<\/strong> having <strong>Resource Type<\/strong> as <strong>Account<\/strong>.<\/p>\n<p><img decoding=\"async\" class=\"alignnone size-full wp-image-32857\" style=\"border: 1px solid #0a0a0a; padding: 1px; margin: 1px;\" src=\"https:\/\/www.inogic.com\/blog\/wp-content\/uploads\/2022\/10\/3Dynamics-365-Field-Service.jpeg\" alt=\"Dynamics 365 Field Service\" width=\"1339\" height=\"825\" srcset=\"https:\/\/www.inogic.com\/blog\/wp-content\/uploads\/2022\/10\/3Dynamics-365-Field-Service.jpeg 1339w, https:\/\/www.inogic.com\/blog\/wp-content\/uploads\/2022\/10\/3Dynamics-365-Field-Service-300x185.jpeg 300w, https:\/\/www.inogic.com\/blog\/wp-content\/uploads\/2022\/10\/3Dynamics-365-Field-Service-1024x631.jpeg 1024w, https:\/\/www.inogic.com\/blog\/wp-content\/uploads\/2022\/10\/3Dynamics-365-Field-Service-768x473.jpeg 768w, https:\/\/www.inogic.com\/blog\/wp-content\/uploads\/2022\/10\/3Dynamics-365-Field-Service-660x407.jpeg 660w\" sizes=\"(max-width: 1339px) 100vw, 1339px\" \/><\/p>\n<p>b. Filter Resources with <strong>Resource Score<\/strong> as <strong>Good<\/strong>.<\/p>\n<p><img decoding=\"async\" class=\"alignnone size-full wp-image-32856\" style=\"border: 1px solid #0a0a0a; padding: 1px; margin: 1px;\" src=\"https:\/\/www.inogic.com\/blog\/wp-content\/uploads\/2022\/10\/4Dynamics-365-Field-Service.jpeg\" alt=\"Dynamics 365 Field Service\" width=\"1437\" height=\"827\" srcset=\"https:\/\/www.inogic.com\/blog\/wp-content\/uploads\/2022\/10\/4Dynamics-365-Field-Service.jpeg 1437w, https:\/\/www.inogic.com\/blog\/wp-content\/uploads\/2022\/10\/4Dynamics-365-Field-Service-300x173.jpeg 300w, https:\/\/www.inogic.com\/blog\/wp-content\/uploads\/2022\/10\/4Dynamics-365-Field-Service-1024x589.jpeg 1024w, https:\/\/www.inogic.com\/blog\/wp-content\/uploads\/2022\/10\/4Dynamics-365-Field-Service-768x442.jpeg 768w, https:\/\/www.inogic.com\/blog\/wp-content\/uploads\/2022\/10\/4Dynamics-365-Field-Service-660x380.jpeg 660w\" sizes=\"(max-width: 1437px) 100vw, 1437px\" \/><\/p>\n<p>b. Combination of <strong>Resource Score<\/strong> and <strong>Pricelist<\/strong> filter conditions.<\/p>\n<p><img decoding=\"async\" class=\"alignnone size-full wp-image-32855\" style=\"border: 1px solid #0a0a0a; padding: 1px; margin: 1px;\" src=\"https:\/\/www.inogic.com\/blog\/wp-content\/uploads\/2022\/10\/5Dynamics-365-Field-Service.jpeg\" alt=\"Dynamics 365 Field Service\" width=\"1435\" height=\"785\" srcset=\"https:\/\/www.inogic.com\/blog\/wp-content\/uploads\/2022\/10\/5Dynamics-365-Field-Service.jpeg 1435w, https:\/\/www.inogic.com\/blog\/wp-content\/uploads\/2022\/10\/5Dynamics-365-Field-Service-300x164.jpeg 300w, https:\/\/www.inogic.com\/blog\/wp-content\/uploads\/2022\/10\/5Dynamics-365-Field-Service-1024x560.jpeg 1024w, https:\/\/www.inogic.com\/blog\/wp-content\/uploads\/2022\/10\/5Dynamics-365-Field-Service-768x420.jpeg 768w, https:\/\/www.inogic.com\/blog\/wp-content\/uploads\/2022\/10\/5Dynamics-365-Field-Service-660x361.jpeg 660w\" sizes=\"(max-width: 1435px) 100vw, 1435px\" \/><\/p>\n<h2><strong>Conclusion<\/strong><\/h2>\n<p>In this way, we can configure complex conditions with link entities to filter out the suitable Bookable Resources on the Schedule Board.<\/p>\n<h3 style=\"text-align: left;\"><div class=\"su-heading su-heading-style-default su-heading-align-center\" id=\"\" style=\"font-size:15px;margin-bottom:5px\"><div class=\"su-heading-inner\">Come, automate your field services with us!<\/div><\/div><\/h3>\n<p><em>Does your employee schedule board need to be updated manually after every entry?<br \/>\nContact us at <a href=\"mailto:crm@inogic.com\" target=\"_blank\" rel=\"noopener\">crm@inogic.com<\/a> and our Inogic- Professional Services Division will help you automate the process and help in better utilization of <a href=\"https:\/\/bit.ly\/3VvGawa\" target=\"_blank\" rel=\"noopener\">Microsoft Dynamics 365 Field Service.<\/a><\/em><\/p>\n<p><em>Happy Servicing!<\/em><\/p>\n","protected":false},"excerpt":{"rendered":"<p>In our previous blog, we looked into basic configurations for extending the Schedule Board functionalities by adding various types of Controls within the Filter Panel, which filters the Bookable Resources based on the filter conditions. There can be various complex scenarios where we have to customize the Dynamics 365 Field Service Schedule board, in this\u2026 <span class=\"read-more\"><a href=\"https:\/\/www.inogic.com\/blog\/2022\/10\/advanced-schedule-board-customizations-in-dynamics-365-field-service\/\">Read More &raquo;<\/a><\/span><\/p>\n","protected":false},"author":13,"featured_media":0,"comment_status":"closed","ping_status":"closed","sticky":false,"template":"","format":"standard","meta":{"om_disable_all_campaigns":false,"_monsterinsights_skip_tracking":false,"_monsterinsights_sitenote_active":false,"_monsterinsights_sitenote_note":"","_monsterinsights_sitenote_category":0,"footnotes":""},"categories":[18,27,2361],"tags":[553,2305],"class_list":["post-32854","post","type-post","status-publish","format-standard","hentry","category-dynamics-365-v9-2","category-field-service-2","category-technical","tag-dynamics-365-field-service","tag-schedule-board"],"aioseo_notices":[],"_links":{"self":[{"href":"https:\/\/www.inogic.com\/blog\/wp-json\/wp\/v2\/posts\/32854","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/www.inogic.com\/blog\/wp-json\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/www.inogic.com\/blog\/wp-json\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/www.inogic.com\/blog\/wp-json\/wp\/v2\/users\/13"}],"replies":[{"embeddable":true,"href":"https:\/\/www.inogic.com\/blog\/wp-json\/wp\/v2\/comments?post=32854"}],"version-history":[{"count":0,"href":"https:\/\/www.inogic.com\/blog\/wp-json\/wp\/v2\/posts\/32854\/revisions"}],"wp:attachment":[{"href":"https:\/\/www.inogic.com\/blog\/wp-json\/wp\/v2\/media?parent=32854"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/www.inogic.com\/blog\/wp-json\/wp\/v2\/categories?post=32854"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/www.inogic.com\/blog\/wp-json\/wp\/v2\/tags?post=32854"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}