Let’s say there are two teams: Microsoft Team and Third Party Team.
Microsoft Team wanted to create a concept called “Human” which can perform actions like “Drink”, “Shoot” and “Speak”.
So, they created a concept called “Human” and provided abilities like “Drink”, “Shoot” etc. Microsoft Team obviously created the abstract concept called “Human” with all those functionalities, but the “Human” itself does not mean anything unless there is a concrete physical body representing the concept “Human”. The Microsoft Team did this intentionally so that any representation of “Human” can be created by this concept in the future.
Fortunately, Microsoft Team has documented all the abilities and events that the “Human” concept support. They also realized that the “Human” would like flexibility in the “Drink” so they have designed in such a way to accept the “Type of Drink”.
The Third Party team looked at the documentation and noticed the concept “Human” and all those abilities that are supported by the concept “Human”.
So, they created a Human named “John”, who is a concrete physical body that is coming out of a concept called “Human”.
If the Third Party Team wanted to create a new concept called "Spaceship" and provide the desired action "Fly", they are welcome to do so through custom coding.
Now, the Third Party Team noticed that there is an awesome action that now “John” can do, which is “Drink”. So, they implemented the ability for “John” to “Drink” and they also passed a parameter called “Juice” in the process of providing the ability. And they named this ability “John is going to Drink Juice”.
So now, “John” can “Drink” “Juice”.
By the way, “whenever it is time for Breakfast”, Third Party Team can invoke "John is going to Drink Juice".
If the Third Party team wanted, they can create another physical body “Bob” who “Drinks” just “Water”.
Now, if you want to compare it with the USD's moving parts:
"Human" - USD Control Type
"John" - Hosted Control
"Drink" - UII Action
"John is going to Drink Juice" - Action Call
"Juice" - Data Parameter
Point to Note: We cannot directly call “Drink” an action by itself, as the underlying system does not understand whether John will “Drink” or Bob will “Drink”. That is one of the reasons we require “Action Call”. The “Action Call” ties both the Hosted Control and UII Action to provide a meaningful ability, so that "Events" or some other USD components can invoke the "Action Call".
Whenever it is time for Breakfast – USD Event
John is going to Drink Juice - This is the action call invoked when the event occurs.
If you understood this, you have understood some of the basic moving parts of USD.
Now, let’s talk about some real time examples:
Let’s say that you want a “New Case” form to be opened when your agent clicks on a button or when an event occurs in USD:
"CRM Page" - USD Control Type
"Incident" - Hosted Control
"New_CRM_Page" - UII Action
"Create New Case" - Action call to open the New Case CRM Form for the end user to enter data
"incident" - Data Parameter
Here we are using out of the box “New_CRM_Page” UII Action and Hosted Control to show up a New Case form to the agent.
Below is the screenshot of the Hosted Control and Action Call records in CRM for the above example:
In the above screenshot, you can see that the Hosted Control record is not tightly coupled to the “incident” entity in CRM, and this is where the Data Parameter section in the below screenshot comes to the rescue. We mention “incident” as the LogicalName so as to open a “New_CRM_Page” of type “incident”.
Now, let’s say that the agent creates an incident record using USD and when the agent closes the call session, a phonecall record has to automatically get created associating the incident to the phonecall record in CRM.
CRM Global Manager – Hosted Control
CreateEntity – UIIAction
Create Phone Call Record – Action call to create the phone call record in CRM
subject=Call from: [[contact.fullname]+]
Basically, we are using the out of the box “CreateEntity” UIIAction to create the “phonecall” record along with the other attributes mentioned in the data parameter.
One final example (just to make sure if you are still with me on this):
There is another USD Control Type called “Standard Web Application”, which supports an action called “Navigate”. Now that the Third Party Team knows about this, they can create a Hosted Control called “Website” of the USD Control Type “Standard Web Application” and create an Action Call called “Navigate to Website” which will tie in both the UII Action “Navigate” and Hosted Control "Website" and pass preferred “Website URL” as Data Parameter.
Now whenever the Third Party Team desires, they can navigate to the Website URL whenever some event occurs or when the button is clicked in the USD.
Below is the screenshot of the Action call record in USD for the above example:
Below is the screenshot of the implementation in USD:
If you understand the above examples, it will be very evident that these components are loosely tied so that the developers can gain a lot of functionalities just by tying the out of the box Hosted Control, UII Actions and Action Call without writing any custom code. This presents us with the potential to stand up a solution very rapidly that the call center agents can use.
Hopefully this article gives you a better understanding on the Hosted Control, UII Action and Action Call components in USD.