Extending CRM Online in a Modern Business with Azure

Hi everyone,

It has been a while since my last blog post so the yearly eXtremeCRM EMEA week is always a good timing to publish some new content :-)

So for all the people who attended the session I hosted on Tuesday 19/4/2016 in Warsaw Poland, you’ll find the sample solution with source code below as a download. For the slidedeck, you’ll have to reach out onto the eXtremeCRM portal (or drop me an email with your question(s)).

So as a recap a short overview of the integration flow, the Azure building blocks we’ve used and a small word on the Visual Studio projects.

A. Flow

Case creation in Dynamics CRM

Async plugin exposing the plugin context from Dynamics CRM towards Azure Service Bus queue

Azure Webjob that reads the messages from the queues and creates a recod in Azure SQL table

Another Azure Webjob (with a delay build in) that reads the Azure SQL table, updates the record accorindgly and finally updates the CRM case and sends a message to all the websockets clients on the same case

B. Azure building blocks used?

Azure App Service –WebJob

https://azure.microsoft.com/en-us/services/app-service/

https://azure.microsoft.com/nl-nl/documentation/articles/web-sites-create-web-jobs/

Azure Service Bus – Queue

https://azure.microsoft.com/en-us/services/service-bus/

https://azure.microsoft.com/en-us/documentation/articles/service-bus-dotnet-how-to-use-queues/

Azure SQL Storage – Table

https://azure.microsoft.com/en-us/services/sql-database/

https://azure.microsoft.com/en-us/documentation/articles/sql-database-dotnet-how-to-use/

C. Visual Studio Projects

      1. AzureSBQueueToAzureSQL: used in reading messages from the queue and pushing them towards Azure SQL table (other possibilities instead of code? Logic App)
      2. ERPToAzureSQL: the ERP system updates the record in Azure SQL, updates the same record in Dynamics CRM and sends the same message towards the websocket group
      3. Case: contains the Azure aware plugin, async publishing the post-update case creation context onto a specific queue
      4. SignalRChat: http://www.asp.net/signalr/overview/getting-started/tutorial-getting-started-with-signalr 
      5. SignalERPStatus: based on the SignalR chat and the sample project found on CodeProject http://www.codeproject.com/Articles/1023769/Real-time-development-with-SignalR-and-Dynamics-CR

 

The Visual Studio solution and sample code can be downloaded here.

And finally a special thank you for the inspiration and help:

Michal Sobieraj

Michael De Schepper – RealDolmen

Bryan Tuttle – CodeRight Inc.

Share Button

USD training at eXtremeCRM 2015 EMEA

eXtremeCRM 2015 in Madrid was the place to be in April 2015 if you had something to do with Microsoft Dynamics CRM or related. The anniversary edition brought us a lot of “Microsoft-presenter hosted” sessions, in a nutshell: always nice to get the information first hand from people who are part of or closely related to the Dynamics CRM product group.

Anyway, just after the convention I could attended a USD (Unified Service Desk) training hosted by a Microsoft trainer where we got some hands-on insights and experience on the USD product. By the way, USD evolved out of CCF and CCA. If you want to catch up on the version history of CCF and CCA, please have look at this blog article of Simon Hutson.

Besides that, Matt Barbour (http://blogs.msdn.com/b/mbarbour/)  was nearby for some Q&A which gave us eager USD enthusiastics  some clearer view on the what, how en when questions around USD.

Bottom line, the concept behind the client tooling was  already explained in Simon’s blog article.

But what’s new or different? You could say USD is the  next iteration of this tooling breed and it pushes more and more into  configuration and bit less into development, not to forget that the GUI has  been aligned with the CRM 2013 styling.

Configuration,  why?

  • Configuration is (sometimes) easier and can encapsulate  programming, eg. power-user (or empower the user, where did we here that  recently  (Build2015, Ignite,…)?
  • Configuration can be easily personalized or targeted.
  • Configuration is stored in the CRM database via additional CRM entity data, this makes deploying and moving around a lot easier.

To make sense out of this, it’s well documented! Quote  from the Unified Service Desk Developer Overview:

“Creating or developing agent applications by configuring the Unified Service Desk entities in CRM doesn’t require you to write code, which reduces the lead time to develop a highly customized agent application per your organization
requirements. This is the preferred way if you have to primarily deal with customer data available in CRM.”

And Development out  of the picture, not really? Still there when you needed it, for example CTI  integration, also quoted from the USD Developer Overview: “…the computer telephony  integration (CTI) framework of UII enables organizations to build adapters to connect Unified Service Desk with their  existing CTI  infrastructure to support customer communication in agent desktops  over various channels such as chat, email, or telephone…”

The last decade we’ve seen a large push in the software space from  build towards buy, so you would suppose there are some of the shelf  possibilities surrounding CTI integration? Yes there are some, but it’s  limited. Another question surrounding this topic was already exposed and  answered in the Dynamics Community, conclusion: there are some of the shelf possibilities but fairly unknown by the  masses or scattered over the globe.

So, to round up, USD at this point in time remains a client  application which retrieves its configuration from the USD enabled CRM organization  and configuration is key. What’s missing? Well remember Satya  Nadella’s press briefing from March 27 2014? USD isn’t what you would say  to be completely mobile (or cross platform), but the configuration part of it  is, so maybe in USD’s future we see some kind of shift towards a more mobile or  let’s say web based version. I must agree there are some constraints and there  are also some alternative scenarios which would not imply the use of USD as a  client application or web version, but as the Dynamics brand grows and new  applications arise, the simple UI integrations need to come out of the box or as  an alternative the USD can be leveraged by contact center related customers to  provide them the UI integrations and session management they need. I’m happy to  say that with the latest release of USD version  1.2, one of the recent Dynamics acquisitions got its rightful place in USD  as a hosted control, Parature Knowledge management.

Your starting point on the web is the Unified Service Desk developer guide or contact us directly at RealDomen for more details.

Happy “servicing”!

And remember a happy customer is a loyal customer 😉

Share Button

CRM 2013 browser Performance Markers

Hi everyone,

Due to the fact we’ve encountered some page load issues with plain vanilla contact forms, I was woundering how to visualize the newly introduced Performance Markers from the Perfomance Center (aka Performance Analyzer by some) in Chrome.

Why’s that?

CTRL-SHIFT-Q or CTRL-SHFT-Q closes Chrome and there’s no direct way to change or alter this behavour (as far as my knowledge reaches today).

Well, after some debugging I found out that the backdoor combination ALT-SHIFT-Q works on both browsers!

Microsoft Dynamics CRM 2013 Performance Markers

Chrome version: 37.0.2062.124 m

IE version: 10.0.9200.17028 update 10.0.18

Room for improvement? The visualized load is spanned over the width of your browser screen, so screen based comparision is not really usable but you can copy the counters into Excel for example.

So happy “Performance Markers” comparing!

Philip

 

Share Button

Newly added custom workflow activity not showing when adding a new step

Hi,
one of my colleagues was developing new custom workflow activities. After updating the assembly, the new activity didn’t show up in the Workflow designer. I found similar blog posts handling the same issue:

http://social.microsoft.com/Forums/en-US/74f35d99-1ce5-404c-b451-c092cd6c2754/crm-2011-custom-workflow-activity-not-available?forum=crmdevelopment

http://crmdm.blogspot.be/2012/07/deployment-of-custom-workflow-activity.html

http://microxrm.blogspot.be/2013/05/custom-workflow-activity-not-appearing.html

Our conclusions:
-IISReset is the hard way.
-Altering the strong key means meant unregistering the assembly and due to the prior dependencies not feasible.

Other solution?
Update the AssemblyVersion and AssemblyFileVersion.

Capture

Happy coding!
Philip

Share Button

Changing the default entity image on a specific entity in CRM 2013

Hi everyone,
ever had the question to change the default picture of an entity in CRM 2013, eg. Account?

Entity Image Contact Photo

We have some different options as we think about it, supported as unsupported, let’s have a closer look:
Supported ways?
1) Plug-in
2) Batch job
Unsupported?
3) jQuery call in OnLoad
4) On-Premise only: altering the picture on disk would invoke a change for all entities

So knowing our options, let’s focus on a supported way like the plug-in. First attempt would be on altering the entityimage_url in the post-retrieve of account.
A colleague of mine did some attempts and got a first result in using an additional Update of the account record, so this works.

But hey, disk space is sometimes limited so are there any alternatives?
Yes, after debugging a bit the Retrieve message and the account JavaScript I came to the following conclusions:

1) Update the attribute entityimage_url works in post retrieve for a fraction of a second on the form
2) What happened? Seems there’s some built-in mechanism in the CRM proprietary JavaScript which overwrites the inserted URL:
if(!IsNull($v_0))if(!this.$42_1($v_0))$v_0.src=Mscrm.CrmUri.create(“/_imgs/ContactPhoto.png”).toString();else $v_0.src=Mscrm.CrmUri.create($v_0.src).toString();
3) So what if we create a dummy account, upload an image and retrieve the entityimage_url attribute value?
Well I found this value:
/Image/download.aspx?Entity=account&Attribute=entityimage&Id=d4128a86-e0bb-e311-93fe-00155d017d04&Timestamp=635322045569777819
4) When we update the entityimage_url of the BusinessEntity in the Outputparameters of the plug-in, it seems to work!
Important is to add the Timestamp parameter, without it your inserted image gets overwritten again by the default CRM contact photo. Don’t ask me why :)

The content of the Timestamp parameter doesn’t seem to have direct influence:
/Image/download.aspx?Entity=account&Attribute=entityimage&Id=d4128a86-e0bb-e311-93fe-00155d017d04&Timestamp=1
also works…

So a short code snippet:
Account Image code cs plugin

The end-result:

Accounts Images

Have fun!

Share Button

Microsoft Dynamics CRM Natives: sharing insights on Microsoft Dynamics CRM by Philip Verlinden #MSDYNCRM #MSCRM #CRM2013