Microsoft CRM Tricks and Tips
August 22, 2014
We had an interesting occurrence with a client this week. Like many security conscious clients, they have limited ability for their servers to access the internet. In this client's case, they had a proxy that was required for access.
Fairly typical CRM setup with an IFD CRM, leveraging an ADFS internal server, with an ADFS proxy supplying the gatekeeping for the outside. CRM was using a standard SSL certificate from a public provider.
August 20, 2014
When Microsoft released CRM 2013 with its new look and feel, one of the biggest changes was how to navigate around the product. The left navigation pane was replaced by the menu/tile user interface. This menu, designed to take full advantage of touchscreens and tablets, takes a bit of getting used to when using a mouse. I’m still amazed by the learning curve difference between clients using a table or Surface Pro versus those with a full laptop or desktop. Touch screen users seem to find the menu navigation very intuitive and easy to advance to and from forms. Mouse users, seem to be playing catch-up.
Although this blog is not about how or why the new menu UI exists, it is about how to change it. Before I jump into that, I do want to add a quick tip to all those legacy mouse users:
Useful Tip: Use the wheel on your mouse to ease the navigation through the tiles that span more than a screen width. Scrolling the wheel up and down has the effect of swiping the tiles left and right.
Let’s a take a look at a vanilla CRM 2013 menu:
July 21, 2014
Well if so, fear not! We have unlocked the potential to do more with custom Web Resource development by utilizing the following work around when trying to upload and use files that do not seem to be supported by Web Resources in CRM.
July 18, 2014
I often find users are looking for ways to alleviate the email overload. Sometimes important emails are missed due to a hectic day. In some situations a remedy I like to incorporate is the ability to text message a user for events or status changes the user really cares about. Leveraging Microsoft CRM and cell phone carriers' email feature, we can offer users the ability to receive critical alerts via text messaging in addition to normal email.
February 26, 2014
While working with a client, we made an interesting discovery. They had lost the button on the subgrid on some of their entities. This button will pop-out the associated view for the related entity in question. Picture below, it is the one that when hovered over, displays "See the records associated with this view."
When we were working on the navigation on the form for Account, (though this would be the case on any entity) they had removed many of the related entities. Their theory was that they were displaying the data within a subgrid on the form, so they could reduce clutter on the navigation of the related entities. The unintended consequence of some of these removals was that it also removes the button noted above.
The ensuing search on Bing was filled with entries regarding the behavior of the + button on subgrids and wasn't germane to the problem we had. Finally we stumbled across the following link by Jason Lattimer : http://community.dynamics.com/crm/b/jasonlattimersblog/archive/2013/10/29/context-sensitive-sub-grid-commands-in-crm-2013.aspx which effectively describes the issue we had encountered. We give full credit to Jason for his excellent write up on this problem.
The easiest way to determine if you are having a similar issue is the following (we will use Contact on the Account form as the example, but this could easily be translated for other subgrids on other forms) :
1. Open an account using the form that you have the subgrid for contacts on.
2. Pull down the Related Records view from the dropdown next to the particular account as pictured below.
3. If the related entity is NOT listed, that is likely your subgrid problem.
To resolve the issue, you will open the form in question from your solution or the default solution.
1. Open the form and click on Navigation as pictured below:
2. Once you have selected that, the Side Navigation bar becomes available and the right side available to pick the relationships from. Here is a screenshot to show you that view:
To summarize, the resolution to the disappearance of the button and functionality was to add the related entities back on the navigation within the form.
December 02, 2013
Study after study will tell us that half of all CRM implementations will be viewed by their organization as a failure. These studies then tell us the main reason for these failures is the lack of "user adoption". What exactly does user adoption mean? According to Wikipedia, adoption deals with the transfer between an old system to a target system within an organization. In my experience, I have found that true user adoption can often be difficult. One of the more challenging experiences I have had when it comes to adoption was working through an implementation where systems, CRM included, were often seen as disjointed and misaligned with business process.
There we were, at the 11th hour, running through our “Go-Live” checklist dotting the i’s and crossing all our t’s. We were huddled in “The War Room” with just about anyone and everyone whom had played a hand during our implementation up to that point, when finally our VP of Sales and Project Sponsor asked THE question. Anyone who has been around a CRM or any software rollout in general has asked him or herself this exact question before – “Will the users use it? Will they LOVE it?” The panic, the blank stares, the “we hope so”, they were all there when we finally agreed collectively that we needed to break this down and get an approach.
It was time to get creative, we had to get creative. Everyone in the room was asked to write down 3 things they thought were imperative for system success as well as three things that could doom our rollout. The idea, of course, was to avoid anything on the second list, while hitting a bunch of bingos on the first. We chalked about 25 different ideas for system success on the board and then did our best to enumerate their importance and priority. The results were… Interesting. This was a cross-sectional group of all levels and areas of the organization so we expected a variety of results but the variance is not what caught my attention. Simply, it was the term that was on everyone’s list – it has to be EASY. This actually caught all of our attention and at what seemed like the most inopportune time, we were questioning our mindfulness to keep it simple for the user. We felt like we had done a great job of keeping our user interfacing elements, like forms and views, designed with the audience in mind. We had quality integrated data and great documentation, but it did feel like we were missing something. What was the direction? Where was our sales force supposed to start? We looked over our documentation and training materials, then it hit us. We needed to give our user the direction, and that direction would be one place to do “The First Ten Things”.
We grouped 80% of the system functionality into ten distinct scenarios, "The First Ten Things". We would then use these ten scenarios as a starting point to guide users throughout the system. Agreeing on the First Ten was a challenge, but once we had that, we were off. We decided that a dashboard to put these First Ten one click away was the next logical step and that is exactly what I want to share with the blogosphere. By putting together a quick “Launchpad”, we were able to drive user adoption by putting the ten most common scenarios in our CRM one click away for the user. We also found that this increased use and adoption in things NOT in the First Ten, mostly because our users were now focused on doing these big scenarios in the system. We made it easy.
I would never condone adding a last minute requirement 3 days before you go-live but this was an exception. We built a compartmentalized dashboard in a few easy steps utilizing CRM 2011’s web resource functionality. Here’s how:
- Our base html web resource is the actual landing page. When we put this together, the "Metro" look had just been released and we wanted to utilize that look and feel for the LaunchPad. It would be responsive, yet look very "simple". This landing page html would have our ten compartments for each button (the links have been removed from the code below for anonymity). Each button is circled in a different color.
- Creating a Prospect - This snippet opens a new customer window:
- Update Opportunities - This snippet opens up a list of the users opportunities in a new window:
- Open SAP GUI - This snippet opens a SAP GUI in a new window:
- The last step was to nest it on a dashboard. We created a new system dashboard with a web resource as the only component with the landing html page as the resource.
We ran the finished product by our core project team with stellar results barring a few tweaks. After making the last minute changes, the dashboard was ready to rock and that is exactly what it did. One other design note that I would like to emphasize is the importance of a compartmentalized approach due to the ever changing scenarios in the First Ten. For example, one of the original ten was the ability to quickly leave feedback or a functionality request (which we did within CRM) so we had a button that drove us to that form. After a few months, that button was used less frequently so we dropped in a new button, which would be used much more often (opened the newly developed sales pipeline report). With the compartmentalized approach, that can be a very simple task.
In short, we knocked it out of the park. User adoption was increased; the buy-in and purpose for our system as a whole were off the charts. The system perception changed from a business tool (which it still was) to our daily starting point (which was exactly our goal).
Now this is by no means a tell all story about user adoption or how to maximize your system love, there are plenty of other factors that should be planned and executed way before the 11th hour. Proper requirements gathering, system vision and strategy alignment, documenting your expected adoption, and road mapping a plan on how to get there (among other things) are far more critical to a project’s success. However, this was a nifty trick that may just move you from good to great with your implementation.
November 01, 2013
Most successful managers are on a continuous journey to find ways to improve their employees' efficiency. This goes for all aspects of business, especially those that use software.
I work best when I can see several applications and documents at the same time. In any given day, I have my email open, CRM, a Word document (sometimes multiple), an Excel spreadsheet, and a browser window. Over the years, I have realized that I work much more efficiently when I don't have to continuously toggle between (and resize) my windows and applications. Typically, I arrange my windows so I can see most/all of them at the same time to easily and seamlessly move between applications without them moving out of focus. The drawback is that sometimes I have to reduce the size of a window, which introduces additional scroll bars among other annoyances.
How can I see more without having a drawback? In the photography world, there's term is called field of view. A wide angle lens allows more content to be framed into the picture. For a software user, the equivalent is a larger display area. If cost effective and physically possible, I would have a couple of 30" monitors on my desk with 2560x1600 resolution on each (roughly 6 times the real estate of most users' display area). Think of how many applications I could see at the same time!
OK, let's back up. This is neither cost effective nor feasible for any company I've ever worked with. So what can be done to help? There's an alternative.
September 26, 2013
With my eyes focused on visual studio, I didn’t even notice her walk into my office. No knock, no “hello”, just an aura of frustration crashed into one of my pleather chairs. I looked up to say “hi” and was met with a silent cry for help. I’ve seen this look before and knew whatever it was, it wasn’t going to be easy.
Turns out a new customer was coming to us after a failed CRM implementation with another partner. Doing what I do, I see it every now and again. This customer, was a really good kid, but unfortunately got mixed up with the wrong crowd. It happens. You can’t blame the kid, but sometimes those shiny lights turn out to have a dim glow and user adoption turns into user betrayal.
My colleagues frustrations came from how the configuration was all over the place. Fields were scattered all over the place; some were used, some were hidden, but all of it was a mess. We didn’t have a requirements document to fall back on, but we did have one crazy idea to solve this mystery… CRM Data Detective!
September 11, 2013
Problem: My Outlook Inbox Can Be Filled To The Gills And Things Fall Through The Cracks
Sorry for mixing metaphors, but bear with me. Much like just about everyone, I get a lot of emails. And to complicate things I just didn’t want to let go, and I’d use my Outlook Inbox as a storage system. I always had this superstition that the time I’m going to need an email I’ve kept for no good reason is right after I delete it. But aside from that I needed a better way to track customer requests or things I need to follow up on. Also, I may be onsite in meetings all day with one customer capturing follow-ups for myself while getting requests from other customers during the time I’m onsite. I want to make sure things don’t fall through the cracks and that our customers are getting the service they need. Sound familiar? The good thing is that we use Microsoft CRM, and it has some simple and powerful tools to help with this problem. The main tool in my toolbox is the Case.
A Case can also be called a ticket or incident. It may be an issue, or it may be simply a request for information.
September 10, 2013
One thing people sometimes overlook with Fetch is the ability to do calculations. It’s easily overlooked given that you won’t find aggregate fetch calls using Advanced Find. Today though I want to show you why FetchXML aggregation is a hidden feature that you’ll be glad you’ve unleashed.
What I’m using Fetch Aggregation for…
I use Fetch aggregation all over the place. Whether it’s custom dashboards, portals, or displaying sub-entity rollup information on a form, Fetch aggregation is vital for a better user experience.
In one example, I built a custom search component that searches the company entity. Our client wanted a wizard-like approach to find various records that met their criteria. Although Advanced Find can do what they were asking for, the users needed something a little more user friendly and something with a lot more speed.
June 11, 2013
User adoption is an area we put a lot of focus into with each project we deliver to our clients. Ensuring user adoption can be accomplished in many different ways, as Brad Koontz highlighted in his blog post Tips for Putting the 'Use' in Microsoft Dynamics CRM User Adoption. Assisting user adoption with a well-designed CRM environment is a critical component of every implementation and driving user adoption is a factor in every step of our delivery. Once the system is up and running and users are interacting with CRM, how can we track how well the system is being adopted? Where can I find out how many Leads have been created and which users are creating these records? One solution is to track user adoption through the use of Dashboards and charts.
Your CRM environment will typically contain records that users will create and modify; Leads, Activities, Contacts, and Accounts for example. One approach to gauging user adoption would be to run a report or investigate a set of records to determine the usage of the CRM environment. These "pull" methods take time and are highly inefficient and not to mention the results are not easily shared or consumed. Dashboards with charts however leverage CRM to visually capture a snapshot of user interaction and enhance the data by utilizing fields such as date fields to highlight trends. Dashboards also are a great tool to "push" or surface user adoption instead of having to fetch the desired metric somewhere else in the system. In my next blog post I will detail the steps for creating a simple user adoption dashboard that can be implemented in CRM 2011.
If a more robust user adoption solution that surfaces metrics such as the number of interactions or "touches" users have made with records, Customer Effective has developed a solution that meets that requirement and displays user adoption at both a high and granular level.
To read more about the Managed Solution we have created check out Philip Li's blog post, Customer Effective’s User Adoption Managed Solution uncovers CRM User Behaviors.
May 13, 2013
The first tip I wanted to share, is the “cd()” command. This allows you to change your scope of the console. I wish I would have found this years ago! It may seem trivial, but when coding with IFRAMES it’s always frustrating to prepend your code with “frames.” all of the time.
Why? Oh, because you forgot you’re in the wrong scope. You could always hit [up], [home], and then prepend the line with “frames” – which is what I have always done in the past.
This is fine for a couple one liners but when you’re using Developer Tools to test/write various functions, it’s rather tedious. Instead, you can change the scope of the console by using the “cd(frames)” command.
Logging to the Console
I’ve seen a lot of developers riddle their code with alert boxes to track down issues. While this is a fine approach, I find writing to the console to be more effective. There are times when the alert command makes more sense, but let’s delve into the console for a moment.
With writing to the console, you have four different message types: “log”, “info”, “warn”, and “error”. Here’s how they appear on the console:
I like to sprinkle these into my code during development. They offer sanity checks and are great when you are debugging. Most of the time, these statements aren’t pushed to production; however, if they accidentally do make it into UAT or PROD – these commands are much safer than alert messages nagging users unnecessarily.
When do alert messages make sense?
Alert messages are useful for making sure the user is told something. I try to use alert messages sparingly since when given too many users generally ignore all of the alert messages.
Profiling – Making your Code Faster
First, have you ever wanted to quantify the execution of your code within CRM? Well the profiler allows you to do this. Let’s say hypothetically you want to disable all of the fields on the form. There are several ways of doing this:
But which function would be the fastest? When comparing functions that provide the same results, it’s best to call the function more than once. So let’s call each function 100 times to quantify the speed of each call.
Additionally, let’s use this function to re-establish the form as fully enabled to make sure everything is consistent.
Here’s an example of testing the various functions 100 times each:
After executing our code, switch to the Profiler tab. Choose the speed test example and change your view to the “Call tree”. Now we can see the cumulative time of each function.
A one second difference between our fastest and slowest function at 100 times equates to an average savings of about 10 milliseconds when only ran once. Not really drastic, but hopefully this shows you how granular you can get.
Generally you won’t need to call each function 100 times. In this scenario, we were trying to save as many milliseconds as possible and comparing extremely similar functions. Typically you’d use the profiler for speeding up a slow form. By adding the profiling you can identify which functions are the culprit of any inefficiencies. Additionally, you can see if functions are inexplicably called more often than they are supposed to.
May 08, 2013
Health Plan providers are working hard, not only to change the products they offer but the way they go to market. Because of Healthcare Reform, they will now have increased exposure to an entirely new market of consumers that previously didn’t exist. What is going to motivate and retain customers? Products? Price? Wellness Benefits? Coverage of Pre-Existing Conditions? Disease Management Programs?
April 11, 2013
Customer Relationship Management is a concept that has been around for over a decade. And the irony is it all boils down to common sense. It is all about building, nurturing and harnessing relationships. Take this simple concept. Say you lost touch with a good friend that you grew up with and randomly run into them at a coffee shop. What does that conversation sound like? Maybe initially a little awkward because you feel guilty that you have not made the effort to keep in touch. It
will probably start out with generic small talk and overall pleasantries such as, Where do you live? Do you have a family? What do you do?
You may leave that encounter and revisit the conversation in your head. You think to yourself, “Wow, we used to be the best of friends and now I barely know what is going on in their life”. It feels uncomfortable and distant so you make a commitment to stay in better touch. You pick up the phone and schedule lunch with them. Before you know it, you are telling stories, reminiscing and laughing about old times. You instantly realize everything you have in common and why you were drawn into a relationship to begin with.
How is the above situation different from any real world business scenario? Companies are made up of people, just like you and I. They have likes, dislikes, interests, hobbies, children, spouses, friends and
family. People don’t leave those things at the door when they go to work. People usually display their personal lives within their professional world by decorating their offices with photographs and mementos. After all, we spend more time at work than any where else so why not surround yourself with the things that make you happy and inspire you.
When engaging a new client, you are also interacting with a person. Initial conversations may seem high-level and artificial until you begin to establish common ground. Of course the primary objective is to ensure the company goals and strategies are aligned but the real payoff is connecting with the individual. However, this requires investment. You need to build a rapport but more importantly trust and credibility. This type of relationship is not built over night but rather by displaying consistent, genuine interest over time. You know that famous saying “It’s easier to keep a customer than to go out and find a new one?” Well the reality is people do business with people and more importantly with people they know and trust.
This may sound overly simple. If I make an effort to be observant, comment on a couple of photos on their office wall, my job becomes easy. It is much deeper than that. The real key to mastering the skill of building and maintaining relationships is being genuine. Be interested, listen, care
but most importantly be authentic. Noone likes a phony!
Microsoft Dynamics CRM is a tool to harness all of that knowledge around companies, people and the relationships you have with them. Your sales team may have a very strong relationship with your client but what about the rest of your organization? Relationship Management is a core competency
you want to spread throughout your organizational culture. The call center representative should provide the same level of personalized service as the VP of Sales. Clients should expect to receive a consistent experience no matter who they encounter.
Microsoft Dynamics CRM allows the ability to capture each and every customer interaction. This information is invaluable. It allows the company to be proactive vs. reactive. It allows them to be more targeted with segmentation by measuring Marketing activities. As a relationship evolves with clients the focus typically shifts to providing increased thought leadership. This includes inviting them to participate in the conversation with other experts through various channels (webinars, trade shows and conferences). Who attends which event provides additional insight for your organization to understand what relevant content and messaging is valuable and resonating in the marketplace.
Knowledge is power. Use the data from your CRM system to differentiate your business, to stay current and relevant. Most importantly remember this is an on-going investment so stay engaged, interested and top of mind. This will ensure your clients never question why they began doing
business with you in the first place.
March 27, 2013
I’m often asked about Outer joins and there seems to be a little bit of confusion about them. As you can see from prior posts, I’m a big fan of using FetchXML to access data from Microsoft CRM. So today, I wanted to go over the outer join feature and show you an example of where I recently used one.
Our First Example
To get started, let me show you where I recently used an outer join and why:
This is a widget on a dashboard I recently put together that shows the user’s associated contacts. The images can come from three different sources: LinkedIn, Facebook, or CRM. In my case, the CRM image is an attachment on the contact. (I know most of you are thinking that Edward Anderson is one good looking dude, but let’s focus on the Fetch)
Let’s take a look at the Outer Join:
Notice, at the end of line 20 you’ll see the “link-type” attribute. This specifies our outer join. If this was an inner join, then only contacts with a “Thumbnail” attachment would be returned. We want contacts with AND without a “Thumbnail” attachment which an outer join provides.
With CRM 2011, Outer Joins also provide aggregate counts. For example, let’s say you want a list of accounts with the number of opportunities associated to each account. This is quite easily done with an outer join.
In this example, we’re returning the number of opportunities associated to each account.
When I first was programming with CRM, I mainly used Query Expression. Once I started using Fetch, I’ve never looked back. If you aren’t familiar with Fetch, I strongly recommend learning it as it’s my preferred method for accessing data from CRM. Outer joins and aggregates are just the tip of the iceberg.
In our case, we had two pretty basic examples; however, I hope these conjured up some ideas for some of the problems you are trying to solve in your environment. I hope you enjoy!
January 22, 2013
We had an challenge at a client that I wanted to share so that this challenge, which could have been difficult to resolve, does not happen during a future rollout. The client spent a substantial amount of time creating scripts that would automatically install and configure the Outlook client on user’s machines. Since most users in their domain do not have sufficient rights to do the installation, this was found to be the most secure and consistent way to roll out the software. After significant testing, the processed was ironed out and the rollout was begun.
For the most part, things went as planned but on a couple dozen new computers, the installation would appear to go fine but when the user tried to Go Offline with the Outlook client, an error would appear as it tried to set up the offline database.
The short answer to how this was resolved is that we had to uninstall the Add-In, uninstall SQL Server Express and reinstall both products. The issue arose because when the SQL Server Express Addition was originally installed, the computer had one name (i.e. ComputerA) and then after the installation, was renamed (i.e. WorkstationA). It would be enough to say that it is critical that after the installation of the Add-In with offline mode enabled, the computer name cannot be changed without causing connectivity issues but I thought it important to give you the “Why” behind the “What”.
A little bit about SQL Server
SQL server, regardless of which edition, is always installed into 1 or more instances. If you choose the default installation, a Default Instance (unnamed) will be created that can be found by simply using the computer name in the connection string. You can also choose to install multiple named instances so that from one SQL server computer you can have multiple instances of SQL server, each with its own security and operating parameters. This is roughly synonymous to having multiple organization in an installation of Dynamics CRM.
When an instance of SQL server is installed, there is an entry in the sys.servers table. This is one of a number of tables that are used for the internal workings of MS SQL Server and in this case contains metadata about the instances that are a part of this server. If we create a SQL server computer called SQL1 and then two named instances called instance1 and instance2, the sys.servers table will contain records relating to SQL1\Instance1 and SQL1\Instance2.
These values are used when a client tries to connect to the named instances as a lookup for the internal connection parameters needed to access data in the given instance. If I change the name of the computer from SQL1 to SQL2, then when a client subsequently access this table to get to Instance1, the path of the server will still be SQL1\Instance1 in this metadata and the client will not be able to connect to the database.
Back to the Dynamics CRM Add-In
The offline mode of the CRM Add-In creates an instance called CRM in SQL Server Express that is installed when the Add-In is originally installed. This instance is entered in the sys.servers table as [machine-name-at-the-time-of-install]\CRM. As pointed out above, this data would no longer be accurate if we were to change the name of the computer.
Microsoft has published a work around for fixing this metadata for a full SQL server install and it could be implemented in the Express edition though changing this offline database is not supported. I have included the link here but think the best course of action is the following.
- Make it clear that after installing the Add-In, any changes to the naming of the computer will have adverse effects.
- If a computer is renamed, the Add-In and SQL Express Edition should be removed and reinstalled under the new computer name.
If you must, you can connect up to the MSCRM_MSDE.mdf file (Location in windows 7: Drive: \users\<Username>\local\Microsoft\MSCRM\data\) using a data connection in Visual Studio and enter the queries discussed in the link but I would only do this if there was data in the offline files that had to be synced back to CRM (i.e. the client went into offline mode, changed the computer name, and is now unable to sync those changes back to CRM) and I would make sure I had a current back-up of CRM.
November 15, 2012
Often there is a need to create a complex Process (workflow) and then shortly thereafter, recreate it with slightly different parameters. Dynamics CRM does not come with a "Save as" mechanism for workflows like it does for advanced finds and Views so it would seem you would have to go in and recreate the new workflow to match the one that already exists. There is a better (read 'easier') way!
Recently a customer had a need for the creation of multiple views (27 to be exact) and accompanying
workflows that could be run on demand to affect just the records in these views. The views were fairly easy to recreate as only one piece of data in the grid was changed and after creating one and doing a "Save As" for the other 26, the process was straight forward.
The workflows were not quite that easy to create but very simple to duplicate. Each workflow did
essentially the same thing (set a completion date on an entity after some validity checking) but each view represented a different date field on that entity. What we did was create a workflow for the first view and instead of saving with the ‘Activate As” value of "Process”, we saved it as a "Process Template”. We published this and as we created the other workflows, we simply chose to base them on this template.
All that needed to be done with this new workflow was to change the values being looked at in the
steps that determined if an update was required and also change the field that was being updated. After the 26 “copies” were made, we unpublished the original "template" workflow, set the “Active As” to “Process" resaved it and we had all 27 workflows done in a very short time.
As an additional benefit, all of the commenting of the workflow was identical so the end result was in a consistent form.
October 26, 2012
Why not use OData?
Before we get started though, I want mention that OData is great. The only reason I took the time to build out the initial fetch support was due to the complex querying that Fetch supports. Additionally, aggregates are only available with FetchXML. I still use OData but I often prefer FetchXML due to the flexibility and ease. I also prefer to use FetchXML with my C# code which offers several benefits including consistency when developing.
Secondly, I want to mention that when building your FetchXML you want to use a tool. An easy way is to use the Advanced Find and then click the Download Fetch XML button.
There are other tools available, like Stunnware Tools (which has moved to http://www.donaubauer.com/en/#!CrmInterface). Find what fits you.
The first thing I had to do was switch to using the DOMParser. Granted I’ve done a lot of development on non-IE browsers, but when it comes to XML, Internet Explorer has always done it very well (Gone are the days of XPath my friends).
Note: IE9 supports both parts of this IF clause but will use the DOMParser in this conditional statement.
This next bit of code highlights the slight nuances with the different parsers. The ActiveX approach would call the attribute by “baseName” and the value “text”; whereas, the DOMParser uses “localName” and “textContent” respectively.
This pretty much highlights the changes, but sadly took me a few hours to figure out. I went down the jQuery route successfully, but decided to keep these functions from requiring jQuery to be loaded. I also wasted some time on using RegEx which was for naught due to the XML namespace.
Downloading the Code
One thing I’ve noticed with my other blog posts has been issues related to getting the code downloaded. So I’ve placed everything out on GitHub and hopefully this will be more convenient for everyone.
Finally, I hope this helps you with your IE 10 future and your fancy new Surface (I wish I preordered one). Let me know your thoughts by either commenting at blog.customereffective.com or tweeting me (@paul_way). Coming 10/26…
September 10, 2012
Elevate Your Efficiency and Boost Sales by Automating your Referral Tracking Process with Microsoft CRM
Firms are always looking for ways to generate more referrals for their sales reps. Sales management and marketing executives, in particular, are always working hard to forge relationships with strategic partners and external referral sources to send them more leads. Additionally, companies are always trying to figure out more effective ways to encourage front-line, client-facing employees to identify possible leads for one of their sales colleagues to follow-up with and further qualify. For instance, in the Banking industry, Tellers and CSRs are often rewarded for uncovering a referral to pass on to a Relationship Banker, Investment Specialist, or Loan Officer. As an example, the Teller may learn in friendly conversation at the Teller window that one of their frequent visiting customers is about to buy a house. Thus, the Teller suggests and gets the customer to agree to receive a call from the local Mortgage Officer concerning mortgage rates and to submit a loan application. While many firms share the need to track internal referrals, they often struggle in keeping track of the referral entries and outcomes. This blog post will touch on some of the core challenges that companies have with referrals and how Microsoft Dynamics CRM can help automate the referral tracking and reporting process.
August 29, 2012
Microsoft Dynamics CRM in the Call Center: How to leverage Multiple Source Systems through CRM - Third in Series
Another common challenge in the Contact Center is Customer Service Representatives (CSR’s) having to access multiple systems to get the information they need to do their job. Whether it’s a back-end Billing or Claims system to access policy information, each additional click to navigate adds precious seconds to each customer interaction.
Customer Effective created an Agent Desktop Solution Framework as a streamlined way to search across multiple systems. This Dynamics CRM solution was designed to provide Customer Service Centers with a quick, intuitive, and a consistent user- interface for logging customer interactions via Phone Calls, Emails, Faxes, Letters, etc.
Key Concepts of the CE: Agent Desktop Solution
Multiple Data Sources: For different reasons, many enterprises will want to have their data stored in disparate systems, but accessed in CRM. CE’s Agent Desktop Framework creates a streamlined way to search across multiple systems (via web services) and bring the results back in a native CRM way.
Activity Management: CSRs will often work on a case using multiple communication channels. As they work through the cases, their activities are tracked in the left hand navigation tab. Each activity can have different notes and outcomes, but they will roll to the same case, account, or customer. Each time the CSR accesses an outside system, an activity record is created automatically.
Activity Threads: In the screenshot above, it displays how this solution can serve as a CSR email solution. Each correspondence is rolled into an Activity Thread, which is associated with a customer and a policy.Example: In a service center environment where each correspondence with customers will require actions to be taken by CSRs, these actions can be spread out over a series of touch points (email/phone call/fax/letter). With this requirement in mind the Customer Effective: Agent Desktop has incorporated custom code intended to rollup multiple related activities and the actions performed against them.
In the screenshot example the following functionality is highlighted.
- Section A: CRM can be pre-populated with the caller’s record, also known as screen-pop, with integration to the Phone System (For example: it can perform a database lookup in the background based on the Phone# calling in).
- Section B: Ability to populate “Activity Type” along with free form text to capture the issue in the “Activity Notes” section.
- Section C: This section can be integrated with the phone system to prepopulate the Insured or Agency search results.
- Section D: This is the system accessing data from multiple data sources. In this example it shows the system is “Billing”. Search is being performed on the policy number.
The more ways you leverage Microsoft Dynamics to display relevant content to your CSR’s, the more you will alleviate them having to log into multiple systems creating increased efficiencies across the organization.
August 14, 2012
The other day I received a question from an Executive Sponsor on one of my CRM projects. We recently had been reviewing and modeling the capabilities of Dashboards in Microsoft Dynamics CRM 2011. He was obviously impressed and so excited to use them that he asked me if it was possible to see CRM Dashboards immediately upon opening Microsoft Outlook as opposed to first seeing his Inbox. After researching this, I found out you can do this by changing your Outlook settings. I have shared the necessary instructions below for Outlook 2010.
1. While in Outlook, click File in the Upper left and then click Options.
2. Click Advanced and then click Browse.
3. Scroll down and open the folder for your CRM Outlook Client (ours is called “CEIPROD”), open Workplace, open My Work, select Dashboards, and hit OK.
4. Confirm Dashboards appears in the “Start Outlook in this folder” field and hit OK.
5. Close out of Outlook, open it back up and Dashboards should be the first thing you see. You can always change the default Dashboard for Users based on their unique role in the firm.
6. If you change your mind and want to change back to having your Inbox appear first when you start Outlook, just follow the above and select “Inbox” for Step 3.
To sum up, rather than coming into the office every morning and going through the monotony of seeing how many emails you have to clean up, sort through, and respond to, why not instead be greeted by a much more exciting performance tracking Dashboard, such as the one below?
After all, knowing how your individual, team, office, territory, and overall firm performance stacks up will dictate how you reply and manage your email communications and daily tasks going forward. Essentially, by checking out the Dashboards first thing in your Outlook, you will be more informed and in control of helping yourself, your peers, and your organization get better every day. The personalized quick snapshots will highlight where you need to focus your time and efforts so you can adjust on the fly to get things done faster and more effectively.
For more consultative CRM and strategic voice of the customer tips and tricks for your industry vertical, please visit www.customereffective.com. Lastly, to see and hear firsthand how Microsoft Dynamics CRM working directly within your familiar Outlook application can increase your productivity and performance, please contact firstname.lastname@example.org.
August 13, 2012
One of my recent blogs highlighted some ways in which Customer Effective has helped high-performing Retail Banks solve common business challenges concerning client retention. I wanted to expand upon that topic and provide two other situations in which Microsoft Dynamics CRM workflows can help preserve at-risk clients and enhance service levels in route to positioning your Bank as the primary financial services provider for your clients.
August 09, 2012
How do Contact Centers avoid the creation of duplicate data in their Microsoft CRM System, particularly when they have multiple Agents entering data and hundreds, or even thousands, of customers contacting them daily? The answer is to implement best practices and governance around
maintaining your data.
August 03, 2012
“Customer data integration (CDI) is receiving
increased attention as companies realize that
basic CRM alone has failed to deliver the single view they expected,
because of the numberof systems involved with real-time updates.” –Trillium
The core function of any Contact Center is to handle daily volume with a knowledgeable Agent in the most efficient time possible. With this comes a very common business challenge - managing disparate operational systems and keeping the data across those systems in sync.
A typical Contact Center includes technology such as:
- ERP/HR System (Employee Demographics/Reporting Structure)
- Phone/ACD System (Call Scripting/Routing)
- Chat Tool (Web Site: Click to Chat)
- Work Force Management Tool (Staff/Schedule Management)
- Quality Monitoring Software (Call Monitoring/ Recording)
- CRM (Sales/Service Management, Marketing Automation)
These systems are typically stand-alone and maintain different levels of key source system data required to manage the day-to-day operation. This makes it difficult for an Operational Manager to keep these systems aligned. The best way to accomplish this is to make changes once and leverage those updates in multiple places.
Consider the following:
- Determine which system will be the “Primary Source System”. This is typically the system containing the most detailed level of data and where you have administrative ownership. For example, in most cases this might be the Work Force Management Tool.
- Which data elements need to be shared across which downstream systems?
- Determine the frequency of the updates required. Is it once daily? 4 times daily? Hourly? This will determine the method by which you share data across systems - Real Time Integration vs. Data Import.
Recently when working with a HealthCare Microsoft Dynamics CRM Customer they were challenged with migrating from Contact Center Agents being “Generalists” to specific roles as a “Qualifier” or “Closer”. They had to completely revamp their business and technology workflow to provide consolidated relevant data capture for each role. In CRM 2011 you can assign profiles, leveraging security, to individuals and teams. This new business structure allowed Agents to concentrate on a very specific part of the Sales Process and eliminated the “one-size fits all” CRM screen capture. By eliminating the noise, Agents were able to better concentrate on their core responsibilities.
Another business requirement was to allow Agents to move dynamically between teams and skillsets while keeping their reporting hierarchy intact. The recommendation was to leverage the Work Force Management Tool for Schedules, Skillsets and Team Reporting Hierarchy and feed that data nightly, via data export, from the WFM Tool, to the CRM System. This ensured Agents RM data rolled up to the appropriate management hierarchy in Dashboards and Reporting.
June 28, 2012
Here are the pieces you need to build in order to replicate this functionality.
1.) Create a new lookup entity. We called it “Processors”. There are two main sections in this lookup entity. The first part we called “Field Lengths.” The following section called “Default Values” (See screenshots below) shows samples of the default values that to be set on the form.
Sample default values are listed below. Each processor lookup option could have had different default values. When creating these attributes we also made the attribute name the same but added “_def” to the attribute.
Click on Create Host Parameter
Select a Processor and see default fields get populated automatically based on the lookup entity.
Field lengths are now restricted based on the lookup entity.
If this is something your organization could leverage, feel free to reach out to Customer Effective at email@example.com
June 11, 2012
With CRM 4.0, you could set your page to “/_root/blank.aspx”. This page however, is no longer an option inside CRM 2011.
With CRM 2011, I like to use the loading screen “/_static/loading.htm”. Although this page contains an animated .gif and slightly more HTML than a blank page, the reason I prefer this page is because it is already cached by the browser and provides the user with a nice loading graphic.
June 04, 2012
In 4.0, if you wanted to delete a large number of records (in a supported manner), you could either select them in the view of 250 at a time and delete them page by page, or use a custom application or utility to leverage the bulk delete features that were built into CRM, but not visible through the user interface. CRM 2011 changed that for the better.
This morning I was importing a set of updates to CRM online – unfortunately I forgot to turn off a workflow rule that creates an attachment for every update. As a result, I had fifteen thousand unwanted/unnecessary notes. Rather than wasting the day deleting them 250 at a time, I used CRM 2011’s easy (and very fast) bulk delete feature. As a result the deletion job which I guessed would take all morning if I had tried to complete it manually, took only about 3 minutes using a bulk delete job. Nice, eh?
How to launch a Bulk Delete Job
The machinations of CRM Security is a huge topic – and there are a lot of moving parts needed in order to grant permission for a user to see/edit/delete a record in CRM.
One way in which those permissions are granted is through either Direct or Inherited shares. Direct Shares are when a user clicks on the ‘share’ button in the ribbon of a record and ‘shares’ it with another user or team. Inherited Shares are the result of a number of different configuration rules – such as the shares that cascade to an object based on the ownership of its parent record. (These can be very tricky to unwind – they are there to help smooth out the usability of CRM, but can sometimes lead to surprising results.)
Nerd Alert: This rest of this post is a deep-dive look under the covers at an internal CRM table/process that ‘normal’ people never need to worry about, but if you're interested in how CRM security works at a technical level knowledge of the POA table is a key part of that understanding.
Unmasking the PrincipalObjectAccess Table
May 29, 2012
In many source systems (such as salesforce.com), the data from multi-select pick-lists is stored in a memo field as a long list of semicolon delimitated values:
ID Value 1 Option1;Option2;Option4 2 Option1;Option3
When upgrading to Microsoft Dynamics CRM, you may choose to convert those individual fields into N:N (many to many) relationships, but first you’ll need to de-concatenate those values into multiple rows along with the id of the source record.
ID Value 1 Option1 1 Option2 1 Option4 2 Option1 2 Option3
The following example code demonstrates converting a semicolon delimited text field on the opportunity record into a list that is then matched to a related entity and any missing many-to-many relationships are identified for creation.
May 22, 2012
Frequently when importing / scrubbing data within CRM, identifying duplicates to remove or ‘flag’ may be needed. It’s helpful to have a query that will return all the duplicates in the database – but exclude a single ‘surviving’ record. (i.e. Return all-but-one of the duplicated records.)
This query is one of my go-to query patterns – I rarely, if ever, use it as-is, but will modify it to fit the particular entity / scenario I need to investigate.
The returned record set might used as the source for a Scribe Insight job to either ‘flag’ or inactivate or delete the duplicates depending on the situation. – Of course you’ll need to take into account the record’s relationship to other entities etc.