If you're considering a switch from Salesforce to Microsoft, you probably have some questions. For instance, what should you consider from a business planning perspective to ensure your transition is as hassle free as possible?
Microsoft Dynamics CRM 2013 has the capability of creating a phone number field. This is a great feature as it allows for click-to-call functionality directly from the Dynamics CRM record.
However, you may wish to have the display of the phone number formatted as well. Formatting the phone number would provide additional benefits, as it would allow the phone data to be displayed in a uniform fashion. For example, all phone numbers can be displayed in the format (XXX) XXX – XXXX.
In order to accomplish this, one must add a JavaScript code to the phone field as an OnChange event.
Steps:
1. Create a web resource (FormatPhoneNumber). To do this, click Settings > Customizations > Web Resources.
2. Add the JavaScript code to the web resource. To format phone number filed as (XXX) XXX – XXXX), use the following code:
function formatPhoneNumber(context) { var phoneNumber = context.getEventSource(); // Verify that the field is valid if (typeof (phoneNumber) != "undefined" && phoneNumber != null) { if (phoneNumber.getValue() != null) { // Remove any special characters var sTmp = phoneNumber.getValue().replace(/[^0-9,A-Z,a-z]/g, ""); // Translate any letters to the equivalent phone number, if method is included try { if (sTmp.length <= 10) { sTmp = TranslateMask(sTmp); } else { sTmp = TranslateMask(sTmp.substr(0, 10)) + sTmp.substr(10, sTmp.length); } } catch (e) { } // If the number is a length we expect and support, // format the translated number switch (sTmp.length) { case 1: case 2: case 3: case 4: case 5: case 6: case 8: case 9: break; case 7: phoneNumber.setValue(sTmp.substr(0, 3) + "-" + sTmp.substr(3, 4)); break; case 10: phoneNumber.setValue("(" + sTmp.substr(0, 3) + ") " + sTmp.substr(3, 3) + "-" + sTmp.substr(6, 4)); break; default: phoneNumber.setValue("(" + sTmp.substr(0, 3) + ") " + sTmp.substr(3, 3) + "-" + sTmp.substr(6, 4) + " " + sTmp.substr(10, sTmp.length)); break; } } } } ////// TranslateMask() will step through each character of an /// input string and pass that character to the /// TranslatePhoneLetter() helper method /// /// Input string to translate function TranslateMask( s ) { var ret = ""; //loop through each char, and pass it to the translation method for (var i=0; i/// TranslatePhoneLetter() takes a character and returns the /// equivalent phone number digit if it is alphanumeric /// /// Character to translate function TranslatePhoneLetter( s ) { var sTmp = s.toUpperCase(); var ret = s; switch( sTmp ) { case "A": case "B": case "C": ret = 2; break; case "D": case "E": case "F": ret = 3; break; case "G": case "H": case "I": ret = 4; break; case "J": case "K": case "L": ret = 5; break; case "M": case "N": case "O": ret = 6; break; case "P": case "Q": case "R": case "S": ret = 7; break; case "T": case "U": case "V": ret = 8; break; case "W": case "X": case "Y": case "Z": ret = 9; break; default: ret = s; break; } return ret; }
3. Add the web resource to the form library of the phone number field and set up the OnChange event.
4. Save and publish the customizations.
Result:
Formatting a phone field in CRM 2013 with Java Script code is easy if you follow these steps!
If you need additional assistance with creating JavaScript or with any Dynamics CRM related topics, check out our other blogs.
Happy CRM'ing!
Awesome scriptlet!
I tried this cool script but got an error.
There was an error with this field's customized event.
Field:phoneNumber
Event:onchange
Error:Unable to get property 'getEventSource' of undefine or null reference
I figured it out. Checked "Pass execution context as first parameter" in Handler Properties.
I got to the last step to add the event handler and when I click OK to add the function nothing shows up in the event handler area. It stays blank when I choose to add something. I copied everything verbatim even with the function names and its still not working. Anyone have any idea whats going on?
Hi - Try to past a screen shot of what you are seeing. A couple items to try would be to do a publish all, if using IE check that your crm url is in list of trusted or intranet zone.
There was something wrong when chrome updated recently. Here is the link to the fix.
https://community.dynamics.com/crm/f/117/p/140706/305386.aspx#305386
This is awesome thanks a lot, I had JScript which worked for CRM 2011 but not for CRM 2015 but your script does...
WELL DONE!!!
Hi ,will this work in crm 2015?
Yep - this works in crm 2015.
Thanks Joe, for the reply, I tried those steps, no errors till I publish, then I get this error.
Field Security
Profile Error
You must have sufficient permissions for a secured field before can change its field level security.
My role is System Customizer, what privileges, will I have to change?
Hi - as a test, try with the administrator role. If it works, then we know for sure it is a permissions issue and not something else.
Hey, thanks for the reply. code is fine, its the account.
oh - so you only get the error when publishing? make sure you have read/write to web resources.
Thanks for this. Do you have any thoughts or suggestions on handling phone # extensions in CRM? Is it best to manage extensions in a separate field in order to still utilize the click-to-call functionality? Any help would be greatly appreciated.
Hi Matt - We'd recommend storing the extension in a new field and NOT part of the phone number if click to dial usage is planned. Most click to dial addons will simply pass the whole phone number as it is in crm. Perhaps it will strip out non-digit characters, but everything is passed. Our Power Phone addon behaves this way too.
I figured I would probably need to pull out extensions as it's own field. Thanks for confirming and for the quick reply!
Anyone know of an international formatting library?
Hi MC - We have done various variations of js to format international numbers. If you know js, take a look at http://www.phoneformat.com/ - you can download their javascript. Then with a bit of work you can pretty much do anything. We have had clients that use it to real time display country code, etc.....
Hi Joe, do you know whether there is a code out there that would allow free formatting to allow free form text after the initial (xxx) yyy-zzzz.
Hi Joe, sorry to bring up an old post but I have been trying to get his solved in my CRM environment. Will this for on the Web Front end forms, or does it have to be on the back end? I have added the code listed her to "onChange," I do not get any errors, but it does not execute the JS and format the number(s).
Any help/input would be greatly appreciated!
Does this work in Dynamics 365 on Prem? I am getting an error when entering the phone number in the phone field. FormatPhoneNumber is undefined at (Eval code:1:1)
@markshryock:disqus Yes it should. JS is case sensitive. The script function starts with a lowercase, and you've typed in an upper case "F". If you are still having issues, I recommend asking a question to either CRMUG, StackOverflow, Microsoft Forms, or signing up for PO support, since troubleshooting via a blog forum post is not very easy.
Dang, that was it. I feel silly now. Thanks!