Breaking news from around the world
Get the Bing + MSN extension
Now Available in Community - MBAS 2019 Presentation Videos
Catch the most popular sessions on demand and learn how Dynamics 365, Power BI, PowerApps, Microsoft Flow, and Excel are powering major transformations around the globe. | View Gallery
2019 release wave 2 Discover the latest updates to Dynamics 365Release overview guides and videos Release Plan | Early Access Availability
Ace your Dynamics 365 deployment with packaged services delivered by expert consultants. | Explore service offerings
Connect with the ISV success team on the latest roadmap, developer tool for AppSource certification, and ISV community engagements | ISV self-service portal
The FastTrack program is designed to help you accelerate your Dynamics 365 deployment with confidence.
FastTrack Program | Finance TechTalks | Customer Engagement TechTalks | Talent TechTalks | Upcoming TechTalks
Regardless of where project management is applied, whether it is in consultancy or when managing internal projects and new initiatives, the core concept of managing project objectives from the conception of a project through to it’s conclusion is still the same. Those objectives can contain aims, those aims contain goals, the goals contain tasks and those tasks are taken ownership of by members of the project team. The key variables can vary from project to project but relatively speaking, in most projects there is an expected effort i.e. how long something is estimated to take, the actual effort spent i.e. how long something has actually taken in reality, and then throughout the project how much work is left to do at a given time (normally at time of asking or at key milestones.) Having this information available to you easily and with relatively little effort can be quite a challenge and what’s more keeping track of all this information can be costly, complicated and time consuming when all you want to be able to do is check if things are going to plan and re-align expectations if required as soon as possible.
This post centres around a small XRM Microsoft Dynamics CRM Solution which has the purpose of giving you the ability to track this information in a non-convoluted and non-problematic way that is adaptable to most styles of project management. It takes advanced of the strong reporting capabilities through Charts, Dashboards and query building using Advanced Find so that you can easily retrieve the information your looking for in next to no time. Whilst it does use some agile-esque elements, it is certainly not something that needs to be central to your business to use or gain benefits from this solution.
This post describes how to build an effective, easy to use, and more importantly, simple, Project Management XRM Solution in less than 7 hours using the resources I have put together for you.
The solution includes a plugin which is less than 100 lines of custom code which is featured as part of the supporting files, so if you want to build everything else but not the plugin, your free to use the code from this post. It uses late bound C#. The remaining functionality uses all out of the box business logic including roll-up fields, calculated fields, views, dashboards and charts (with some minor XML modifications).
The purpose of the solution is to provide simple, powerful and easy to use functionality that enables a project manager to keep track of outstanding effort on projects, make decisions quicker (not just at the deliverable stages) and have good visibility of numerous and sometimes parallel workloads in projects.
Lets break down this purpose and discuss how the solution aims to meet that purpose:
Keep track of outstanding effort
Make decisions quicker
Have good visibility of projects
You don’t have to use dynamics, and I’m not disputing the capabilities of some very effective purpose built project management software, however Dynamics CRM has some fantastic core functionality and some of these include reporting using charts, views and advanced find which are all ridiculously easy to use and maintain, and so by utilising the extensibility of CRM, it can be turned into an effective addition to whatever else you wish to use CRM for in your business.
Out of the box functionality has been used as much as possible when building this solution. I do not claim this solution is perfect, it most certainly isn’t, however it can be used ‘as is’ without any modifications. I encourage you to make it better, enhanced it, rip it apart if you want to, hopefully it will inspire you and help you in some way. (I’ve added a bullet pointed list of ‘Ways to extend the solution’ near the bottom of this post). Whilst I have used out of the box functionality, including a fair number of calculated and rollup fields, you may see in the implementation some of the disadvantages of these (not instant, scheduled). There was some core functionality I was unable to implement out of the box, which was the creation of an unknown number of records for a Sprint (Day Breakdown). This was because by kicking off child workflows, it would create what CRM considers an infinite loop as there is a safety mechanism to prevent more than 8 cycles. However, it is less than 100 lines of non-complex custom code and 1 plugin, 1 step. You may use the entire code (changing the schema names if required) if you wish in your implementation featured here as the code is included in the supporting files.
Before you build the solution, I recommend you check the section at the bottom called ‘Files’ and download the XRMPM Component breakdown as it includes screenshots etc out so you can see how it works, if you like it, if it suits your purpose basically. You may want to change parts of it and knowing that before you build it will help save you a lot of time.
There are some keywords (used in fields) and terminology used in the solution and these are defined below to avoid misunderstanding:
This solution has been built for two core use cases. One for a more agile implementation where you have a Project Team, you have a set amount of days, amount of effort and that team is working on nothing else but that workload. The second is where you can use it for grouped sections of work e.g. 1 person, 5 chargeable days in a month at 7 hours a day and also that person has 10 chargeable days at 3.5 hours a day on a different sprint – the important thing to note is the solution doesn’t manage the person’s workload i.e. assign tasks, or have any knowledge as to ‘who’ is doing the work, that is not it’s purpose.
(“”) indicate the data entered in the use-case examples, I’ve talked too much and added descriptions in these use cases for extra context to assist.
Use case #1 – Agile Implementation of a Project – Document XYZ – Creating a Project & Associated Sprint
You may click around at this point and investigate – You’ll see the number of days have been created for what you entered plus an additional ‘Day 0′ this is your starting Day and is not a real day – it is so your burndown chart has a starting point. How to use Day 0 is detailed in UseCase #3 Starting a Sprint.
Use case #2 – Any Implementation of a Project – Document XYZ – Creating a Project & Associated Sprint
Use Case 3# Starting a Sprint
Use Case 4# Managing Sprints (All Implementation Methods)
To manage a day of a sprint, you need to know: How much effort is remaining on the Sprint (It gets re-addressed every Day of the Sprint), and how much effort has been spent on that day. Those are the only two pieces of information you need per Day of the Sprint.
It’s worth noting if you have implemented a non-agile approach where your 5 Day Sprint could be split over 1 month – you don’t have to update the Days every day obviously and only update when they are scheduled to be completed.
I’ve written specification documents including component breakdowns.I recommend you review this before going any further to gain full context and information of the steps included in this section. You will need the document titled ‘XRMPM Component Breakdown’ available from dropbox here, to complete this section.
Create a new solution for your work.
This solution uses 3 custom entities:
Using the documentation provided, I suggest creating the entities first, creating the fields only, leaving the rollup & calculated business logic for the next section.
Now add in your field business logic for your rollup and calculated fields, there are 6 in total across the 3 entities. To add this business logic, navigate to the field and select ‘Edit’ next to the ‘Type’. This business logic is in the right hand side of the table in the documentation.
The ‘Create Sprint’ dialog is core functionality and I suggest creating this first. It is very simple & all you need to do is follow the steps below:
There are then two supporting real-time workflows:
Update Actual and Ideal Effort Remaining
This functionality uses a real-time workflow on the Day entity to update the Actual and Ideal efforts from the Day record that has been modified last to the parent Sprint, so the two fields on the Sprint (Ideal effort remaining and Actual Effort Remaining) should always be based on the latest Day record updated.
It triggers when the Status Reason changes on the Day record – and updates the parent Sprint from the Day record with the ideal effort value and the actual remaining effort value. It overwrites whatever was in their previously.
Rollup to Parent Project
This functionality transfers some key figures over to the Project when the Sprint is completed. It triggers from the Sprint entity when ‘All Days Completed’ is set to Yes. It then updates the parent project by incrementing the field ‘Total Sprint Ideal Effort’ and ‘Total Effort Used’ fields by the values on the Sprint record of Total Capacity (Ideal Effort) and ‘Total Effort Spent” respectively. This then will give an incrementing value regardless of the number of sprints per project so can always be used as a way of tracking the ideal vs actual per project and it’s associated Sprints.
The plugin uses less than 100 lines of codes however the full code can be found in the txt file called ‘CreateDaysAutomation.txt’ and then paste the meat of it into your empty plugin solution.
Open Visual Studio, using the developers toolkit create a new dynamics project and then after connecting to an organisation, right click the entity on the CRM Explorer and select ‘Create Plugin’ – This plugin is on the Create of a Sprint and is on Post Operation.
Check out the video to watch this in action and I briefly explain what is going on in the code.
The Burndown chart is fairly simple to make, the video explains it better, but if you don’t want to watch it download the xml from dropbox and follow the bullet pointed list:
<TextAnnotation X=”50″ Y=”0″ Text=”Burndown Chart: Ideal vs Actual Progress” TextStyle=”Default” Font=”Verdana, 13px” ForeColor=”59, 59, 59″ ToolTip=”This burndown chart documents the expected ideal effort vs the actual effort documented on the Day breakdown per Sprint” />
Massive thanks to CRM Chart Guy’s blog which is absolutely amazing, check it out here.
The remaining tasks left to do in your new solution are more housekeeping activities now. Add icons to make it look more professional, customise your views using the documentation provided in the Component list under ‘Views’ for each entity – there are table breakdowns detailing the query and columnset.
The additional Chart is available in the document ‘Total Capacity vs Total Effort Spend.xml’ and is on the Sprint entity. This is a very simple chart of two series (Total Capacity) and (Total Effort Spent (Hours)) both Sum and both bar Chart. The Category is Sprint, and the customisations include the same red colour used in the burndown chart on the second series, legend angle customisation addition on Axis X (LabelAutoFitStyle=”LabelsAngleStep30″) placed just after TitleForeColor and removal of the secondary Y axis so they only use one. This chart looks at the ideal effort vs actual effort on a sprint and can be used to easily identify over capacity.
Now is the best time to create your dashboards, you can put them together how you wish – I have included my setup in the Component list so feel free to use that, or use your own. (Screenshots below).
Feel free to then change anything you want to in the solution as now would be a good time to do so if you wanted to build or tweak it if you have not yet done so and wanted to change anything. (You don’t have to).
I fully recommend unit testing your new application – when I initially created this application I found a few nuances in it where I had to then create a few business rules and tweak some of the fields. Also you may find that the roll-up fields non-instant aggregation is irritating so you may wish to replace these with something like small plugins as these can affect views sometimes if they are not up to date and you want literally, instant information.
I recommend to unit test follow the four use case descriptions above.
There are various ways to expand on this solution and ones that I may look at in the future are:
I hope this has been helpful and of course, if you have any questions please just let me know
Business Applications communities