I recently had a requirement to be able to quickly resolve a case in Microsoft’s Unified Service Desk (USD), in the end the solution was really easy but not quite what I expected. Here is my solution ….
You probably know that out of the box the resolve case button displays a dialog that can’t be customised. Often organisations will require a simpler approach. As a reminder standard dialog is shown below;
I wanted a simple agent script to resolve the case without the agents having to complete this dialog. I didn’t really care what went into the resolution text or billable time. I just wanted the case to be resolved but I wanted it done “properly”, meaning I wanted to still see the resolution activity. I happened to recall that the Microsoft standard USD sample package for the web client included an agent script to resolve a case. So, I turned to that to look at how it worked. The answers turned out to be simple but not what I expected. It involves using their “KPI” control!
My final solution was very closely based on the config found in the Microsoft sample web client package. Except I added a few variations which I felt improved the user experience.
The steps involved are shown below;
- You will need the customizations zip from the sample package.
- Create a KPI hosted control. (If you haven’t got one.)
- Check you have correct UII Action
- Create an action to resolve the case.
- Create an action to re-display the case.
- Create an agent script answer to resolve a case.
Step One – You will need the customizations zip from the sample package
The sample package includes a custom hosted control that is included as a customizations.zip file. If your solution happens to be based on Microsoft’s sample package then you may already have this. If it isn’t you will need the zip file from the sample package. How do you get that? It is actually quite easy … once the Microsoft packagedeployer has been extracted you will find a folder called “CRMWebClientDemoPackage”. And in here you will find USD_AgentDesktop.zip. This is the file you need.
In the customizations area of Unified Service Desk settings create a new customization file. The name doesn’t really matter! But attach the USD_AgentDesktop.zip.
Step Two – Create a KPI hosted control
Now you have the customization zip created you can create the required hosted control. Again if your solution is based on Microsoft’s sample web client package you might be able to skip this step.
Mine looks like this ….
As a side note …. This post is about the ability to resolve cases. But the KPI control can obviously also be used to display KPIs! Shocking revelation I know!! (I might cover the details of how this can be amended in a future post.) But below is show the standard Microsoft Extensions XMl which when added will support showing KPIs. (Another topic for another day!!)
|Unified Service Desk Component Type||USD Hosted Control|
|Application is Global||Selected. (This is global)|
|Display Group||Typically KPIs are shown in the StatusPanel.
But if you only want the case resolution logic you could try “HiddenPanel”!
|Extensions XML||The code needed to display KPIs (Not the subject of this post!!)|
Step Three – Check you have correct UII Action
Next in the navigation of your new hosted control, select UII Actions. You need to check you have an UII Action called “ResolveCase”. If that doesn’t exist simply use the “ADD NEW UII ACTION” to cerate one.
Step Four – Create an action to resolve the case
That is the complicated stuff completed! Now we simply need to create an action that will resolve cases.
My action is shown below;
|Name||Kpi – Resolve Case|
We’ll add another action next that will need to come afterwards. So 10 is important!
The hosted control we just created!
This is assuming your “case” tab is called “Incident”. Obviously adjust this as required.
Step Five – Create an action to re-display the case
In my solution, after resolving the case I wanted the screen to refresh. So that the now read-only resolved case was displayed to the user. I found that a simple refresh action worked but the navigation bar then showed. I didn’t like that so I wanted a cleaner approach. Hence, I used a navigate action. My action is shown below;
|Name||Incident – Navigate (Refresh on Resolve)|
So that it runs after my resolve action!
Assuming your tab for cases is called Incident”
To explain, this will re-display the case. (Which is now resolved.) The second like “HideCommandBar” is because I wanted to supress the “top level” navigation.
Step Six – Create an agent script answer to resolve a case
So finally, I decided to pull these actions together in an agent script answer. You could also have do this in a toolbar button! I already had an agent script for cases. So below I will just show you the agent script answer but you might also need to create an agent script for cases, if you haven’t got one.
My agent script answer is below;
|Name||Could be a anything! But I called mine “Case Agent Script- Resolve Case”|
|Answer Text||Resolve Case|
|Linked Task||This is the agent script for my cases, you will create this from your agent script. Which could have a different name!|
I wanted my answer to be my last one. You could pick any order.
As my hosted control for cases is called “Incident”.
|Enable Condition||“[[Incident.Id]+]”!=”” && “[[Incident.statecode.name]+]”==”Active”
Why did I add this?? Well I didn’t want to enable the answer if the case hadn’t been save. And alo I would only offer the option to resolve if the case was open.
My Change Working
When I click on the agent script to resolve case the case gets resolved. Plus, it re-displayed as the read-only resolved case. And my agent script is only enabled if a saved, active case is open.
And the icing on the cake is that a resolution activity is correctly created. Showing that the case was resolved form within USD.
A Word of Warning!
Buyer beware! The Microsoft sample package works great but it is not supported for production use, meaning if you find any issues with this approach Microsoft will probably not support it. Personally, I am prepared to take the risk! If any issues happen I would need to create a custom approach which would do the same thing. I might do that if I hit a problem …. Which I haven’t yet. Enjoy.