Webcraft Solutions

Scheduling Resources for Project Tasks

The most complicated part post planning the WBS for a PM is allocation. Typically project managers allocate team members on the tasks they are supposed to perform. These tasks are from WBS that is prepared while planning the project. With D365 PSA it is slight different. We do not allocate resource on to a project tasks, but, book them for a certain duration on to the project under certain role.   Though this normal behaviour can be tweaked to suit the normal needs of a PM. We need to take in slight efforts to do the following to attain allocation of resources at task level.   Below are the things that we need to Configuration changes to be done Enable the Project Task entity for scheduling To enable the Project Task Entity for scheduling we need to enable is from the Resource Scheduling Entity –>Administration. Creation of views on below entities Bookable Resource Booking For creating this view we will navigate to Settings–>CustomizationsàCustomize the Solution–> Expand Entities Tab and search for “Bookable Resource Booking Entity”–> Click on Views –> Click on New and Create a new view with the following fields as shown in the screenshot below: Resource Requirement For creating this view we will navigate to Settings –> Customizations –> Customize the Solution  –> Expand Entities Tab and search for “Resource Requirement Entity”–> Click on Views –> Click on New and Create a new view with the following fields as shown in the screenshot below: Schedule board changes: Following are the changes that needs to be done on the schedule board: I prefer making the changes in the Initial Public View. But, you can create a special view for yourself if needed. Click on the “Initial Public View” that opens a Pop-Up as shown below: We shall make the changes in Schedule Types and Requirement Panels Tab:   Schedule Types Changes Requirement Panels Changes What does the Plugin do?   Only the configuration changes mentioned above won’t help and complete the Project Task Scheduling needs. We will need to write a Plugin on the create of task in WBS. The Plugin will trigger 2 time, on Create of the Task and once on the Update of the task in WBS. The Plugin Creates and Updates the following fields: Name (Project Task Name) Role Start Date End Date Duration Project This Plugin creates a Resource Requirement with the task details provided in WBS. You can also download the Plugin script from the below URL: https://cloudfronts1-my.sharepoint.com/:u:/g/personal/swath_cloudfronts_com/EdvcbnWzBU5Ouz3sYUxlhqsBRupolAt_nbXntK2IStp-yA?e=QacpwH This blog reflects my personal findings and based solely on my experience of using PSA for last 3 years. For those who are looking for a platform that can track and manage the entire procedures of sales and project managements, I would highly recommend them to try Microsoft dynamics 365 for project service automation. According to my opinion, implementation of Microsoft dynamics 365 for project service automation is one of the best things that we did in CloudFronts Technologies. We have gained a lot with this implementation because we save time and money due to easy access resources and ability to manage them.    

Bulk delete allocations in CRM

There have been instances where we feel the need of deleting some records in bulk. I was looking at options of doing advanced search and saw that there were 500+ records showing up. Also, at a time Advanced Find allows to delete 50 records in one go. We definitely needed a better option and Data Management provided that option to delete records in bulk. Use Case: I created a Project Task in a project. This was the only task in the project on which I booked all the resources in my company for 8 hours per day until dec-2022 from June-2018. There were around more then 500+ allocations done for all the Resources. Somewhere, I figured out that this was not the task I wanted to allocate and then I tried many ways deleting the allocations. Below is what all I tried. Option 1: I tried to open the schedule board and delete the allocations from there from month view. But. Deleting it from schedule board takes lot of time to delete the allocations even for one month and imagine we have so many months allocation to delete. Hence, this was not a feasible option.   Option 2: I tried deleting the allocations from Advanced find by selecting the criteria as shown below in the screen shot. But, it allowed me to delete only 50 records in a go which was again an issue.   After trying above 2 methods and doing some research we came across Bulk Delete option in Data Management Module. Below is the solution to the issue. Solution: Step 1: login on CRM and navigate to Settings module and Data Management in there as shown below. Step 2: Click on Bulk Record Deletion option. Step 3: Bulk deletion wizard opens. Step 4: Define your search criteria that selects the records to be deleted. It is similar to the Advanced Find tool. Step 5: Name the Bulk deletion job and schedule the same. You  can also tick the check box to notify via email when the job is completed successfully. Step 6: This is the job which shows the status of the task, no of records deleted. You are done with the process and it will take some time for the process to delete the records. This blog reflects my personal findings and based solely on my experience of using PSA for last 3 years. For those who are looking for a platform that can track and manage the entire procedures of sales and project managements, I would highly recommend them to try Microsoft dynamics 365 for project service automation. According to my opinion, implementation of Microsoft dynamics 365 for project service automation is one of the best things that we did in CloudFronts Technologies. We have gained a lot with this implementation because we save time and money due to easy access resources and ability to manage them.    

FetchXML to get the Bookable Resource vs there Sales Price

You can use the below code to get the bookable resource and its sales price. FetchXML Code <fetch version=”1.0″ output-format=”xml-platform” mapping=”logical” distinct=”true”> <entity name=”bookableresourcebooking”> <attribute name=”starttime” /> <attribute name=”resource” /> <attribute name=”endtime” /> <attribute name=”duration” /> <attribute name=”msdyn_projectid” /> <attribute name=”bookingtype” /> <attribute name=”bookingstatus” /> <attribute name=”bookableresourcebookingid” /> <order attribute=”starttime” descending=”true” /> <filter type=”and”> <condition attribute=”bookingstatus” operator=”ne” uiname=”Canceled” uitype=”bookingstatus” value=”{0ADBF4E6-86CC-4DB0-9DBB-51B7D1ED4020}” /> <condition attribute=”duration” operator=”ne” value=”0″ /> <condition attribute=”msdyn_projectid” operator=”not-null” /> <condition attribute=”starttime” value=”@sd” operator=”on-or-after”/> <condition attribute=”endtime” value=”@ed” operator=”on-or-before”/> </filter> <link-entity name=”msdyn_project” from=”msdyn_projectid” to=”msdyn_projectid” link-type=”inner” alias=”cy”> <link-entity name=”msdyn_resourcerequirement” from=”msdyn_projectid” to=”msdyn_projectid” link-type=”inner” alias=”cz”> <attribute name=”cf_role” /> <filter type=”and”> <condition attribute=”cf_role” operator=”ne” uiname=”Non-Billable” uitype=”bookableresourcecategory” value=”{93807AC5-176A-E811-A963-000D3A81E302}” /> </filter> <link-entity name=”bookableresourcecategory” from=”bookableresourcecategoryid” to=”cf_role” link-type=”inner” alias=”da”> <link-entity name=”msdyn_resourcecategorypricelevel” from=”msdyn_resourcecategory” to=”bookableresourcecategoryid” link-type=”inner” alias=”r_price”> <attribute name=”msdyn_priceinprimaryunit_base”/> <attribute name=”msdyn_priceinprimaryunit”/> <attribute name=”msdyn_price”/> <attribute name=”transactioncurrencyid”/> <filter type=”and”> <condition attribute=”msdyn_organizationalunit” operator=”eq” uiname=”CloudFronts” uitype=”msdyn_organizationalunit” value=”{95E73D37-0A6A-E811-A964-000D3A81EAE4}” /> </filter> <link-entity name=”pricelevel” from=”pricelevelid” to=”msdyn_pricelist” link-type=”inner” alias=”ep”> <attribute name=”name”/> <attribute name=”createdon”/> <order attribute=”createdon” descending=”true” /> <link-entity name=”msdyn_orderpricelist” from=”msdyn_pricelist” to=”pricelevelid” link-type=”inner” alias=”price_list” > <attribute name=”msdyn_pricelist” /> </link-entity> </link-entity> </link-entity> </link-entity> </link-entity> <link-entity name=”salesorderdetail” from=”msdyn_project” to=”msdyn_projectid” link-type=”inner” alias=”dc”> <attribute name=”msdyn_billingmethod”/> <filter type=”and”> <condition attribute=”msdyn_billingmethod” operator=”eq” value=”192350000″ /> </filter> <link-entity name=”salesorder” from=”salesorderid” to=”salesorderid” link-type=”inner” alias=”fr” > <attribute name=”name”/> </link-entity> </link-entity> </link-entity> </entity> </fetch> Also: if you want to see it in the advanced find, attached is the screenshot how it will look.  

Delegate work around in PSA V3

As we explore the time entry functionality, the option of Delegates functionality is no longer available OOB in PSA V3. Though we can enable Delegate entity from the site map. But, even then there are some customizations that might be needed on Time Entry entity. Like: adding a look up for the bookable resource. Writing a plugin/Workflow to update the bookable resource field from the lookup field added on the time entry screen. Adding validity period that validates until when the delegate function should be available for a resource. Plugin to check whether the validity is still prevailing or not and in case not, removing the name of the resource from the bookable resource field added on the time entry entity.   But if we try to compromise on the functionality of checking the validity in Pt. 3 above which V2 version of PSA offers, we can achieve the same by exposing the Bookable Resource field on the Quick Create Time Entry Form. Follow the steps to expose the same: Step 1: Go to D365 Custom app: This will take you to the old classic interface. Step 2: Go To SettingsàSolutions and open an un-managed solution of yours. Step 3: Browse to Time Entry Entity and open the Quick Create Form from the Forms section as shown below. Step 4: Drag the Bookable resource field from the Field Explorer on to the quick create form as per below:   Step 5: Publish the customization and then check the time entry screen to see if the field is visible.   Step 6: Open the Time Entry Quick create form to do a new time entry.   Fill the time entry. Now if you want to do a time entry on behalf of other resource, select that resource in the Bookable Resource lookup. If you do not select the Bookable Resource and leave it blank the Bookable Resource is by default the logged in user. Save and Close the time entry. In order to validate, ask the user for whom the time entry is done and it should be visible in the time entry screen of his. This way we achieve the Delegate functionality in PSA V3 by compromising the delegate validation functionality.   This blog reflects my personal findings and based solely on my experience of using PSA for last 3 years. For those who are looking for a platform that can track and manage the entire procedures of sales and project managements, I would highly recommend them to try Microsoft dynamics 365 for project service automation.