Sonoma Partners Microsoft CRM and Salesforce Blog

Leading CRM for Leader Dogs

Today's blog post was written by Kayla Silverstein, Marketing Specialist at Sonoma Partners.

Bogged down by an inflexible custom CRM solution (Quilogy), Leader Dogs for the Blind wanted a more efficient way to track operations and client records in Microsoft Dynamics CRM (now Dynamics 365).

Who is Leader Dogs for the Blind?

Leader Dogs for the Blind is a nonprofit organization based in Rochester Hills, Michigan. Founded in 1939, they provide guide dogs to the blind and visually impaired. Through their programs, Leader Dogs helps clients find and work with guide dogs for greater mobility, independence, and quality of life.

Leader Dogs Project Fast Facts:

  • Industry: Nonprofit
  • Workload type: Customer Service
  • # of employees: 65
  • # of users in deployment: 65
  • Platform: Dynamics 365
  • Fun fact: Leader Dogs operates as the only facility in the Western Hemisphere to teach deaf-blind students how to work with a guide dog.


The Challenge:

  • Previously, Leader Dogs used a customer solution called Quilogy to manage operations, client services, puppy breeding, and training. While functional, Quilogy was an old system with limitations in both capability and scalability. For example, the outdated solution was not built to track puppy production schedules or many of the other unique operational components Leader Dogs required.
  • An outside consulting firm developed Leader Dogs’ custom solution several years ago and their relationship with the firm had since dissolved, making any opportunity to further customize or update the system impossible.

The Solution:

  • Replace Quilogy with Dynamics 365 to maintain all department records within the organization.

The Result:

  • Automation in CRM manages daily tasks with the dogs (such as flea checks, baths, etc.). Based on different triggers in the system, CRM creates Task records and assigns them automatically. When dogs are handed off between different teams, Leader Dogs can see which Tasks have and haven’t been completed.
  • The Breeding department uses CRM to trace dogs and their performance over their lifetime. A lot of analysis and science goes into picking the right dogs to breed for key traits that are essential parts of a strong guide dog. With CRM, they’re able to see how the dogs perform both in training and on the job, creating a strong feedback loop.
  • Their portal now meets accessibility standards for use by the visually-impaired.
Topics: CRM Best Practices Microsoft Dynamics 365

Compare Fields Across D365 Orgs to help Debug Solution Import Failures

Today's blog post was written by Matt Dearing, Principal Developer at Sonoma Partners.

When working with a solution it is common to make changes to customizations. Scenarios like an incorrect attribute data type that needs to be recreated are very common, especially early in development. Although it is easy to recreate attributes in a development environment, it can be challenging to import that solution into a target with a previous version of the solution. The import process may fail in the target organization with a generic error message. When this occurs, it is generally related to attributes being recreated. The following is a simple LINQPad script you can use to compare attributes in two different environments. It will print out any differences in casing of schema name or data type which are two of the more common reasons recreated attributes will cause a solution import to fail.

The script itself connects to two different CRM environments: a source where customization changes are made and a target for deploying the updated solution. The script scans the target to get all of the custom entities with a given prefix where the prefix matches that of the publisher for the solution. If the entity is new in source, there is no reason to compare it to target as it will not fail the import.

Next the script loops through the custom entities for the target environment capturing each entities attributes. Schema Name and Data Type are the two most important metadata properties to compare, so those are returned. If an attribute is deleted and recreated and the casing of the Schema Name does not match exactly, the solution import will fail. This is because CRM does a case sensitive comparison of attributes on solution import to determine if any attributes are new and should be created. It will see two attributes with differently cased schema names as two unique attributes, the failure will occur in the SQL database as two columns cannot have the same name. Unfortunately this won't show up in the solution import UI as a helpful error. The second more common failure is that the data type has changed. Maybe the attribute was an integer/whole number and should have been of type money, or it was a picklist and should have been a string. In that case the solution import will also fail when Schema Names match but data type differs.

Next the source environment is queried for its attributes to do the comparison. If the entity no longer exists in the source environment, an exception will be thrown and caught and printed to the screen. This would mean the entire entity no longer exists in the source environment, so there is no comparison that can be made.

Finally the comparisons are done by Schema Name and Type and any discrepancies are printed out to the screen. If the source attribute no longer exists, there is no need to compare.

Knowing the discrepancies in attributes between environments can help tremendously when attempting to figure out why a solution import is failing. Here is the full source code:

Let us know if you need any help or have any questions by commenting below.

New Call-to-action

Topics: Microsoft Dynamics 365

QnA Maker: An Easy Way to Explore Chat Bots

Today's blog post was written by Bryson Engelen and Kevin Yamashita, Sales Engineers at Sonoma Partners.

Today we'd like to show you a nifty tool from Microsoft that we've been using to add some pizzazz to the end of our service demonstrations. There are already a number of nifty tie-ins between Dynamics 365 and Azure, including product recommendations, documentation recommendations, connected field service, and sentiment analysis (via Flow). We find that it's compelling to show the breadth of the Microsoft stack as much as we can, even if that means leaving the safe space of Dynamics 365 sometimes. One of the limitations of showing ancillary Azure functionality is that these services can be clunky to maintain. Well if you're lazy like us, you'll love QnA Maker.

With this service, you can easily provision and train a chat bot to answer FAQ-type queries.

With this tool, you can very quickly load a list of question/answer pairs; we recommend pulling realistic examples from a prospect's own website. QnA Maker actually includes functionality to automatically scrub FAQ pages to generate this content, but in our own experiences our mileage varied depending on the site itself. Regardless, it's quick and easy to show off a client's own knowledge content in a compelling way.

Click on the image to expand.

If you want to embed your bot in a Dynamics portal or to expose your bot via Skype for Business, you'll need to actually put the effort in to provision a service within Azure. However, QnA Maker does expose a web interface to interact with your bot directly from the web. Our prospects often find that this is compelling enough and they can easily visualize how this service could be embedded and surfaced in other ways.

Click on the image to expand.

This web interface has additional elements exposed to help train your bot, and talking about this underpinning functionality during the demonstration is actually useful for prospects so that they can better understand how this technology actually operates.

Click on the image to expand.

You'll certainly want to show this whenever Live Assist or Dynamics Portals are in play, as chat bots could represent an initial line of defense for portal users before being routed to a live chat agent. So we invite you to give this tool a try if you haven't already. It's quick to set up, easy to demonstrate, and offers another way to hook people on the power of Azure. Clearly we love showing Azure as it relates to Dynamics. If you have any interesting Azure-related tips or tricks to share, we'd love to hear from you to keep the conversation going.

Topics: Microsoft Dynamics 365

Hey Cortana, Say Hello to CRM

Today's blog post was written by Angel Shishkov, Principal Developer at Sonoma Partners.

Cortana integration for CRM has been available for preview since the 2016 Update. Here are some commands you can ask it to do. This feature was geared towards mobile phones, but it also works on a Windows PC or laptop.

As the Cortana integration becomes more developed and users explore its possibilities, we expect to see some requests for custom Cortana integrations with CRM as well.

In this post, I will give a brief, high-level introduction to the steps necessary to set up a custom integration between Cortana and CRM and the possibilities it offers us. In this example, there will be no user authentication, and we will hardcode our CRM connection string. I will assume you have an Azure subscription, Visual Studio 2015+, and some knowledge of C#.


Here are the steps we will go through:

  1. Environment Setup
  2. Implementation
  3. Register the Bot
  4. Test the Bot
  5. Deploy the Bot to Azure
  6. Talk to Cortana

Environment Setup

First, let’s set up our development environment. Visual Studio is free, and Azure has a free trial.

  1. You should have access to Visual Studio IDE, as well as an Azure subscription to deploy the bot.

  2. Download and install the Azure SDK for Visual Studio here.

  3. Download and install Cortana Skill template here.


We will implement a Cortana bot in C# .NET and connect to CRM through the CRM SDK. Our bot will be very simple – it will only respond to a couple of phrases and will only perform one query into CRM. For the scenario, I have used an entity from our internal Sonoma CRM system. We use CRM to track our work in records called Items. The items are assigned to people and have Due Dates. The bot we are going to build will respond to two questions regarding Items in CRM: “How many items are due this week?” and “How many items are due next week?”

1. Create VS project with the “Bot Application – Cortana Skill” template we installed earlier. I called mine, HelloCRM.


2. Restore NuGet packages and run a build to make sure everything is good. The template creates a sample bot with a controller and dialog.

3. Add CRM SDK NuGet packages: Microsoft.CrmSdk.CoreAssemblies and Microsoft.CrmSdk.XrmTooling.CoreAssembly. These are necessary so we can connect our bot to CRM.


 4. Open RootDialog.cs and replace it with the code below. The code does the following:

  1. RootDialog is an implementation of a dialog between Cortana and our bot.

  2. The StartAsync method is called one when a new dialog starts.

  3. The MessageReceivedAsync method is called each time a message is received from Cortana. That is, whenever the user speaks a phrase.

  4. The spoken message passes in with the result parameter, as a text string.

  5. First, we create a connection to CRM. We are using the Xrm.Tooling.Connector library, which makes it as easy as passing a connection string to a constructor. You will need to modify this connection string to point to your instance of CRM, with your credentials.

  6. Next, we extract the spoken message into a text string.

  7. Then, we use Regex to match the spoken message to a question our bot can handle. Note that the text string is a representation of what Cortana thinks the user said, so we have built in some fuzzy matching of like-sounding terms. For example, the words “week” and “weak” sound the same, so we’re matching on both.

  8. We check for two questions; “how many items this week?” and “how many items next week?” They will both trigger the same query in CRM, but the filter will be different based on which week we are looking at.

  9. Within each match, we first call the CountCRMItemsDue method. This does a simple FetchXML and returns a count of the results. Then, we send back a response using the SayAsync method. This method takes a parameter for the text to display, the text to speak and whether to listen for further questions, or end the conversation. We are passing the AcceptingInput hint, so Cortana will expect further questions in the conversations, after speaking the answer.

5. Rebuild again to make sure everything is good.

Register the Bot

We haven’t deployed the bot to Azure yet, but we can already register it on our Microsoft account. This is necessary if we want to test It locally first. We are going to register a new bot and connect it to the Cortana channel, so it can receive messages from Cortana.

1. Log in to with your Microsoft account.

2. Go to My Bots and click Register.

3. Type in your bot display name, handle and description.

4. Click on Generate App ID and password and generate both. Copy and save both, we will need them later!


5. Agree to the terms at the bottom and click Register.

6. You should now be on the Hello CRM bot page, in the Channels tab. Under “Add a channel”, click the Cortana image.


7. Keep the defaults and click Save

Test the Bot

We can test our bot locally, before we deploy it to Azure. To do this, we need to complete the bot registration above and install the Bot Framework Emulator.

1. Install the Bot Framework Emulator here.

2. In Visual Studio, open the Web.config file for your bot and near the top, fill in the App ID and password we copied earlier.


3. Run the bot in Visual Studio with the green Run button. It should be set to open in your default browser.


4. Take note of the URL and port number in the address bar of the browser that popped up. Now, start the Bot Framework Emulator.

5. At the top, click the blue bar, update the URL and port to match what is in your browser and enter the App ID and password you configured in your Web.config.


6. If everything is good, on the bottom right the Log should show a POST 200 message.


7. Now you can use the textbox on the bottom to send test messages to your bot, or click the microphone icon to speak to it. It will reply by text message, as well as speech (although it is not Cortana speaking).

Deploy the Bot to Azure

Now that we’ve tested the bot, it is ready to deploy to the cloud. We will be deploying it as an Azure App Service.

  1. Make sure the App ID and password have been added to your Web.config file.

  2. If you have a WebApp already set up in Azure, you can publish directly into it. Otherwise you can create a new WebApp as part of the publish process:

    1. In Visual Studio, right-click the project and select Publish.

    2. Select “Microsoft Azure App Service” as the publish target.

    3. On the App Service page, you can either select an existing WebApp to deploy into, or click New to create a new one.

    4. On the Connection page, keep the defaults, but copy the Destination URL; we will need it later.

    5. Click Next through the rest of the dialog and click Publish at the end. Visual Studio will deploy the bot to the WebApp location and open a browser window to it.

  3. Log in to with your Microsoft account.

  4. Go to My Bots, open the “Hello CRM” bot and click Settings on the top right.

  5. In the Configuration section, fill in the “Messaging endpoint” with the URL of your bot copied earlier, with /api/messages appended to the end.


  6. Click Save Changes at the bottom. Now the bot is deployed to the Azure cloud, instead of the local machine, and its registration has been updated with the URL, so Cortana knows where to find it.

  7. By default, the bot is only registered on your Microsoft account, and will only be available to Cortana running on your account. It is possible to deploy it to groups of users, or to make it fully public. On the bot page under My Bots, you can click on the “Manage in Cortana dashboard" link next to the Cortana channel to explore these options.

Talk to Cortana

Now we’re all set to have Cortana use our bot. To invoke custom bots, you need to use the phrase “Hey Cortana, ask <botname> <question>”.

  1. You can activate Cortana by saying “Hey Cortana” (if you have that setting turned on), or clicking the Cortana circle icon in the taskbar.

  2. In our case, we can say “Hey Cortana, ask Hello CRM how many items are due next week?”

  3. The first time Cortana connects to the custom bot, it will ask your permission to send your request to the bot.

  4. Click Yes, and you can now converse with the bot.


  5. Yay, no items!

I am excited to see the interesting use cases our customers will come up with for custom Cortana integrations. While controlling a system with your voice might seem awkward at first, it will become easier and more natural as voice assistants become more popular in homes.

I hope this was useful, thanks for reading!

Topics: Microsoft Dynamics 365

Field Notes: Date/Time Issue with Business Rules and Dynamics Mobile

Today's blog post was written by Aaron Robinson, Solutions Architect at Sonoma Partners.

Over the years Microsoft has made tremendous improvements to its mobility story for Dynamics CRM, with modern apps available across all platforms today. However, we still don’t have true parity with what’s available on the desktop, and processing of JavaScript is one big area where the mobile app shows its limitations. While one can make the argument that parity is probably not the strategy, I would argue that there should at least be consistency. We saw a JavaScript issue in the previous version when referencing the Status Reason and Status fields which were resolved by the latest upgrade. Here is a case in point of a recently discovered issue which occurred after a D365 upgrade of the Dynamics CRM mobile app as tested on iOS.

In this example, we have a custom entity called Visits, which allow a user to create a visit record (similar to an appointment), and set a scheduled date and time for the visit. The form also contains a start and end time for the visit, to be completed after the visit occurs. Here we have also setup some business rules to enforce some logic on the date and time that can be entered for the actual visit start and end time as such:

  • Rule 1: If the schedule date and visit start both contains data, and the scheduled date is greater than the visit start, show an error message on the visit start field so the user can correct the time. Essentially, we are trying to enforce that a visit start time should always be equal or greater than the scheduled date and time.

  • Rule 2: If the schedule date, visit start, and visit end all contain data, and the visit start is greater than the visit end, show an error message on the visit end field so the user can correct the time. Same premise as above, but now between the visit start and end time. Logically your end time should not come before your start time.

Makes sense, right? So, let’s take a look at using this logic in both the web and mobile app.

In the screen shot below, I can move the visit start time before and after the schedule date, and the error message shows appropriately. The same happens with the visit end time, regardless of the time I use.


In the mobile app, this appears to be the case as well.  I move the date/time back and forth, and everything appears kosher.

However, something odd happens around the noon hour for the visit end time.  In this example, I set the start time to 11:00am, and the end time to 11:59am. Supposing for a moment that I entered the visit end incorrectly, or I was setting it when the system clock time was actually 11:59am, I want to change the end time to 12:00pm.  When I click into the field to edit the time and change the hour to 12, the error message is flagged on the visit end field as being less than the visit start.


Again, technically this is correct, because it’s now validating the time as 12:59 AM, as the rule fired right when I changed the hour. The problem here is that even if I change the AM to PM, the error message remains because the rule doesn’t appear to revalidate again. This was fairly easy to remedy as you could click out of the field and back in, or hit clear field and re-enter the time from scratch, but adds a couple of extra taps and it’s not exactly obvious to the average user.

We went back to the web app to test this out, and we do not experience the same behavior. So how did we resolve it? Simple re-creation of the business rule appears to address the problem. Given this was an upgrade, we figure we could rule out any upgrade related issues with JavaScript code by removing the rule and creating a new one, and it worked! We can now toggle the hour/minute or the AM/PM while the edit control is open and the rule will evaluate each time.

Topics: Microsoft Dynamics 365

Top 3 Takeaways from D365 July 2017 Executive Update – Day 1

Today's blog post was written by Aaron Robinson, Solutions Architect at Sonoma Partners.

It’s that time of year again – time for hitting the beach, firing up the grill, and listening to 9 hours of content from Microsoft on what’s coming to Microsoft Dynamics CRM in the upcoming release. Truth be told, I didn’t have the patience to watch it live, but thankfully Microsoft recorded all the sessions for you (or me) to watch at leisure. And since we are having a rain storm this very moment, what a perfect time to watch and share with you my top 3 takeaways from day one of the executive briefing.

Before we get going, I want to emphasize that the content discussed during these demos are for pre-release features. While it’s great to get excited about what they are presenting, its best to keep a level head about it. Features are likely to change while in development or testing, or shifted to a later time frame due to release schedules. So, don’t base your purchasing decisions on the content you see here, but rather what is available at the time you are buying. You’ve been warned.

#1 – A True Unified Client

If you are a current user of Dynamics CRM – both the web and mobile app, this is going to make a lot of sense to you. Otherwise just take our word for it. This is a big deal! The web app offers one experience – which saw its last major update in 2013, and was coined the modern experience. It was a dramatic shift from previous versions, but generally accepted as a good change. What was missing in 2013 was a consistent mobile experience across platforms, but that was added in the last 24 months. Today what we have is a full web experience, and a different (but similar across device platforms) mobile experience.

Aaronrob 1_800

Microsoft’s new direction is to unify the experience across all modes and devices regardless of how the user interacts with D365. The inference I’m drawing here is that this isn’t the proverbial lipstick on a pig, or reskinning of the interface to simply “look” similar.  A quick side note: In the slide above, I thought it was very interesting to pick out that all the devices represented are form factors for Apple devices. There was a time where that was very taboo, but not at Satya’s Microsoft.

Microsoft is reviewing the way all controls in the application are written, consolidating controls where there may be multiple ways of viewing the same data, so that a single control can be used.  There is also a significant push to make sure the interface meets accessibility standards from Microsoft, to ensure that the product is available to everyone.

Aaronrob 2_600

A great example they used was the concept of grids. They are consolidating the different types of grids (search, sub, associated, even web and mobile) into a single grid control that can adapt to all of these modes.  This allows the system admin to use a single control and configure once across the interfaces, and the control will intelligently handle the presentation and interaction of data, something the presenter refers to as reflow. The benefits they are billing here is faster development, single deployment, and interface consistency. While they didn’t show this live, the screenshots provided showed a visually pleasing interface, addressing some of the most common issues like uniformity of font, elimination of extra white space, and better text wrapping (hallelujah!). I really like the subtle shading of headers both on the record form and the individual sections, as well as the use of borders around sections. It gives a sense of order to the application, something that was severely missing in the current styling of the interface. For the most part I think everyone will really welcome the UI improvements across the application.

Aaronrob 3_700

#2 – Seriously Seamless Offline

As a partner that has a mobility practice and understands what it takes to build a full offline client, take my word for it that offline capability is critically important to a mobile deployment.  In fact, for the custom apps we build for our clients, we strongly recommend and convey as a best practice the need for offline in a mobile client.  Our clients use cases range from airports to hospitals to large warehouses, and from urban areas to very rural communities.  You can’t always count on a connection, even in the US where we generally have good cellular coverage.

The Dynamics mobile app recently had been very limited for offline – both for read and create operations. What is coming is a significant overhaul to offline mode, something dubbed as the “seamless sync” client. The most significant part of this functionality is the addition of an Azure middleware component which orchestrates the sync process for the client and the core application. Since the work here of dealing with conflict resolution and incremental sync is pushed to the cloud, it should provide for a much better user experience in terms of a lighter weight and better performing client.  Additionally, the promise of a unified experience carries across to the offline experience. Expect the user interface to be identical in form and functional regardless of connectivity, aside from a status indicator for the user as to which mode they are in.  Also, the existing app should upgrade seamlessly to the new client when available.

Aaronrob 4_500

Feature-wise they are covering many of the bases related to offline access, including background sync, data download scope based on profile, conflict management, simplified setup, and online provisioning/deprovisioning.  One important item to note about the new mobile offline framework is we are hearing that this will only be available in production level instances only.  You will not be able to setup offline sync with a developer instance because of the Azure resource component.  Keep this in mind when determining your supporting environments for development, testing, and production, as you may need to license a production level instance of Dynamics 365 for development or user acceptance testing scenarios.

#3 – Putting the Dash in Dashboards

I know, that heading was a really bad pun.  But the time savings improvements to be introduced for dashboards are the complete opposite of bad.  In fact, they are pretty great. Dashboards are probably the most universally used reporting aspect of D365, and have now been around since the 2011 product version. There has been some minimal improvement, such as making dashboard security profile aware.  With this release, we will have some major enhancements which have been needed for quite a while.

The first major improvement, while not necessarily a dashboard improvement in itself, is the addition of more types of charts.  While charts have long supported editing the XML to change the look and interactions of the chart far beyond what the GUI allows you to set, these new chart types are a welcome change. Some of the chart types appear to come from the Interactive Service Hub (ISH) which was previous available in D365.

Aaronrob 5_600

The second major improvement, and arguably where current and future D365 customers will gain the most benefits, is also a borrowed concept from ISH.  This was referred to in a couple of different ways on the call such as a “bonded” or “filtered” dashboards.  The concept here is that in the definition of a dashboard, you can define global criteria which will allow you to filter all of the components on the dashboard using that filter criteria.  The potential I’m drawing here is best represented in a scenario. A manager can have a single dashboard with multiple components, and be able to select a user that reports to him/her and have the individual components on the dashboard filter down to that selected user.  Currently that same manager would have to create individual dashboards with personal views, which for six direct reports means creating 6 copies of the views, charts, and dashboard.  The new model will allow the manager to have a single dashboard for all six reports.  For organizations with hundreds or even thousands of users, this is a major savings in time and effort to manage.

Bonus: Multi-select option sets (picklists)

I’m not sure I need to really explain this one, but Dynamics admins and users around the world will rejoice at the addition of this feature.  On the Salesforce side, this has long be available, and I can’t tell you the man hours that have been spent over the years on creating solutions to emulate the multi-select option set.  It will be interesting to see Microsoft’s approach and the affect it have to related features like the quick find view and advanced find.  Regardless its nice to see this feature finally making its way into product development and out for public release.

There were other topics covered on the call as well, such as the significant updates to ISH, enhanced email editing, field service enhancements for scheduling, service improvements for chat and bot integration, social engagement and social selling. You can enjoy all of the day one CRM goodness by watching the full video.  Time to get a little more summer fun in before the full release! Cheers!

Topics: Microsoft Dynamics 365

Sonoma Partners Achieves the 2017/2018 Inner Circle for Microsoft Dynamics

For the ninth consecutive year, Sonoma Partners is proud to be designated as a Microsoft Dynamics Inner Circle partner.

Sonoma Partners has once again achieved the prestigious 2017/2018 Inner Circle for Microsoft Dynamics. Membership in this elite group is based on sales achievements that rank Sonoma Partners in the top echelon of the Microsoft global network of partners. Inner Circle members have performed to a high standard of excellence by delivering valuable solutions that help organizations achieve increased success.

Au 1

2017/2018 Inner Circle members are invited to the Inner Circle Summit, taking place in fall 2017 where they will have a unique opportunity to share strategy and network with Microsoft senior leaders and fellow partners.

This recognition of Inner Circle for Microsoft Dynamics came during Microsoft Inspire (formerly Microsoft WPC), the annual premier partner event, which took place July 9-13, 2017 in Washington, D.C.. Microsoft Inspire provides the Microsoft partner community with the opportunity to learn about the company’s road map for the upcoming year, establish connections, share best practices, experience the latest product innovations and learn new skills.

“Each year we recognize Microsoft Dynamics partners from around the world for delivering innovation and driving unsurpassed customer success,” said Ron Huddleston, CVP, One Commercial Partner. “Our Inner Circle members are chosen based on their capabilities as an organization, whether that’s creating IP, developing solutions, or having an industry leading focus on digital transformation. Microsoft is honored to recognize Sonoma Partners for their achievements this past year, their dedication to their customers, and their innovation with Microsoft technologies.”

Topics: Microsoft Dynamics 365

What's the Marketing Buzz? Tell me what's a-happening.

Today's blog post was written by Jeff Meister, Principal Consultant at Sonoma Partners.

The D365 community has been eagerly discussing the new marketing solution to be offered with the upcoming July 2017 Update for Dynamics 365. This update is being coined as the 'largest ever,' and we at Sonoma Partners couldn't be more excited.

Of the new features and apps, I am personally most excited about the Dynamics 365 for Marketing, Business Edition solution. Since the solution hasn't been released for Preview yet, we still have quite a few questions, but I wanted to take some time to talk about my understanding, and remind you that all of this is under ‘safe harbor’ until the app is officially released.

The functionality expected in the first release is impressive, and is currently expected to include:

  • Email Marketing
    • Drag and drop editor
    • Inbox Preview
    • Insights and Email tracking
    • Visualization reporting
  • Event Management
    • Registration, Sponsorship, Session and track, Attendance tracking
    • Venue management
    • Webinars with ON24 integration
    • Event portal
  • Landing Pages
    • Drag and drop editor
    • Ready to use forms and templates
    • Behavior tracking
    • Subscription center tracking
  • Lead Management
    • Multi-channel mapping of customer journeys through a drag and drop editor
    • Lead nurturing
    • Lead qualification
    • Lead scoring and prioritization
  • LinkedIn Lead Gen connector
    • Out of the box integration with Leads created via LinkedIn Lead Gen Forms
  • Advanced Reporting and Analytics

Also note, the app is built natively within D365, meaning no connector or integration with 3rd party platforms. The setup and configuration of the new app is supposed to happen with simplicity and ease.

While the details above are great, there are still some unknowns that are worth mentioning:

  • Cost
  • Release date
  • How D365 for Marketing differs from the Adobe Marketing Cloud offering?
    • What we would really love to see is feature comparison across the two solutions so we can understand where D365 for Marketing stops and Adobe Marketing Cloud starts.
    • I look at this both from a features/functionality perspective, as well as a performance and send volume perspective.

Some key questions are still outstanding, but I expect to hear more on these topics from Microsoft in the near term. I plan to have a follow-up post in the next few weeks with clarifications and additional details around the above topics.

All-in-all, we are extremely excited about the new offering Microsoft is putting together. The level of investment in a product like this shows Microsoft is truly working to make D365 a best-in-breed solution.

Topics: Microsoft Dynamics 365

Making Your Entities Pop: How to Efficiently Create and Maintain Entity Icons

Today's blog post was written by Mike Dearing, Principal Developer at Sonoma Partners.

Before recently, I had never put much thought into the image choice for a custom entity. As long as the end result of a long day of customizations wasn’t an ode to cog wheels, I figured things were good enough. I’d pop open a local fileshare, find an image that somewhat related to what my entity represented, associate the web resource, and call it a day. Although this wasn’t necessarily a bad practice, as long as I stayed fairly consistent with my own changes, once others would start doing their own customizations noticeable differences started to arise. It could be something as simple as the padding around the image being a couple of pixels different or something as drastic as an image that didn’t look like a CRM icon at all.

I knew that if there was any chance to rectify this, I had to answer two questions:

  1. What constitutes an acceptable entity icon?
  2. What is an efficient method to find or create these icons?

What constitutes an acceptable entity icon?

To answer this question, I looked to Dynamics. At the end of the day, if our icons look as close as possible to native Dynamics entity icons, we’ll be in good shape. Dynamics requires you to specify 2 entity icons, one that is 16x16, and one that is 32x32.


  • Used in several places throughout the system, such as lookups and grids
  • Some are still colored, but mainly gray
  • No padding
  • Transparent background


  • Used in the sitemap
  • White
  • ~3 pixels of padding
  • Transparent background

What is an efficient method to find or create these icons?

Now that we’ve established what is acceptable, we need to determine how to easily enforce these standards. Several coworkers had been using SyncFusion Metro Studio, a free icon manager (both to use, and to distribute the resulting icons) for their icon needs, so I decided to look into it further. The tool itself is straight forward: search for an icon by name, or sift through categories. As an added bonus, the images are also tagged by similar words or concepts, so searching for ‘person’ or ‘people’ has a chance to pull up the same image.

Everything noted so far isn’t all that different from just grabbing your image out of a local fileshare. However, Metro Studio comes with the nifty ability to drag icons into a grouping called ‘projects’. In my case, I went ahead and made a 16 project, and a 32 project. Each time I found a suitable image, I’d drag it once into the 16 project, and once into the 32 project.

Mike dearing 1_800

Within the 16 project, I’ve sized each of my images to 16x16 pixels, set the padding to 0 pixels, set the background to transparent, and grayscaled them to the same value. I chose #FF666666, though most gray variants look decent for these images.

Mike dearing 2_800

Within the 32 project, I’ve sized each of my images to 32x32 pixels, set the padding to 3 pixels, set the background to transparent, and left the images white.

Mike dearing 3_800

Once I’ve finished selecting my images, I can choose the export option from each project, and mass export all to an icons folder which can be source controlled (the method is up to you here – we use Git, but any repository or fileshare will do) along with the Metro Studio project files, and brought up Dynamics via a web resource uploader of your choosing.

You are now able to maintain consistent styling throughout your icons and can quickly react the next time Dynamics has an icon style change by being able to mass update, export, and reupload your entire icon library within minutes.

Topics: Microsoft Dynamics 365

Power BI Accelerator for Dynamics 365 Update

Today's blog post was written by Keith Mescha, Principal Architect at Sonoma Partners.

In case you missed it, back in June we release a tool for helping you with using your Dynamics data in Power BI. Please read the original blog post for more details or watch our video overview on our YouTube Channel. I also covered this topic on the CRM Audio podcast.

The community response to this tool was great, and we received some feedback that we have incorporated into a fresh build. V1.1.7 was released and our download page has been updated with this version that addresses these key areas:

  • Datetimes will actually be of the datetime type in Power BI (you don’t need to do any conversion, we do that for you).
  • If the query you run has no data, an empty table will be generated with the correct column headings. Previously an error saying that “Column1 does not exist” was popping up.
  • There was an unreported error that sometimes the URL being generated was incorrect. For example, /actioncard instead of /actioncards.
  • The entity list was sometimes not in Alpha order. It now is sorted correctly
  • Removed non-user entities from the list that are not available through advanced find (e.g. actioncard). This should only remove some system entities that normal users don’t need access to anyhow.

We have made this Dynamics Managed Solution available on our website for you to try out.

We are happy to assist in your BI projects and have a team of data professionals ready to assist you as you extend your Dynamics system to other O365 offerings like Power BI.

Topics: Analytics Microsoft Dynamics 365