Sonoma Partners Microsoft CRM and Salesforce Blog

4 Reasons to Stop Investing in a Homegrown CRM System

CRM for Professional Services
For the most part, homegrown things are great. We can get behind homegrown vegetables, flowers, and craft beer. But your homegrown CRM system? That’s another story. For professional services firms in accounting, consulting, legal and AEC, CRM systems are the lifeblood of building relationships and service dollars. And if you want to keep your staff and customers happy, maybe you should start shopping for a CRM that is enterprise-grade, instead of wasting money and manpower on a homegrown CRM system that’s sub-par. Here are 4 reasons why:

1. Homegrown CRM systems don't come with free stuff or shiny new toys 

Whether you purchase or Microsoft Dynamics CRM, by virtue of the platform alone you get access to the tools, functionality, and integrations your team needs. Whether it's reporting, mobile apps, forecasting, user authentication, or especially integrations with tools you use, need and love; incorporating these features into a homegrown CRM system (and maintaining said integrations) would come at an exorbitant cost (and still wouldn’t work as well). Name brand CRM solutions not only give you all this for free, but also constantly deliver new innovations. Both and Microsoft Dynamics CRM release regular updates 2-3 times a year, and you don't have to do a thing to reap the benefits.

With either platform you never have to build the mobile app or Outlook integration your users clamored for and you constantly get great new things like OneNote integration. A lot of professional services firm use OneNote (and who wouldn't, it's a great tool!) and for Microsoft Dynamics CRM users, no one had to ask for an integration between the two tools: Microsoft built and delivered the ability for OneNote to sync to CRM out of the box. If you wanted to integrate OneNote with your homegrown CRM, it would cost an untold amount of money (and might not even be legal). A huge benefit of buying a CRM, rather than building one, is you get access to the shiny new toys (and tried and true programs) your users will love.

2. Homegrown CRM systems aren't user-friendly

Let me say this another way: a lot of homegrown CRM systems are ugly. And clunky. And your people don't want to use tools that are ugly and clunky. So if supporting user adoption is part of your CRM initiative (which it absolutely should be) good luck getting your team to regularly use a system that is as painful to look at as it is to use. Microsoft Dynamics CRM and both have teams of UX designers for precisely this reason: CRM solutions must be visually appealing to be appealing.

3. Homegrown CRM systems are difficult to maintain

A majority of the homegrown CRMs we get a glimpse of were built 10-20 years ago, exist on-prem, and look like Microsoft Office applications from the late 90s, or worse, are green screens that only very technical people can touch. All of these factors (and trust us, there are plenty of others) contribute to the fact that homegrown CRM systems can be extremely difficult to maintain. And that's if you hold on to the employee that can maintain them.

Does this sound familiar? "Yeah, we had a guy here in the early 2000's that built our system but he left 5 years ago. No one on staff understands the system, no one can update it, and it's just sitting on our server untouched." Like we said, maintainability is a big issue for homegrown CRM systems. 

4. Homegrown CRM systems make customizations painful

Assuming you are one of the fortunate few who have been able to keep their homegrown CRM guru on staff for the past two decades and he/she knows every in and out of the system, this doesn't mean that making changes is easy to do. When it's entirely custom, your CRM expert is likely using duct tape, spit, and prayers to make the system do what you want it to do. On the other hand, and Microsoft Dynamics CRM allow you to make changes to the system with simple point-and-click, drag-and-drop configurations that require a Business Analyst skillset, not a developer coding away.

If you need someone more technical to make changes, there are plenty of developers you can hire on either platform to work in-house at your firm or as a consultant. and Microsoft Dynamics CRM also have lots of great partners (like Sonoma Partners *ahem!*) who are very well-versed on the platform, have solved similar problems to yours countless times before, and have helpful tools and tricks to make selecting, switching to, upgrading, and maintaining or Microsoft Dynamics CRM easier and more cost effective than doing so with internal resources.

Want to learn more about enterprise-grade CRM systems? We're all ears (and solutions)

New Call-to-action

Topics: CRM for Professional Services

Metablasting Dynamics CRM 2015

Today’s post is courtesy of Srilekha Keshava, a Developer at Sonoma Partners.

In the previous post, we have discussed in detail about Sonoma Partners Metablast utility and the benefits of using the tool to generate an entity schema. Today, we are pleased to announce that Metablast has been updated for Microsoft Dynamics CRM 2015. Download the free utility!

Updating Metablast for Dynamics CRM 2015 required only a slight rework, namely matching the latest .NET Framework 4.5.2 to match CRM 2015 compatibility. The UI, connection information, and output remains the same.


As a reminder, once the organization is selected, Metablast displays the list of entities that are available to generate the schema.


A .CSV file with the schema of the selected entities is created.


Field Name


Entity Display Name

Display name of the entity

Entity Name

Logical/Schema name of an entity

Display Name

Field display name


Logical name of the field


A short description of the field


Type of field (Example: Option Set, Single Line of Text, etc.)

Is Custom

Is the field Custom or Native

Requirement Level

Is the field Optional, Recommended or Required

Audit Enabled

Enable/Disable audits

Security Enabled

Enable/Disable security


Is the field Readable


Is the field Creatable


Is the field Editable

On A Form

Is available on the form


Related target Entity for a Lookup field

Relationship Name

Relationship used for a lookup field

Options: Value

Option Set values if Type is Option Set

Max Length/Max Value

Maximum length/value of the field

Min Value

Minimum length/value of the field


Precision Value if Type is decimal

Note: When Metablast is ran against multiple entities, a single CSV file with schemas for the selected entities will be generated.

Form Record Navigation in CRM 2015

If you’re like us at Sonoma Partners, and have upgraded to CRM 2015 already, you’re also getting used to the different UI of 2013/2015 compared to 2011.

I may be one of the odd ones where I enjoyed 2011 opening each link in a separate tab (I changed my IE settings to open in a tab, versus a new window).  This way I could multi-task and have many different tabs for different records that I was working with.

However, in order to get this functionality with CRM 2013/2015, I now resort to right clicking in a list/grid, and selecting “Open in a New Window” and now I’m back to the navigation that I’m used to.


However, doing this comes with a price of losing some other functionality.  Another great CRM feature is the previous/next navigation arrows on a record form to navigate quickly between records from the view you came from.

However, if you right click and open your new record in a separate window/tab as I did above, these arrows don’t appear.  If you navigate the way 2015 was built (double clicking a row and having it open in the current window/tab), then these arrows appear.

Just something to be aware of as you choose your own adventure for how to navigate around CRM 2015.



Topics: Microsoft Dynamics CRM Microsoft Dynamics CRM 2015 Microsoft Dynamics CRM Online

Convergence 2015 Keynote Recap

Microsoft’s Convergence was last week and we’re recovering from a long and exciting week in Atlanta but we wanted to share with the community some of the hot topics being talked about in the Dynamics community.

The focus of this year’s Convergence keynote was how Microsoft empowers people, industries and organizations to achieve more. Satya Nadella and Kirill Tatarinov took the stage separately to talk about how Microsoft technologies work together to help transform businesses and while doing so, they announced a handful of new tools.

Power BI

Power BI is a cloud service that leverages Excel to provide shareable analytics through reports and dashboards. Power BI is now available in the U.S. and more than 140 markets around the world. The following data sources are coming soon – Google Analytics, Microsoft Dynamics Marketing, Zuora, Acumatica and Twilio.


Office Delve

Delve is a new tool which surfaces content from email and social feeds within Office 365. It uses machine learning to highlight information that is relevant based on your work and your colleagues. Delve can surface content from Yammer as well as Exchange Online. It was announced during the keynote that Delve is now globally available.


Skype for Business

Lync has been rebranded as Skype for Business and can now leverage all your Skype contacts. It was announced in the keynote that the technical preview starts today. The full version will be available starting in April.



Microsoft Dynamics CRM was finally discussed towards the end of the keynote when Julia White came out to unveil the new Spring ‘15 Release.

InsideSales Predictive Intelligence

Julia announced and did a demo of Dynamics CRM integration with’s Predictive Intelligence which helps sales users determine which lead they should be focused on right now by displaying the Neural Score and Contactability front and center on the Lead form.


OneNote Integration

On the Activity Feed for a record there is a new link for OneNote which lists all the related OneNote entries for the current record.


When a OneNote entry is clicked on, it navigates right to the note in OneNote Online which can then be edited directly in OneNote. This feature is exciting for us as a lot of CRM users use OneNote as well. It provides a better rich-text experience versus the standard text box that CRM provides with native notes.


Suggested Items

On the product line items for an Opportunity, there is a “Suggestions” link in each row which will display a list of related products so that they can be easily added to the Opportunity as well with a single click. This feature comes in handy for cross selling or when you’re selling a product that has a lot of related accessories.



With a Windows Phone device, Cortana can now be used to open records through voice commands. Julia said the command “CRM open opportunity called Trek 3D printer upgrade” which then proceeded to open the specific opportunity record in the MoCA app for Windows Phone without any hiccups! I’m still skeptical of how well the voice commands will work but it looks very promising based on her demo and I’m excited to see what else can be done with Cortana and CRM in the future.




Outlook 2016

Julia briefly showed off the new Outlook 2016 and announced the release of IT Professional and Developer Preview of Office 2016. Attaching a file will now display the most recently used documents. There are also new attachment options so you can use a link to OneDrive or the standard inline attachment. The release version of Office 2016 is expected to be available in the second half of this year.



Surface Hub

Lastly, Julia showed off the new Surface Hub on a 84” HD 4k touch sensor screen with WiFi, speakers, microphones and cameras. It supports two-way integration so the content can be manipulated from either the Surface Hub or individual devices that are connected to the Hub and it looked pretty smooth and slick! The Surface Hub website notes that it is coming later this year.



Unfortunately we were hoping for some more stage time for Dynamics CRM but the features that were shown from the Spring ‘15 release look very promising. Now that the NDA is lifted on the Spring release, we will be covering the new features over the next few weeks so check back in the near future!

Topics: Microsoft Convergence Microsoft Dynamics CRM 2015 Microsoft Dynamics CRM Online

5 Benefits of Integrating CRM and ERP Systems for Manufacturing Firms


Whether you're operating in wholesale and distribution, life sciences, or industrial manufacturing; you're well aware that today's global economy and technology explosion have created a hyper-competitive operating environment for manufacturing firms.  In order to help your company improve the efficiency of your business processes so you can compete, you've implemented an Enterprise Resource Planning (ERP) tool. Whether it's JD Edwards, SAP or Oracle that you're using, your ERP system allows you to get a real-time view of your entire enterprise. But what about a real-time view of your customer? Have you invested in a CRM system that gives you a comprehensive understanding of who your customer is and what they're purchasing? There are two very important sides of the profitability coin: the business and the buyer; the tools your company uses should address both. When properly integrated, manufacturing firms can experience major benefits from the marriage of CRM and ERP.

1. Consolidated Sales Processe

One specific challenge that manufacturing firms face is supporting two modes of selling: a direct sales team and a distribution channel. Not only are you focused on appealing to your distributors so they push your product, you're managing your direct sales team and their relationships with your clients. So what happens when your direct sales team goes head-to-head with your distributor on the same project? Are you even aware of the overlap before it's too late? A well-implemented CRM system is flexible enough to support the two different modes of selling and get your teams the information they need to ensure you aren't engaging yourself in a bidding war.

2. Increased Visibility and Improved Forecasting

In our experience, we've found that a majority of sellers don't have access to their ERP systems. This is a problem! If you don't have a CRM system and you're storing valuable client and product information that your sales force needs, you have a problem. Because of this lack of access and information, any hope for accurate forecasting goes out the window. When integrated, ERP and CRM systems can give your team real-time visibility into the business data so they can properly sell and have compelling conversations with customers.

3. Cleaner Quote to Cash Process

This is a conversation we have with almost every one of our manufacturing clients. The concept of having to create accurate quotes off of complicated product configurations is an extremely difficult task. But with increased visibility comes an improved quote to cash process (hallelujah!) We know that the product configurations that you create can be very complex because you build to order. Every choice impacts the next and without a deep understanding of the product configuration at the beginning of the project you’re setting yourself up to fail. Unfortunately, we've found that the beginning of the sales process hasn’t paid enough attention to product configurations and how this impacts the entirety of the project’s lifecycle. When CRM and ERP systems are integrated, your sales team can access the information they need at the beginning to accurately quote and deliver.

4. Mobility

Now that you’ve addressed the two modes of selling, determined who is responsible for the sale, and integrated your CRM and ERP systems properly, your team is ready to hit the ground running. Or are they? Your field team is on the road having dynamic conversations with customers and they must be able to update content at the point of interaction, not at the end of the day. You have to have a mobility strategy that allows you to update pipeline and quote information on the fly. Mobile CRM applications allow you to capture and document this information, ultimately helping you to engage and make better decisions for your customers based off of order information, historical purchases, and current production schedules; all accessible with just a swipe and a tap.

5. The Distributor Portal

A trend that we are currently seeing in manufacturing is an increased focus on keeping existing customers, rather than winning new business. This means that once you’ve made the sale, you have to pivot your attention to keeping the conversation going. Manufacturers, repeat after me: cross-selling is your friend. And how can your team cross-sell more effectively? Through portals updated with information from both ERP and CRM systems. Portals allow you to see where in the manufacturing process an order is, check the status and delivery of past orders, and see the account in real-time. All of this information gives you valuable insight that can help you make the next sale while keeping your existing customers in the know.

CRM is no replacement for ERP and ERP is no replacement for CRM, but the integration between these two systems is essential to increasing collaboration between departments. If you're considering integrating a CRM tool with your existing ERP system, remember this: the key is to create two systems that are tightly integrated and designed in a way that creates a customer-centric environment.

Want to learn more about CRM and ERP integrations for manufacturing? We can get you get actionable data into the right people's hands at the right time to keep your sales and production cycles moving forward.

eBook - Top 10 CRM Evaluation Criteria
Topics: CRM for Manufacturing

Let Lightning Processes change the way you Workflow – Invoking Apex

In part 1 of this series, we looked at the new feature released in Spring ’15 called Lightning Processes and we did a basic comparison between it and Worflows. In part 2, we looked at how to use Lightning Processes to create and update related records. In today’s post, we’ll be looking at how to extend the Lightning Process Builder beyond it’s out of the box capabilities by invoking Apex inside your Processes.


While the Process Builder is very flexible out of the box, it cannot do everything. Salesforce realized that there would be scenarios they couldn’t cover by default, so they allow us to extend the Process Builder by writing Apex code that meets certain criteria, and then invoking the Apex from our Processes.

As an example for today, let’s say we have a custom field on Account called Sample Field 1, and the requirement is whenever Industry is changed we want to copy the value to Sample Field 1.


While we could use a standard field update or a formula field to achieve this, we’re going to use Apex so that we can see how we can extend Processes to do something much more complicated.

To start, we need to learn about a new Apex annotation introduced with Spring ’15: @InvocableMethod. This annotation lets us mark an Apex method as being something that can be ‘invoked’, or called, from somewhere other than Apex. In our case, we’re going to call it from a Process. It also defines some metadata about the method like a human friendly label and description of what the method will do when it’s called. There are some specific requirements that must be followed to make a method invocable, so make sure you read the documentation carefully. In our case, the code is very simple:

Once we have this class saved, we can go to the Process Builder and use it. Most of the setup is the same as before, but when choosing an action to perform we’ll now chose a type of Apex:


Once you’ve filled out the required fields, you’ll have a process that’s now calling your apex class!


To test it out, let’s first try updating an existing record:



That worked! Now let’s try it when we create a new record:



That also works. In general, processes get executed after the record has been soft saved to the database (roughly the same time that workflows would run), so they have an ID already by the time this Apex executes.

A gotcha

When I first wrote this Apex class, I wasn’t originally looking up the record from the database and updating that copy. I tried to instead update the record directly:

It seemed like I should be able to do this, since this is what I would do in a before trigger normally (I also hadn’t yet figured out when exactly Processes run in the pipeline – in hindsight it’s obvious this wasn’t going to work). When I attempted to run the Apex which updated the record directly, I got a nasty error on the form:


Unfortunately, that’s all the detail you can get from the user’s point of view, which isn’t super helpful. There also doesn’t appear to be a way to customize how it’s displayed, which is slightly disappointing. If you’re an administrator in the organization, you’ll receive an email which is more helpful:


The important thing to note here are the Process ID in the email and the details of the Apex error. The Process ID corresponds with the ID the user sees in the error message and can be used for correlation if multiple Processes are having problems. In my case, I was more interested in the Apex details, which states that the records that are passed in to the Apex class are read-only.

Wrap Up

Obviously this example is very simple, but the Apex you use could be quite a bit more complicated. The core lesson here is that we can invoke Apex from Processes if we give it the appropriate annotation and follow the rules in the documentation, allowing us a greater degree of freedom. We hope you find this new power useful. If you come up with any creative ways to use Processes, please feel free to share in the comments below!

Topics: Salesforce

The Salesforce Admin's Toolbox: Populating Fields with a Custom Button


The Salesforce Admin's Toolbox is written by Megan Burch, a Salesforce Business Analyst at Sonoma Partners.

Disclaimer: This is considered a URL hack, which is not supported by Salesforce. Salesforce can change undocumented query strings at any time. Also, field ID’s will likely change between environments. Sonoma Partners has code that can resolve this issue. Please contact us for more information.

With Salesforce, pulling information from one object to another with formula fields and workflow field updates is easy. However, sometimes users need to see information or for usability purposes have information pre-populated before they save the record. Custom buttons are a great solution for this. In this edition of the Salesforce Admin’s Toolbox, I’ll outline how to create a custom New Opportunity button on the account related list to pre-populate account information onto a new opportunity form, as shown here:1

1. Create a New Button

To create a custom button navigate to the “Button, Links, and Actions” option from the object you want to create the button. For this example, we will create a new button on the Opportunity. The first thing you’ll want to set is the display type, which determines the layout of the Salesforce side bar and header on the new page.
A “Detail Page Link” button will show up next to the custom links on the detail page. 

A “List Button” will show up on any related lists or configured list view. 

For this example, I created a “List Button” on the Opportunity object. The custom button will show on the Opportunity related list on the Account page (or any other object with an Opportunity related list). Next, we’ll choose a behavior. This gives you an option of how you want the new record to execute. Display in existing window with sidebar will run the flow in the same window you are in, showing the Salesforce sidebar. 
Display in existing window without sidebar will run the flow in the current window, without showing the Salesforce sidebar. 
Display in existing window without sidebar or header will run the flow in the current window, without showing the Salesforce sidebar or standard header. 

Execute JavaScript will execute any JavaScript written in your organization that is set to run items upon a click. Again for this example, I chose Display in existing window with Sidebar. Finally, you’ll want to select your content source, which in this case is a URL, which I’ll explain next.

2. Understanding the URL

Custom buttons in Salesforce can do one of three actions. They can launch a Visualforce page, execute JavaScript, or direct the user to a new URL. Our example will utilize the URL action. The URL action can get complex when you wish to use Salesforce to parse the URL and take advantage of their built-in functionality. To get the base content for our URL, click the “New Opportunity” button on the Opportunity related list from an Account record, paying special attention to the URL value in your browser window.

Copy and paste the URL into your custom button and remove everything before the first forward slash, and everything after retURL, so it looks like this:


Writing the rest of the URL will be easier once you understand the above string.

006 - Each object has an ID in Salesforce. The 006 indicates that the URL will take you to an opportunity record.

You can find a complete list of Object IDs here.

/e - This is the action being taken on the record. In this example, e is for edit.

? - This denotes the beginning of a querystring. Everything after the question mark are name/value pairs that the browser natively interprets. As you will see, we’ll supply a few parameters that Salesforce will interpret for us, such as variables (fields) are included, Salesforce will search the parent object and match up fields on the child object in order to populate them with default values.

retURL - This indicates our originating record and where the information should be pulled. In this case, it will be the account record that I clicked.

3. Populating Fields

Before I can populate the additional fields, I need to tell the button where to pull the fields from (the Account). From the “Insert Field” drop down I selected Account ID and the system inserted it as a merge field. 

The beginning of the URL should now look like this:


Now that I have the base URL for the button, it’s time to populate the fields. In addition to the pre-populated Account Name, I’m also going to populate the Industry and Account Phone number with information from the parent Account.

To populate the fields on the Opportunity, I’m using this general format:

Opportunity field ID = Account field name 

I’m getting the Opportunity field IDs by navigating to the field in the Opportunity set-up and opening it. The ID will be in the URL string once the field is clicked.

Note: ID’s for custom fields will differ between sandbox and production environments.
I’m getting the Account fields using the “Insert Merge Field” drop down I used to get the Account ID earlier. Once I have those two pieces the URL will look like this:



Next, I am going to populate the Industry field on the Opportunity. I created a custom Industry field on the account as a lookup field. Lookup fields need to be entered slightly differently in custom buttons. The Opportunity field ID = Account field name needs to be entered twice, once with the appendage “_lkid”, and the prefix “CF”, if it is a custom lookup. Our example will look like this:



Now the complete button looks like:





4.  Adding a Custom Button to a Related List

Our last step will be to add your custom button. Navigate to the edit page layout screen. Scroll down to the Opportunity related list and click the wrench.  Click the buttons box, un-check the standard new button and select the new button.

Now, when you click on the button the Opportunity record will open with the Account Information fields pre-populated: 
Understanding how custom buttons work and how to create them is one of most beneficial Salesfoce tricks I’ve learned. Custom buttons have countless applications and will help you unock creative solutions to maximize your users’ Salesforce efficiency. 


Topics: Salesforce