Sonoma Partners Microsoft CRM and Salesforce Blog

Fun with Numbers (and Dynamics Workflows)

An often overlooked feature of CRM is the ability to easily update numeric fields using simple calculations without having to invest in the services of a developer.  Power users, administrators, and business analysts can use workflows to add, subtract, and multiply data in numeric fields.

A simple case of this would be to have a field Contact entity that tracks the number of phone calls made to the Contact.  This field can then be used in reports / dashboards for you to further target your highly active Contacts to drive future business, or even send a slightly better holiday gift as a thank you for their continued business.

The first thing you’ll want to do is create a numeric field (whole number, currency, decimal, or floating point number).  I’ve added a “# of Phone Calls” whole number field to my Contact form.


Then create a workflow to run off of Phone Call creation, and the only step needed is an Update step to update the Contact record.


In this step, click in your numeric field, and click the drop down for Operator.  You’re able to set the field to a specific value, clear it, or use one of the simple math functions provided to perform easy calculations.



Now you can create your phone calls and watch your calculated field increment up with each workflow.  You can obviously put in conditions in your workflow in case you only want to count phone calls that are completed, and not all phone calls.  Or you can even add workflows for the other activity types in case you’re not interested in just a workflow count, but an overall count of activities made to contacts, or even accounts.  Finally, you can add workflows around the deletion event of these activities to decrement the count if you allow your users to delete activity records.


An additional use case for this native functionality would be to roll up child line item costs/expenses/sales, to a parent record.  A custom entity could be create to track time for professional service firms.  The time records could then roll up to the parent project record to track the overall hours logged against the project, and even be multiplied by the hourly rate to track the overall budget spent at the project.

This functionality, which offers basic math, allows non technical folk to add powerful business logic to their solution, and is often overlooked for the more complex / more expensive “custom development” solution.

Topics: Microsoft Dynamics CRM Microsoft Dynamics CRM 2011 Microsoft Dynamics CRM 2013

Introducing Dynamics CRM DevTools!

I am happy to announce Dynamics CRM DevTools, our new free developer tool for Dynamics CRM 2013 and 2011 UR 12+.  CRM DevTools is an extension to Google Chrome which can be found here in the Chrome web store.  This extension provides a variety of tools to help optimize customizing and troubleshooting within Dynamics CRM.  Currently all deployments of CRM 2013 and CRM 2011 UR 12+ are supported.  Below is usage information and a full list of features.



Form Information


  • Displays the current form’s back-end information

    • Entity Name
    • Entity Id
    • Entity Type Code
    • Form Type
    • Is Dirty
  • Ability to show the current form’s attribute’s schema names
  • Ability to refresh the current form
  • Ability to enable disabled attributes on the current form (System Administrators only)
  • Ability to show hidden attributes on the current form (System Administrators only)


Current User Information


  • Domain Name
  • User Id
  • Business Unit Id




  • Ability to open advanced find
  • Set focus to a field on the current form
  • Display a specific User and navigate to the record (by Id)
  • Display a specific Privilege (by Id)




  • Ability to update attributes from the current form (System Administrators only)
    • This is helpful when you need to update values for testing but the fields don’t exist on the form




  • Execute any Fetch XML statement and view the results
Topics: Microsoft Dynamics CRM Microsoft Dynamics CRM 2011 Microsoft Dynamics CRM 2013

CRM 2013 JavaScript Bookmark Series – Part 3

Today’s bookmark is an easy way to open Advanced Find.  In CRM 2013 the Advanced Find Command Bar button doesn’t exist on every page and with the new single page navigation, it can be frustrating trying to get back to the main page where the button exists.  With this JavaScript bookmark, Advanced Find will pop open with a single click!

Add the below JavaScript as a bookmark URL:$('#crmContentPanel iframe:not([style*=\"visibility: hidden\"])')[0].contentWindow.Xrm.Page.context.getClientUrl() + "/main.aspx?pagetype=advancedfind");

Shoutout to my colleague Ian Moore for the suggestion.
Topics: Microsoft Dynamics CRM Microsoft Dynamics CRM 2013

Spring is just around the corner!

With the Salesforce Spring ’14 release scheduled to be released to dev and sandbox orgs in a few weeks, followed by production orgs starting a couple weeks after that, it’s time to look at the latest release notes to see what goodies we have in store. We’ve done some digging through the notes and here’s what we think are the most important changes for both us and our clients in the upcoming release.

First, a list of the important release dates you should know:

  • Feb 7 – 8: Sandboxes upgraded
  • Feb 14 – NA1 production instance upgraded
  • March 7 – NA6, NA7, NA8, NA9, and NA13 production instances upgraded
  • March 14 – 15: All remaining systems upgraded.

IE 11 support

Salesforce has added support for IE 11. Note that there are still restrictions on what is supported in the various versions of IE – for more details see this page of the release notes.

Increased file storage per user

The maximum file storage per User in Salesforce is being increased from 612 MB to 2 GB. This is great news for our clients that make heavy use of documents in Salesforce, as it will help alleviate some of the data storage quota woes that we see.

A few import things worth noting about this feature:

  1. This only applies to Enterprise, Performance, and Unlimited edition organizations.
  2. This will not be released at the same time as the rest of the Spring ’14 upgrade. It’s scheduled to be available "within one month after Spring ’14".

For full details about this feature, see this page of the release notes.


This isn’t actually a single topic, but rather an entire overhaul of the mobile platform within Salesforce. The idea here is that you can build the mobile application from with Salesforce and have it be viewable on a mobile device in a more native format. This leverages Salesforce’s security and Visualforce pages, reducing time to market and maintenance costs for some types of mobile applications.

The release notes for this feature are located on this page, and Salesforce has set up its own landing page located here.

Need help deciding if you should invest in native mobility or Salesforce1? Not sure if you need mobility at all? Contact us and let us take you for a test drive.

Repeating Tasks on a Flexible Schedule

Akin to a repeating task on a set schedule, this feature will allow a task to be repeated a certain number of days after a specified trigger. We’re excited about this feature because it’s a semi-common request, and this will reduce the amount of custom code we need to write and maintain - ultimately decreasing the cost for our customers.

Full details about this feature are on this page.

Salesforce CTI Toolkit

This is more of a warning than a feature. In Spring ’15, the Salesforce CTI Toolkit is being retired and Salesforce will no longer provide support for it. Salesforce is recommending all partners move to Open CTI for future development.

The full details for this feature are located on this page.

Worried about if this will affect your Salesforce CTI integration? Contact us and we can help you find out.

Launch Flows from Workflow Rules

This is a Pilot status, but we’re excited about this nonetheless. This feature will allow you to launch flows from workflows when the workflow criteria is met. This is just one more way to accomplish potentially complicated logic without needing to write custom code, reducing the overall costs of building new applications.

You can read more about this pilot feature on this page.

Collaborative Forecasts and Opportunities

This is an umbrella feature that includes several changes to how forecasts and opportunities are handled in the sales process. Some of the changes include adding the ability for sales teams to have multiple forecast types, improved forecast reporting options, and a streamlined process for splitting opportunities.

Also worth noting here is that the class Forecasts (1.0) will be retired in Summer ’14.

Full details about all of the changes around this feature are on this page.


Of course, there are many more changes coming in the Spring ’14 release that we didn’t cover here, so be sure to check out the full release notes for further information.

Have questions or comments and want to speak to someone knowledgable? Contact us and we can help.

Topics: Salesforce Toolkit for .NET Initial Review

Recently, I blogged about how to connect to Salesforce and use the SOAP API using WCF. Recently, my colleague Mike Welburn told me about the Salesforce Toolkit for .NET, which looked very intriguing. The toolkit is a set of code built on the Portable Class Library that uses the Rest API to communicate with Salesforce. I decided I would write a quick demo app to give it a spin and see if this is something we could use here at Sonoma Partners to assist in building integration, migration or mobile applications.

To start, the documentation for the application is located here. From that documentation, I was able to build the following (very) simple console application that proved out the basics of what the library can do and how easy it is to use it:

The code here is pretty straightforward, so I won’t go through it line by line. There are, however, a few things worth noting here. First is the use of two sets of credentials from the Windows vault – the vault only lets you store usernames and passwords so there wasn’t a nice way to store the consumer key and secret with the username and password. Second, this library is built upon .NET 4.5’s async/await paradigm, so you need to Wait() on the task to finish to prevent the process from terminating early (in a console application). Lastly, this toolkit does allow the use of anonymous types when communicating with Salesforce (see the update example). This is a nice feature which has the potential to cut down on the number of classes and files you need to write in your applications.


So now for the real question: Does this toolkit provide us enough benefit to justify adding it as an external dependency?

One of the things we always have to be cognizant of when building applications, especially integrations, is that the code we build has the potential to be around for a very long time. Any external dependencies we introduce to the application have to either:

  • Come from a known name so that we can be reasonably sure it will continue to be supported
  • Add enough value to make the risk of it stagnating worthwhile

In this toolkit’s case, it meets both criteria, especially if we look to the future. This toolkit is available on the Developerforce Github account, which indicates it is officially supported by Salesforce and will continue to be maintained going forward. It also provides us with code to handle what I would consider to be the most painful part of any application: authentication. This alone makes the toolkit a worthwhile addition to any application that needs to connect with Salesforce. This is a library I look forward to seeing grow in the coming months, and will definitely recommend whenever we have a project with requirements that this toolkit can help solve.

One Further Sample

Mike Welburn also alerted me to this excellent post which gives a more in depth sample on how to set up an application to use this library, including screen shots of what you need to do in Salesforce. Definitely give it a look over if you’re having issues getting going.

Topics: Salesforce

CRM 2013 JavaScript Bookmark Series – Part 2

Today’s bookmark is an updated version of our CRM 2011 bookmark to change all field labels on a form to their respective logical names.  This is helpful for customizers and especially developers so you can quickly reference a field without going into the customizations.

Add the below JavaScript as a bookmark URL:

javascript:function getFrame() {var $iframe = $('#crmContentPanel iframe:not([style*="visibility: hidden"])');if ($iframe.length > 0 && $iframe[0].contentWindow.Xrm.Page.ui) {return $iframe[0].contentWindow;}else {return null;}}var frame = getFrame();if (frame == null) {alert('Please make sure you are on an entity form and try again.');}else {frame.Xrm.Page.ui.controls.forEach(function(a){a.setLabel(a.getName())});}

Now when you are on a record form and click your new bookmark it should change all the field labels as shown below.                      


Shoutout to my colleague William Dibbern for helping create this bookmark
Topics: Microsoft Dynamics CRM Microsoft Dynamics CRM 2013

The Secret Sauce to Buy CRM Software like a Pro

Have you purchased a new car in the past 5 years? Do you still get the cold shakes thinking about that grueling and awful sales process? The half-truths, the deceptions, the scummy feeling you had when the deal was over? Remember that scene in National Lampoon’s Vacation where Clark Griswold tries to buy a car? Vacation

Multiply that sales pain times 100, drag it out over several months, and you will get a taste of what many enterprise CRM software selection processes seem like! We frequently work with software vendors and customers to help them evaluate different software platforms and negotiate pricing. Unfortunately many of these transactions causes frustration on both sides of the process. Most companies undergo a CRM software selection process just once every few years. Since you might be a little rusty, we want to make sure you buy as efficiently as possible. Buying CRM software like a pro will help you:

  • Negotiate the best price and terms possible
  • Make you a star within the walls of your company
  • Save you from sales people that nag and annoy you

With that in mind, we want to share the “secret sauce” on how customers can buy CRM software like a pro.

Flip the Script, Sell Your Story to the Sales Person!

As a customer, you’ll work with a sales rep from the CRM vendor. Many buyers treat the CRM sales rep as the enemy, when in reality you should treat the sales rep as your biggest advocate. CRM sales reps have a job to do, and here’s what they want to know about you:

  • When do you plan to make a decision?
  • When will you actually place the order?
  • How much software do you plan to buy?
  • What’s the long-term upside?
  • What does your org chart look like?
  • What are the software evaluation criteria?
  • What’s the decision making process?
  • Will you stick to the plan and timeline?
  • How do we stack up to our competition?
  • What’s our relationship with key influencers and decision makers?
  • Should I commit this deal to my manager?
  • What can I do to help you make a decision as quickly as possible?

In many CRM sales cycles, a cat and mouse game exists where customers try to hide as much of this information as possible while sales people work relentlessly to answer all of these questions. Sometimes sales people will do things like go around you and call your manager and executives. While this might be super annoying to you, try to remember that they’re only trying to get answers to their questions. If you put yourself in their shoes, you can imagine how their sales manager probably grills them on a weekly basis about all of their questions.

Now that you know what information your sales rep needs, we recommend that you share as much of this information as possible up front. Show org charts, outline the influencers and decision makers, and get them excited about the long-term potential of your account. Maybe your current project only requires a few sales force automation software licenses, but make sure the sales rep knows you’re considering a customer service project twelve months from now, and that the marketing group might also like some new applications.

Beyond the long-term opportunity, we encourage our customers to provide access to your executives when the time is right. By making sure the CRM sales person knows how and when they can engage with your execs, they won’t try to get around you. Just as important, they can also line up the appropriate sales management from their side so both sides can speak directly and candidly to one another. This executive to executive communication helps reduce the potential for mis-communication or mis-understanding.

It might seem counter-intuitive, but sharing key information with the CRM sales rep will:

  • Get the sales rep and their sales manager excited about your account, and they will “go to bat” for you when it comes time to negotiate terms and pricing
  • Position you as a professional buyer, and they will treat you accordingly during negotiations
  • Save you hassle and headache because the sales reps won’t need to go around you

An open and honest conversation between the customer and the CRM vendor will lead to the best possible decision and pricing for the customer. Of course, if you need help figuring out your EXACT decision making process and software selection, we would love to help you out. Please contact us and we’ll get you setup with our software selection best practices!


Topics: CRM Platform Selection

Sonoma Partners’ Editable Grid 2011 v Released

A new version of the Sonoma Partners’ Editable Grid for Dynamics CRM 2011 has been released.  The latest version is available for download immediately via the Sonoma Partner’s Community Site.

This version of Editable Grids for CRM 2011 fixed a few defects:

  • Fixed a script error when changing views on the editable grids in Outlook 2010
  • Fixed inability to tab out of lookup attributes
  • Fixed errors on decimal attributes
  • Provided a friendly error message when a user tries to save the editable grid with an invalid date format

Sonoma Partner’s Editable Grids is a utility that allows users to quickly and easily update multiple records at one time. The editable grid button is accessed in the application ribbon, so users can always access it quickly. The editable grid button is available on Account, Contact, Opportunity, Lead, and Case out of the box, but can be added to more entities through configuration.

Note that this release of Editable Grids is for Dynamics CRM 2011 only and not Dynamics CRM 2013.  These are two separate solutions that Sonoma Partners provides for the latest two major releases of CRM.

This is a free tool that Sonoma Partners makes available to the community.  Head over to the Community Site now and download your copy!

Topics: Microsoft Dynamics CRM Microsoft Dynamics CRM 2011

Salesforce Streaming API in .NET (Part 2)

Today’s guest blogger is Nathen Drees, a Developer at Sonoma Partners.

In the first part of this post, I showed how to build an application in .NET that can listen to and respond to events fired from the Salesforce Streaming API. In this part, I will look at the solution from a business perspective and analyze its strengths and weaknesses.

When we’re building integration solutions for our clients, a set of common requirements continuously pop up that we need to be able to address. These requirements broadly fall in to two camps:reliability and configuration.


This is from both a system perspective and a data perspective. Clients want to have as much of a guarantee as possible that any change in the source system will eventually, and as quickly as possible, be reflected in the target system. They also want their IT staff to be notified if something in the near-time process goes wrong and the data cannot be synchronized so that they can take corrective action.


Clients prefer the ability to configure the solution without having to involve a developer as much as reasonably possible. This helps keep costs down and, with some training and documentation, allows the IT staff to move the application from one server or environment to another if needed.

When looking at the Salesforce Streaming API, the biggest issue I ran into was from the reliability point of view. The documentation says that the API doesn’t guarantee that a message will be reliably delivered – meaning that if Salesforce were to become unavailable or your server is rebooting while a message is generated, the target system will never be notified. This isn’t ideal – I would like messages to be persistent (see SQL Service Broker for an example of a technology that does this), or at the very least the ability to be notified if I miss a message, even if I can’t recover the message itself. Since neither of these are available currently, my primary work-around is to build a combination of near-time and scheduled jobs, where the scheduled job will just grab everything on a regular basis to ensure we don’t miss anything.

So is the Streaming API worthwhile for integration purposes? That depends heavily on how much the client needs near-time updates in the target software. For most clients, the extra overhead of having to build a scheduled application is going to render the Streaming API useless for integration purposes – why not just wait the few hours and let the scheduled job do all of the work? If the client really needs near-time updates then the Streaming API is something worth looking at, as long as its limitations are understood and planned for.

It should be noted here that this does not mean the Streaming API itself is not useful. One of the primary uses for it is to build reactive UIs that are aware of data changing on the server and can update themselves accordingly. In this role, the Streaming API has value and should still be considered.

Topics: Salesforce

CRM 2013 JavaScript Bookmark Series - Part 1

More than a year ago we came up with a series of blog posts showing off JavaScript bookmarks that are helpful for CRM developers and customizers.  Due to the re-design of CRM 2013, a lot of those bookmarks won’t work without some tweaking so we are bringing back the series with modified versions of the 2011 bookmarks as well as some brand new ones. 

To create these bookmarks, just browse to any CRM 2013 page and add it to your favorites (This will get you the lovely CRM logo).  Then, you can edit the bookmark and set the URL to the JavaScript mentioned in the post.


For the first bookmark in this series, it will provide the ability to copy a record URL.  In CRM 2013 when you are on a record form, currently there isn’t a way to copy the record URL like in CRM 2011.  Also in CRM 2013 when you navigate to a record, the browser address bar doesn’t display the URL to the record so there isn’t a quick way to find the URL or the record ID.

Add the following JavaScript to a bookmark and now you can quickly retrieve the record URL:

javascript:var url = document.getElementById('crmContentPanel').getAttribute('src');if (url.indexOf('/read/page.aspx') == -1) {if (url.indexOf(Xrm.Page.context.getOrgUniqueName()) != -1) { window.prompt('Copy to clipboard: Ctrl+C, Enter', Xrm.Page.context.getClientUrl() + url.replace('/' + Xrm.Page.context.getOrgUniqueName(), '')); }else {window.prompt('Copy to clipboard: Ctrl+C, Enter', Xrm.Page.context.getClientUrl() + url);}}else {    window.prompt('Copy to clipboard: Ctrl+C, Enter', window.location.href);}

Similarly, if you just want the ID of the record, you can add a new bookmark with the following JavaScript:

javascript:if ( != null) { window.prompt('Copy to clipboard: Ctrl+C, Enter',; } else { if (frames[0] && frames[0] != null) { window.prompt('Copy to clipboard: Ctrl+C, Enter', frames[0]; } else { if (frames[1] && frames[1] != null) { window.prompt('Copy to clipboard: Ctrl+C, Enter', frames[1]; } else { alert('Please navigate to a record form first.'); }}}

Note: These bookmarks will display a prompt with the value rather than automatically copying to the clipboard.  The value can be copied by using Ctrl+C then hitting Enter.  This is to support multiple browsers as only IE easily allows copying to the clipboard from JavaScript.

Command bar buttons could be created using the provided JavaScript as well but be aware that the JavaScript is unsupported so the command bar buttons (and these bookmarks) can potentially break after a CRM 2013 update.

We hope these bookmarks prove to be useful.  Hit us up in the comments with your favorite and let us know if you have any ideas for a new bookmark!

Topics: Microsoft Dynamics CRM Microsoft Dynamics CRM 2013