Sonoma Partners Microsoft CRM and Salesforce Blog

Power BI Accelerator for XRM Toolbox

Today's blog post and tool were developed and written by Keith Mescha, Principal Architect at Sonoma Partners.

The Dynamics CRM community asked, so we are delivering.

Power BI Accelerator for the XRM Toolbox is now available for download from our website.

If you are implementing or supporting a Dynamics CRM implementation and don’t know about XRM Toolbox then push that rock off you and go read this first.

Powerbi xrm1

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 You Tube Channel. Additionally, I was recently asked to speak about this on the CRM Audio podcast. The community response to this original tool was great and we received some great feedback which we have incorporated into the current build (v1.1.8).

Many folks, including a couple we ran into at the CRMUG Summit last month have asked us to build a version for XRM Toolbox. One huge advantage of this is that you don’t have to be a CRM admin in an org to generate Power BI queries. Seeing that our original implementation was solution driven you had to have access to the Setup portion of Dynamics.

Now with this new XRM Toolbox Plugin you can use that framework to connect to any org you have access to and generate the Power BI queries you need without having admin access to the org. You also don’t need to install anything into your org to utilize this version as you do with the managed solution version.

All the prior fixes in the managed solution version are included in this 1.0 release. As will all first releases there are some known issues but we wanted to get it out so you can start to benefit immediately. Happy to take any feedback via comments to this post and we will do what we can to continue to enhance the plugin over time and release new versions.

The plugin can be downloaded on our website for you to try out. We hope to get this into the Plugin Store soon but for now it’s a manual install with 2 easy steps.

  1. Download/Run XrmToolbox on your machine if you haven’t already to generate the plugins folder.
  2. Place the DLL in %appdata%\MscrmTools\XrmToolBox\Plugins.
    1. %appdata% is C:\Users\<username>\AppData\Roaming\ if it’s for some reason unbound on your machine.

Once installed you can connect to your org just like any other XRM Toolbox plugin. Upon connection, you can press the “Retrieve Entities” button. From there the interface is very similar to what is spelled out in the original blog post.

Generate a query in 3 easy steps

  • Pick an entity
  • Choose a view
  • Click Generate

Powerbi xrm2

After you click Generate you are presented with a screen that allows you to copy the queries into Power BI Desktop Directly. If you used the previous solution you will notice we cleaned up the query generated in this version so it’s bit easier to read and debug.

Powerbi xrm3

From here normal Power BI modeling best practices kick and you should have some reports and dashboards up and rolling in no time.

Please be aware of a few small known issues we have on our list to address in the near future.

  1. The user is required to hit Retrieve Entities once they load the tool and connect to an Org.
  2. There are some performance issues with drawing the attribute checkboxes where the page freezes for larger entities with many attributes.
  3. Personal/System Views are in the same drop down and not split out so it’s not apparent they are all there.

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

Columbia Distributing Taps into More Effective Sales Management and Operations with CRM

Today's customer success story and interview were completed by Kayla Silverstein, Marketing Specialist at Sonoma Partners.

Based in Portland, Oregon, Columbia Distributing serves a customer base of retailers and restauranteurs throughout the Pacific Northwest. Well-known for offering a diverse portfolio of both alcoholic and non-alcoholic beverages, they are one of the country’s largest malt beverage distributors and employ approximately 3,100 people.

Columbia Distributing has 300 sales people who are out in the field for a majority of the day. A large part of their work involves completing onsite surveys to assess how the stores and bars display their products. Columbia initially hired a different partner to integrate Dynamics 365 with a custom iOS mobile application. They found this previous partner to be unresponsive and unable to fix their many existing bugs within the application. The leadership team decided to improve the app and invest in a new partnership with Sonoma Partners to successfully meet the following needs:

  • They needed a data tracking tool to effectively share valuable information, such as consumption rates and in-store marketing efforts with their suppliers. Their previous tool was unstable and made it difficult to extract data, sometimes requiring weeks of work.
  • They needed a standardized process to conduct on-site surveys. The team responsible for visiting distribution sites found tracking quality control difficult to evaluate.

Columbia Distributing wanted to equip their sales team with a tool to help them perform their jobs more effectively.

We sat down with Project Manager Alyssa Wood to learn more about the project, the importance of tracking customer data in Dynamics 365, and the new and improved mobile application at Columbia Distributing:

Why is CRM important to Columbia Distributing?

Alyssa: CRM is the only way to truly analyze our data to understand what is and isn’t working for us. We have certain methods of tracking our products and supplier relationships, and CRM allows us to do so with a complete 360-view, recording and analyzing our sales process. We can’t be everywhere at once – with so many field sellers collecting data, we have to have a tool that presents all of this information in one place. Making an investment into CRM was an obvious move for us as it gives us the ability to deliver consistent, exceptional products to our customers while analyzing how we can be better.

How have your data efforts improved with the deployment of the new application and its integration with CRM?

Alyssa: We’ve streamlined our data collection process. Before, each branch collected data differently. We would get data from one branch in one form, but receive a completely different subset of data from another form. We wanted to make sure everyone used the same survey and delivered data in the same method. This effort also improves the quality of our data. Our sellers report in real-time using the mobile application. This means they don’t have to wait until they get back to the office, eliminating the risk that they might forget to log something.

Columbia-sonoma (002)

Before, taking these onsite surveys was an incredibly manual process. The reps had no product information at their fingertips. With standardized screens and preprogrammed options to choose from, the reps can differentiate products based on what they’re seeing on tap. With the data collection process controlled and consistent, we can see how we’re performing as an entire company rather than just on a granular, rep vs. rep scale.

How does that help Columbia Distributing?

Alyssa: We can now extract and compile the data and truly compare apples to apples to understand our analytics and performance in the field as a company. All of this helps our analytics team to understand what’s going on in the field, to help forecast sales more accurately, and so forth.

How does this impact management?

Alyssa: A single, easy-to-read dashboard helps management better oversee and direct our sales teams. Our sales reps are held accountable for the information they’re collecting. One dashboard shows the number of surveys per site completed by a rep. If this percentage is low, we can have a conversation about it with the seller. This visibility didn’t exist before and there was no way to hold our reps accountable.

What problems have you been able to solve with a reinvestment in CRM and the enhanced mobile application?

Alyssa: We now have a platform we can build on. In the future, we’ll have the ability to provide more granular surveys to collect more data specific to where it is collected. Now that we have the groundwork built with this application and the connection to CRM, we can start optimizing and improving the application.

How are you using the data you’re collecting?

Alyssa: Not only does CRM help us track the performance of our sales reps, but we’re now able to see trends and opportunities as a company at a higher level. We look forward to being able to leverage this tool in the future – once we’ve collected a years-worth of information, for example – to take a clear snapshot of how things have improved pre-/post- project. But I can say, that the sheer amount of data we have to analyze is so much greater. We’re optimistic we’ll have some very valuable insights in the months ahead.

What efforts did you use to boost user adoption of the new application?

Alyssa: We’ve learned the value in having leadership drive a project like this. Reporting is part of the job. If leadership positions it this way, and says the reps have to do this as part of their jobs, it’s powerful. The dashboards help our adoption levels too.

What was the hardest decision you had to make during the implementation process?

Alyssa: The hardest decision during this process was knowing when to go live. There’s only so much we can test on our own and plan for, but ultimately, pushing it live and giving the sales reps access gave us far more to go off in terms of improving the system than we could have without going live. Our business has adapted well, and we have feedback loops in place to make sure we’re keeping track of what we can improve in the future.

How does CRM help Columbia Distributing better compete in your industry?

Alyssa: It’s a competitive business; there’s only so much grocery store shelf space or tap handles in a bar. To keep up, you have to be strategic in how you’re presenting your product to your consumers. We need to constantly evaluate our work and be positioned to collect data, analyze it, and act on those insights. CRM allows us to do this.

What was it like working with Sonoma Partners?

Alyssa: We’ve really enjoyed working with Sonoma Partners. I found the team incredibly knowledgeable; they clearly know their stuff when it comes to CRM. Whenever questions would come up or there were problems we weren’t sure how to tackle; Sonoma was there to answer them all. It felt like having a translator. I’m rather new to CRM and we have a lot of non-technical sellers who didn’t understand the system initially. Sonoma bridged this gap effortlessly. In working with our previous partner, we sometimes felt like we were speaking two different languages. I never felt that way working with Sonoma Partners because of how well they got to know our business.

Columbia.sonoma (002)

What interested you in working with Sonoma Partners?

Alyssa: During one of our initial conversations with Sonoma Partners, they showed us the Ranger App they built for New Belgium Brewery. Immediately I thought: that’s it! That’s what our sellers need. In the demo, I saw how the app changed throughout the project with New Belgium, and seeing this phased approach made me even more confident that this partnership would be a good fit. Sonoma Partners knows the food and beverage industry and CRM. We made a great decision in switching partners.

What do you think the future is for Columbia Distributing, mobile applications, and CRM?

Alyssa: Now that we can see CRM and the mobile application used the way it’s supposed to be, I’m optimistic that we have only just begun our CRM program as an organization. Even in just a few months of having the application in the field, I’ve already heard from the sales reps how they want the app improved and added to. Management has their own list of asks. I think we’ll continue to evolve and build upon our platform to make sure that we’re continuing to provide value and quality products to our suppliers.

CRM puts us in a strategic mindset. We can already see what we’ve learned from the data we’ve collected thus far. Just imagine what else we could be tracking at our organization and what we could learn from that data, etc. It’s pushed us to be more strategic and given us the tool to do so.

 

Our thanks to Alyssa for taking the time to sit down with us to discuss their project with us.

Are you interested in learning about how a mobile application could help your sellers in the field? Contact us.

Topics: CRM for Manufacturing Microsoft Dynamics 365

D365 v9 Unified Interface Icons

If you’ve had a chance to play around with the new release of Dynamics 365 and dove into the new Unified Interface, you might’ve noticed that custom icons (whether entity or ribbon buttons) are all defaulted to a puzzle piece. This is due to a new Vector image format (SVG) that D365 supports in the latest release. The standard web interface will use the old image formats and Unified Interface will only use the SVG format so you will need to provide icons in both image formats if you plan on using the Unified Interface.

So how do we update our icons? First, create a web resource like normal and you will notice a new Type of Vector format (SVG). Select this and upload your SVG icon.

image

If you’re wondering how to create an SVG icon, I highly recommend SyncFusion’s Metro Studio app. There is a lot of great icons and you can easily edit them to how D365 expects and export them to many different formats.

In Metro Studio, find an icon you like and set the Height and Width to 32px with a padding of 0px. Select the transparent Background Shape (checkered box on the far right). For entity icons you will want to have an Icon Color of black (#FF000000) and D365 will automatically set the color to how it should be. I have noticed however that currently ribbon button icons will not automatically set the color so you should set the Icon Color to white (#FFFFFFFF) for ribbon icons.

image

Once you have the right settings, click Export and select Scalable Vector Graphics (*.svg) as the Save as type.

image

Now that you have your SVG icon uploaded as a web resource, head to your Entity customization and select “Update Icons” at the top. You will be able to upload entity icons like normal but there will now be a second tab called “Unified Interface” where you can select your new SVG icon.

image

Now we can check out our new icon in the Unified Interface. Use the App selector to navigate to an app where Unified Interface is enabled.

image

Now your custom entity icon will display correctly instead of using the default puzzle piece icon.

image

With custom ribbon buttons, as stated earlier, currently D365 does not automatically change the foreground color so we need to set it to white to be consistent with the native UI. Using the wonderful Ribbon Workbench, just set the ModernImage property of your button to your new SVG web resource.

image

Our new SVG icon in the Unified Interface:

image

Now your icons are all set in both the Web and Unified Interface!

Topics: Microsoft Dynamics 365 Microsoft Dynamics CRM Microsoft Dynamics CRM Online

Implementing Machine Learning in D365 – Part 2

This post is the final part of our two-part series on Implementing Machine Learning in D365. Head here to read part one if you haven’t been following along yet.

In part one, we built an Azure Machine Learning (AML) algorithm against our Opportunity data in D365 to come up with a probability that the Opportunity will win. In this post, we will use AML to generate a web service for us and then we will use Microsoft Flow to retrieve the probability and update newly created Opportunities with the value.

Within AML, after you successfully ran the experiment, select Set Up Web Service –> Predictive Web Service

image

Once it is finished, you will then have to click Run to go through the experiment again. Once that is finished you can click Deploy Web Service –> Deploy Web Service [New] Preview. You will have to create a new Price Plan (fortunately there is a free one with 1,000 transactions) and then click Deploy. Once it is deployed, you will want to click Use Web Service. On the next page you will want to make note of the Primary Key and Request-Response values as we will need this shortly.

image

Next, head over to Microsoft Flow and sign in with a Microsoft account. Click “Create from blank” and then search for the “When a record is created” for D365 trigger.

SNAGHTML387eecc

You will need to authenticate to D365, select your organization and then select the Opportunities entity.

image

Click + New step –> Add an action. Search for and select the “HTTP – HTTP” connector. We will use this to call our AML web service that we just deployed earlier. Set the Method to Post and the Uri to the value of the “Request-Response” that we noted earlier from AML. Next, add a header and set the key to ‘Authorization’ and set the value to ‘Bearer xxx’ where ‘xxx’ is the value of “Primary Key” that we noted earlier from AML. Then add a new header value with a key “Content-Type” and value “application/json”. Lastly, set the Body to the following:

{
    “Inputs”: {
        “input1: [
          {
            “description”: <description>,
            “estimatedvalue”: <estimatedvalue>,
            “statecode”: 0
          }
        ]
    },
    “GlobalParameters”: {}
}

Using the dynamic content helper on the right, replace <description> from the Body by selecting Description from the list of dynamic content. Do the same for the <estimatedvalue> so that the whole HTTP action looks like the following screenshot:

image

Next, click + New Step –> Add an action and select Parse JSON. Using the dynamic content helper, set the Content field to the Body from the HTTP action. Set the Schema field to the following text:

{
            "type": "object",
            "properties": {
                "Results": {
                    "type": "object",
                    "properties": {
                        "output1": {
                            "type": "array",
                            "items": {
                                "type": "object",
                                "properties": {
                                    "estimatedvalue": {
                                        "type": "string"
                                    },
                                    "description": {
                                        "type": "string"
                                    },
                                    "statecode": {
                                        "type": "string"
                                    },
                                    "Scored Labels": {
                                        "type": "string"
                                    },
                                    "Scored Probabilities": {
                                        "type": "string"
                                    }
                                },
                                "required": [
                                    "estimatedvalue",
                                    "description",
                                    "statecode",
                                    "Scored Labels",
                                    "Scored Probabilities"
                                ]
                            }
                        }
                    }
                }
            }
        }

image

This will help parse the response from the AML web service call so we can get to the actual probability value that is returned.

Lastly, click + New Step –> Add an action and select the “Update a record (V2)” for D365. Set your organization and the Opportunities entity again. Then using the dynamic content helper, set the required fields to the respective values from our first trigger from D365. For the probability, I created a custom Decimal field called Predicted Probability. This field will show up in the “Show advanced options” section in Flow. Click that and find the Predicted Probability field and set the expression to the following:

mul(float(body('Parse_JSON')?['Results']?['output1'][0]['Scored Probabilities']), 100)

This expression is using the Parse JSON action we added to get to the Score Probabilities value from AML, converting it to a float and then multiplying by 100 to show as a percentage in D365. The “Update a record (V2)” trigger should look like the following screenshots:

image

image

Now you can save the flow and make sure the trigger is set to “On”. Now in D365, we can create a new opportunity. I set the Description to “Wine” with an Est. Revenue of $90. Back in Flow, you can check the Run History and make sure the Flow ran and was successful. It may take a minute or two for it to run.

image

Once you see a successful process in Flow, refresh your D365 Opportunity and you should see the Predicted Probability updated.

image

Now we have a complete round-trip from getting the data out of D365 to train it and then pushing the predicted probability back into D365. For existing records, you will want to build a process to retrieve them all and call the AML web service for each one.

Azure Machine Learning has many different algorithms (here is a nice cheat sheet) for all different types of business processes. This is just one example and will hopefully give you an idea of what you can accomplish in your own organization. If you have an questions or are interested in enhancing your organization with machine learning, contact us.

Happy Machine Learning!

Topics: Integrations Microsoft Dynamics 365 Microsoft Dynamics CRM Microsoft Dynamics CRM Online

Implementing Machine Learning in D365 – Part 1

Machine Learning is the latest hot topic and for many good reasons. Being able to take a manual, sometimes inaccurate data point and transforming it into an automated and consistently accurate one, has huge advantages. Take for example the probability that an opportunity will close. It is up to your salesperson to input this data and you relying on it to be accurate.  With machine learning, we can automatically provide this data point and have it be consistently accurate based on historical data.

In this two-part series, I will be walking through just that, how to implement Azure Machine Learning (AML) that will provide the probability that an opportunity will win. I will be using a very simple algorithm with only a couple factors as an example. It will be up to you to come up with the factors that matter for your business and make sure your CRM has that data, in order to come up with an accurate opportunity probability.

I will be using D365 Online and the first thing we will want to do is setup the Data Export Service so we can replicate our data into an Azure SQL database which AML can easily connect with. If you haven’t set this up yet, head here for a complete guide on how to set it up. For this walkthrough, you will only need to sync the Opportunity entity but if you want to expand your factors further, you will most likely want to sync other entities.

Note: If you are on an on-premise version, you can utilize SSIS to replicate on-premise CRM database to an Azure SQL database.

Next, go to your Azure Portal, create a new resource and search for “Machine Learning Studio Workspace”

image

Once everything is setup, you can navigate to the new Machine Learning Studio workspace and click “Launch Machine Learning Studio”.  This will take you to a separate website where you will need to sign in using your Azure credentials.

image

Then create a new blank experiment:

image

You will then see a blank canvas where you can drag and drop different components. The first thing we will want to do is search for “Import Data” on the top left and drag the “Import Data” component onto the canvas.

image

Then, highlight the Import Data component and click the “Launch import Data Wizard” button on the right. Select Azure SQL Database and enter the right settings for your environment. Next, enter this SQL query:

select
    cast(estimatedvalue as float) as estimatedvalue,
    description,
    CASE 
       WHEN statecode = 2 THEN 0
    END  as statecode
from opportunity
where statecode = 1 or statecode = 2

In this query, we are retrieving the estimated value and description of the opportunity. With my sample data, the description is acting more like a “type” of opportunity. The values in this field in my org are either “Beer” or “Wine”. Estimated value and description are the two factors that we are using to determine if the Opportunity is Won or Lost. In a production scenario, you will most likely want to capture and use more data points for an accurate opportunity probability. Factors such as how long the opportunity sits in each stage, how many activities are regarding the opportunity, or maybe even the salesperson that owns the opportunity.

The first thing to note with the query is that AML currently doesn’t support decimals so we need to cast estimatedvalue as a float.

cast(estimatedvalue as float) as estimatedvalue

Next, we’re going to be using the Two-Class Boosted Decision Tree algorithm which requires us to pass it a 0 for negative and 1 for positive. We want to label the Lost opportunities as negative and the Won opportunities as positive so we use a SQL CASE statement to set the statecode value for Lost (2) as 0. The statecode value for Won is already 1 so we are good there.

CASE 
       WHEN statecode = 2 THEN 0 
END  as statecode

Lastly, we only want to return Won and Lost opportunities as we are building the AML model based on what is already Won or Lost since that is what we are trying to predict.

where statecode = 1 or statecode = 2

Next, search for the “Split Data” component and drag it onto the canvas. Then, connect the Import Data and Split Data components together.

image

Best practice with machine learning is to split the data so that most of the data is used to build the model and the other piece of data is used to evaluate the model to see how accurate it is. That is what the Split Data component is for. You can play around with the settings to split the data how you like.

Next, drag the Two-Class Boosted Decision Tree component to the left of the Split Data component.  Then, drag the Train Model component under the Two-Class Boosted and Split Data components and connect the Two-Class Boosted to the left point of the Train Model and the Split Data to the right point of the Train Model.

image

Highlight the Train Model component and on the right-side and click the “Launch column selector” button. Next, enter “statecode” and click the checkmark.

image

This is taking a subset of the data (based on the Split Data component) and applying the Two-Class Boosted Decision Tree algorithm to it using the statecode parameter to build a model based on the Won and Lost opportunities.

Lastly, drag the Score Model and Evaluate Model components onto the canvas and make the connections like so:

image

This will run the other piece of data from the Split Data component and run it against the trained model and determine the score, which in our case is the opportunity probability. Then it will take that score and evaluate it to provide metrics on how well the model is.

Now click the Run button at the bottom which will process each component. Once it is finished, you can right-click Score Model and select Scored datasets –> Visualize. This will show you your data with the score columns applied. Scored Probabilities is the percent that the machine believes it is the positive value, which in our case is a “Won” opportunity. The Scored Labels column is the value of 0 or 1 for Lost or Won opportunity. If Scored Probabilities is greater than 50% then Scored Labels will be set to 1, otherwise it will be 0. More information on the Score Model can be found here.

image

Now right-click Evaluate Model and select Evaluation results –> Visualize. This will display a chart of how accurate your model is with data points on the accuracy. Based on your results, you can tweak the settings in the other components or bring in and remove factors and re-evaluate the model to get an accuracy that you are comfortable with. More information on the Evaluate Model and what the different data points mean can be found here.

image

That concludes the first part of our series. Now that we have a trained model with a high accuracy, in the next part of the series, I will show you how to generate a web service that we will use to retrieve the probability prediction and update D365 with the data. The best part is, we can use the power of Microsoft Flow to do all this without any code…stay tuned!

Topics: Integrations Microsoft Dynamics 365 Microsoft Dynamics CRM Microsoft Dynamics CRM Online

ISV Customer Success Story: Campaign Monitor Invests in Dynamics 365 Integration

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

Campaign Monitor is the email marketing and automation platform used by some of today’s fastest growing businesses. Their technology provides their 200,000+ customers, including Chandon, Rip Curl, Topshop, Huffpost, and Virgin, with powerful tools to help drive business results through email.

CRM plays a large role in the Campaign Monitor platform. When real-time customer data from CRM is integrated with Campaign Monitor, email marketers leverage that data to send more targeted campaigns that in turn drive engagement. Campaign Monitor recognized that one of the top CRM platforms their customers use is Microsoft Dynamics 365. To ensure these customers had a seamless way of bringing CRM data into Campaign Monitor, their team decided to build an integration between the two platforms.

Campaign Monitor hired Sonoma Partners to help build an integration between Dynamics 365 and their email marketing platform.

The result of this partnership was a scalable and robust integration between Campaign Monitor and Dynamics 365 that provided their joint customers with the functionality they needed to bring the right customer data into their email marketing campaigns.

Campaign-monitor-quote- (002)

We sat down with Vibhor Chhabra, Head of Product Management at Campaign Monitor, to ask him about the project, investing in Dynamics, and his thoughts on integrating his solution with a a market-leading CRM platform.

Why did you decide to invest in Dynamics 365?

Chhabra: Our goal at Campaign Monitor is, and has always been, to build a platform for more sophisticated email marketing, while maintaining the simplicity of our product, and expanding globally. More and more of our customers want all of their subscriber data in Campaign Monitor. To bring in customer data the moment they interact with your brand is a powerful thing. You can use this data to engage in real-time interactions and market according to their behavior. By sending targeted emails based on user activity in CRM, you can ensure your messages are personalized and therefore more effective.

Beyond fulfilling a customer need, we also believe in investing in partnerships. We found the investment in Dynamics 365 to be a great opportunity to grow our partnership with Microsoft. Microsoft is a leader in CRM, and we are a leader in email marketing – it seemed fitting to join forces to better serve our joint customer base.

Why did you choose Sonoma Partners, and what was your experience in working with us?

Chhabra: I had heard great things in the market about Sonoma Partners and their advanced expertise with CRM and Dynamics 365. It became an obvious choice and one that truly served us well.

I enjoyed my experience in working with Sonoma Partners. I thought they had a very clear and professional process. Sonoma Partners came in with a plan and executed accordingly. With quite a few customers already requesting the integration, we had to significantly push up our development timeline. Sonoma Partners readily accepted the challenge and delivered. We’ve already received great feedback on the integration, and I’m very pleased with the result.

What were some of the tough decisions you had to make throughout the course of the project?

Chhabra: Balancing the functionality we needed in this integration with the delivery timeline was bound to be challenging. Is it better to get your customers something early that’s a bit simpler, or to make them wait for something more feature rich? Ultimately, we released an initial version that had a one-way sync between the platforms to get our customers up and running immediately/quickly. Shortly thereafter, we released a second version that operated with a two-way sync between the platforms. This allowed us to balance the desired functionality and delivery time.

Campaign_monitor_blog_img_750x392

What’s next for Campaign Monitor?

Chhabra: There is a lot on the horizon for Campaign Monitor as we continue to invest in our platform and to serve our customers above and beyond their expectations. I think this Dynamics 365 integration is just one example of how we continue – and will continue – to invest in meeting the needs of our users.

Our thanks to Vibhor for sitting down with us to discuss the project! If you’re looking to build an integration between your application and a market-leading CRM platform or to learn more about our ISV Enablement practice, contact us.

Topics: ISV for CRM Microsoft Dynamics 365

Designing Dynamics Security? Don’t Forget About Relationship Behavior

Today's blog post was written by Brian Morlock, Principal QA at Sonoma Partners.

Recently, I was testing out system access for a specific security role. This security role was setup so that a user should only have user-level permissions to the Opportunity entity, meaning that they should only be able to view and edit Opportunity records that that they own or records that have been explicitly shared with them.

Bm 1
Click the image to expand.

When I logged into CRM with a test user account who had this security role, I was surprised to find that they could see and edit some (not all) Opportunity records that were owned by other system users. 95% of the time, this would indicate that the test user is a member of a team and that team is setup with a security role that is providing the user elevated access to the Opportunity entity. When I checked the test user’s teams, I found that the test user was not a part of any teams. I also confirmed that I was looking at Opportunity records that hadn’t been explicitly shared with the test user.

At this point, it became clear that there must be some sort of data structure in place that was providing this test user access to these Opportunity records.

The commonality I discovered was that these Opportunities were associated to a Parent Account record where the test user was the owner of the Account. Aha! The test user was getting access to the Opportunity records based on their access to Account records. From a business perspective, especially for this business, this made sense, but how can this be considered when designing the security for CRM?

Answer: Cascading Parental Relationships

Bm 2
Click the image to expand.

When I viewed the relationship properties between Accounts and Opportunities in my CRM environment, I could see that the Account had a ‘Parental’ relationship to Opportunity and the Reparent setting was set to ‘Cascade All’. The key here is the Reparent setting of ‘Cascade All’. The reparent action is essentially saying, if a user is the owner of an Account, then they will automatically be granted access to any child Opportunities of that Account as if they were the actual owner of those child Opportunities.

In the example above, even though my test user was not the owner of the Opportunity, they were provided read, write, append, append to, share and assign permissions to the Opportunity simply because they were the owner of the Opportunity’s Parent Account, which is granted to them via the Reparent action of the Account to Opportunity relationship properties. Note, however, that the user will still not have permissions to delete the Opportunity, because as dictated by the security role, they do not have permission to delete Opportunity records even if they are the owner of the Opportunity record.

With the Relationship Behavior set to ‘Parental’, the Reparent action is defaulted to ‘Cascade All’ and cannot be changed. If the nature of a business dictates that the system users shouldn’t be granted permissions to an Opportunity simply because they are the owner of the Parent Account, then the Relationship Behavior can be changed to “Configurable Cascading” which allows the system administrator more flexibility in configuring the Reparent action, along with other behavior actions.

Bm 3
Click the image to expand.

Cascade All – grants ownership to all child entity records associated to the parent entity record

Cascade Active – grants ownership to only active child entity records associated to the parent entity record

Cascade User-Owner – not applicable for the Reparent action. This setting looks to apply an action to all child records that are owned by a user. The Reparent action is looking to apply ownership to child records, which the user already has. This is more applicable to the other behavior actions like Assign.

Cascade None – does not grant ownership to any of the child entity records; does nothing

Keep these Relationship Behavior options in mind if you have a complex security setup or you need to limit user access in very specific ways. They may just provide the final tweak you are looking for to create the perfect security model.

Topics: Microsoft Dynamics 365

New Dynamics 365 for Field Sellers Demo Videos

Today's blog post and its video content were created by Bryson Engelen, Sales Engineer at Sonoma Partners.

We've put together two video demos of Dynamics 365 for Field Sellers in Manufacturing and Distribution. One is about ten minutes, and one is about thirty minutes. 

We know from plenty of experience that Manufacturing and Distribution Field Sellers are commonly on the road most of the week, heavily relationship-focused, and typically not tech-savvy (sometimes sealing deals with a handshake and shipping product before finance and legal can draw up a contract). This can severely limit visibility for management and lead to avoidable losses, which makes CRM appealing to the boss. But the value statement of CRM to a sales rep has to be very different.

The main benefits of CRM for Manufacturing and Distribution Field Sellers are sales performance metrics and dashboards, the ability to track customer relationships, visibility into ERP data, and getting all this on a mobile phone. CRM integration with an ERP provides a much cleaner access point to the ERP data that sales staff use daily such as commission splits, order histories, invoices, repairs, returns, and the customer's credit so when entering an order or looking at a customer, the rep can see the credit limit, overages, and past due invoices of the customer and place the order without finance blocking the sale down the line because the customer is past due. Of course, one of the core purposes of a CRM system is to present the full picture of a given account and to monitor interactions. Additionally, CRM tools can automatically identify related products for upselling and cross-selling.

Dynamics 365 can provide a great mobile experience for Manufacturing and Distribution Field Sellers by giving them a complete picture of current pursuits, closed orders, invoices, quality issues, sample and display requests, and more on an account.  Right from your phone you can have access to the owners, buyers, distributors and other people on an account, see financial data, create quick account snapshot reports, record notes, log requests, and create service tickets.  In these two videos, we demo how a Field Seller could use Outlook and D365 together on a mobile phone, leverage Power BI for analytics, in addition to manufacturing-specific account management, opportunity tracking, and more.  Below is an outline of the things covered in the video as well as the videos themselves.

  • Outlook Mobile App integrated with Dynamics 365:
    • Tracking Outlook Emails to Dynamics 365
    • Viewing Contact Details from Dynamics 365 in the Outlook Mobile App
    • Creating New Records (like Opportunities) in Dynamics 365 from the Outlook Mobile App
  • Account Overview in Dynamics 365 Mobile App
    • Recording Calls into the Account
    • ERP Data for the Account
    • Activities, Notes, Contacts, Sales Team, OneNote, Opportunities
    • Account Summary Report in in Dynamics 365 Mobile App emailed to Manager
  • Mobile Dashboard with Pipeline, Accounts, Etc. in Dynamics 365 Mobile App
  • Relationship Assistant in Dynamics 365 Mobile App – What’s Most Important to Me Today?
  • Opportunity Management in Dynamics 365 Mobile App
    • Following a Business Process
    • Activities, Products, Competitors and More
  • Power BI Mobile App
    • Overall State of Business Dashboard
    • Q&A: Ask the Robot a Question and Get and Answer
    • Predictive Questions and Insights from Power BI Robot
    • Texting an Annotated Report to a Colleague
  • Outlook Integration on the Desktop
    • Display CRM Data Against Emails
    • Replies include CRM Items like Email Templates, Marketing Brochures, Emails, and Open Tracking
  • Dynamics 365 on Desktop Browser
    • Dashboards with Slice and Dice
    • Account 360 with Orders, Cases, Opportunities, Work Orders, Equipment Tracking, Invoices, Charts, Forecasting by Units or Dollars, Sold Product
    • Account Insights – Data from External Sources bringing in News, Contacts, Industry Research
    • Opportunities – Following a Process, Approval Branching for Discounts, Document Tracking, Collaboration (Warehouse, Finance, etc.)
    • Generating Quotes and Sending via Docusign
  • Reporting
    • Dashboards with Excel-like Filters and Slice and Dice
    • Dynamic Excel Exports and Updates on a PowerPoint or from Recurring Outlook Appointment

If you’re a manufacturer with Field Service needs, don’t forget our Field Service demo video here:

Happy watching! Please contact us if you have any questions.

Topics: CRM for Manufacturing Microsoft Dynamics 365

Sonoma Partners Becomes a Microsoft CSP

Today's blog post was written by Corey O'Brien, VP of Development at Sonoma Partners.

We're excited to announce that Sonoma Partners has entered the ranks of the Microsoft Cloud Solution Providers. This means that not only will we continue to provide the best-in-class Dynamics services you have come to expect, but that we also now sell and support subscriptions to Microsoft services.

What does this mean?

We were already supporting these solutions, but adding this offering means we are now officially a one-stop-shop for our clients. Our support solutions and accelerators – more coming soon! – will not only add value to the platform but can now be included as part of our CSP offering. As said by Microsoft, “The Cloud Solution Provider program puts our partners in the middle of the relationship with the customer, delivering on solution success, and managing the business relationship.” You can learn more about the benefits of being and working with a CSP partner with Microsoft here.

Cloud solution provider-03

Our team has been working with Dynamics for years and is recognized as a leader in the Microsoft Dynamics world. We already have support tools to monitor our clients’ Dynamics instances proactively, providing insight into potential issues before they arise. Our team continues to look for ways to bundle in additional IP with subscriptions to provide more value to our customers.

Why should you care?

Starting immediately, our clients can buy subscriptions to Microsoft Dynamics, Office 365, and Azure from us directly. Purchasing through a CSP partner, as opposed to going directly to Microsoft, can provide you with a broader range of purchasing methods, more flexible and customized solutions, and a more direct line of support. Whether you have already taken advantage of our services or would like to start with licenses first, we can help.

If you would like more information on this topic, please contact us.

New Call-to-action

Topics: Microsoft Dynamics 365

Webpack and Dynamics 365

Today's blog post was written by William "Dibbs" Dibbern, Principal Developer at Sonoma Partners.

These days if you're building any complex custom UI, you're going to come across webpack, and for good reason. What is webpack? It's a build tool that you can read more about here.

Webpack is great, but when using it with D365 you will likely encounter a few bumps down the road. You'll likely notice that you are unable to load SVG or Font assets into D365, stumble across the restrictions on which characters can appear in web resource filenames, and flip a table over trying to get sourcemaps into D365 as well.

How do we get around these hurdles? The most obvious answer might be to use the url-loader module to embed your assets as Data URIs. That approach may work out fine in some cases, but there's a whole host of very valid reasons not to use the Data URI approach. Since we've got some significant downsides, let's take a look at other approaches to solving each of our problems.

Note: the below examples are targeting v3.4.1 of webpack

Unsupported File Types - Fonts

The way around most unsupported file types we care about is to append .css. We primarily use this for font files however. All you need to do to fix this in webpack-land is to adjust your output name pattern such that .css is appended, and you're all set. Therefore a font called something like awesomebold.ttf would become awesomebold.ttf.css.

Unsupported File Types - SVG

While we have support for SVG web resources supposedly coming in the next release, how do we handle this until then? You could certainly go with the same append .css to the filename trick we used for fonts, but in our experience we like another approach. We find our SVG assets do not change all that often, and are generally pretty small, so one would think we might lean back towards the url-loader approach mentioned above. And we do. Kinda. url-loader always does Base64 encoding of your assets, but SVG under the hood is just XML. As it is therefore human readable we prefer to pull the XML in pretty much as-is with svg-url-loader.

Filename Special Character Restrictions

If you've dealt with web resources for more than a hot second, you've likely stumbled across the fact that D365 will not allow you to name a web resource with a hyphen in it. According to the docs they technically only support:

[The] name can only include letters, numbers, periods, and nonconsecutive forward slash ("/") characters.

This means no hyphens. These are pretty darn common in asset filenames though, so thankfully we have a way around it! What we typically do here is simply ask webpack to strip out the hyphens using the customInterpolateName option. While the customInterpolateName option is not well documented, it is certainly available for us to hook into and thus solves our problem.

Sourcemaps

While it is arguable whether or not you want to store a sourcemap in D365, for homegrown applications these can be very handy for debugging, especially if you're not using something awesome like Imposter for Fiddler. Thankfully getting these into D365 is fairly easy. What we can do is use something similar to our first trick. In this case we prepend the word map as transforming the filename in any other way doesn't seem to work in all cases. Again, here we only need a quick change to our webpack config and we're off to the races.

Conclusion

So you see, with a few simple tweaks to our webpack config, we can now use just about any resources we want. Make a few config updates, kick off a new webpack build, and you've got your assets all set and ready to be uploaded to D365.

Have you come across any other issues with web resource development in D365 that you've yet to solve? We'd love to hear about them in the comments!

Topics: Microsoft Dynamics 365