Microsoft CRM Tricks and Tips
May 13, 2013
IE Developer Tools – Three Quick Tips
Today’s post is for my fellow JavaScript junkies. If you aren’t using IE Developer Tools, then check out a few posts. I’d highly recommend checking out Microsoft’s pages to realize instant productivity gains. Seriously, it’s awesome.
Changing Scope
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[0].” all of the time.
Let me give you an example, you open an entity record with some new JavaScript in mind. The first thing you want to do is get your bearings and start testing various logic. You type in Xrm.Page.data.entity.getId() and get an immediate error…
Why? Oh, because you forgot you’re in the wrong scope. You could always hit [up], [home], and then prepend the line with “frames[0]” – 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[0])” command.
Now, I can test and execute code exactly how it will appear within my JavaScript web resources. Want to go back, just type “cd()” and you’re back to the main.aspx page.
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
People often ask me how I get my JavaScript code to execute so quickly. Just kidding, no one has ever asked me that. But if they did, I would credit three things: Dub-step, Douglas Crockford, and the profiler built into Developer Tools. I’m sure you’ve heard of JSLint and you’re headphones are currently blaring some dub-step. You might be unfamiliar with using the profile in your JavaScript though, and I’d like to demonstrate an example for you about the profiler.
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.
Summary
If you are developing JavaScript inside CRM 2011 and not using IE Developer Tools, I really hope this convinced you to check it out. If you’ve already been using Developer Tools, then I hope you learned something new. There are a ton of features within Developer Tools and I highly recommend taking advantage of them to improve your productivity and your code performance. I hope you enjoy!Posted by Paul Way on May 13, 2013 at 07:46 AM in CRM Best Practices, CRM Development, CRM Javascript, Dynamics CRM 2011, Microsoft CRM Tricks and Tips | Permalink | Comments (0) | TrackBack (0)
May 08, 2013
Health Plan Marketing in the Era of the Affordable Care Act with Dynamics CRM
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?
Continue reading "Health Plan Marketing in the Era of the Affordable Care Act with Dynamics CRM" »
Posted by Denise Henke on May 08, 2013 at 09:35 AM in CRM Best Practices, CRM Business Process, CRM Development, Dynamics CRM 2011, Microsoft CRM Implementation, Microsoft CRM Reporting, Microsoft CRM Tricks and Tips | Permalink | Comments (0) | TrackBack (0)
April 11, 2013
Customer Relationship Management (CRM): It’s really pretty simple!
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.
Posted by Denise Henke on April 11, 2013 at 07:24 AM in CRM Best Practices, CRM Business Process, Microsoft CRM Tricks and Tips, Social CRM | Permalink | Comments (0) | TrackBack (0)
March 27, 2013
Understanding FetchXML Outer Joins in Dynamics CRM
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.
Another Example
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.
In a case similar to this (slightly different fetch though), we displayed the results on an HTML web resource. We sorted ascendingly and then via JavaScript only showed accounts where the opportunity count was zero. We were displaying a widget to show all accounts without an opportunity.
Going Forward
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!
Posted by Paul Way on March 27, 2013 at 10:47 AM in CRM Development, Dynamics CRM 2011, Microsoft CRM Tricks and Tips, XRM | Permalink | Comments (0) | TrackBack (0)
January 22, 2013
CRM Outlook Client - Best Practice for Add-In and SQL Server
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.
Posted by Jerry Martin on January 22, 2013 at 08:50 AM in CRM Best Practices, Dynamics CRM 2011, Microsoft CRM for Outlook, Microsoft CRM Implementation, Microsoft CRM Tricks and Tips | Permalink | Comments (0) | TrackBack (0)
November 15, 2012
Workflow Process "Save As" functionality in Dynamics CRM 2011
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.
Posted by Jerry Martin on November 15, 2012 at 08:12 AM in CRM Best Practices, CRM Development, Dynamics CRM 2011, Microsoft CRM Customizations, Microsoft CRM Implementation, Microsoft CRM Online, Microsoft CRM Tricks and Tips, Microsoft CRM Workflow | Permalink | Comments (0) | TrackBack (0)
October 26, 2012
JavaScript Fetch XML–Supporting IE10 and Other Browsers
Last year we looked at building FetchXML support with JavaScript and these two blog posts were quite popular. Surprisingly a few people at CRMUG thanked me for these specific blog posts. At CRMUG we got into a great discussion about the indirect benefits of using FetchXML versus OData and that led to someone mentioning the lack of support with my JavaScript code on non-IE browsers. After coming back home to Greenville, I realized the code also fails to work in IE10. Coincidentally we had some users who switched to Windows 8 mention our internal Gantt chart had to be run in compatibility mode to support IE10.
So today we’re going to look into updating the JavaScript FetchXML code to support Chrome, Firefox, Safari and especially Internet Explorer 10.
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.
Getting Started
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.
https://github.com/paul-way/JCL
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…
Posted by Paul Way on October 26, 2012 at 01:00 PM in CRM Development, CRM Javascript, Dynamics CRM 2011, Microsoft CRM Tricks and Tips, XRM | Permalink | Comments (0) | TrackBack (0)
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.
Posted by Kevin Wessels on September 10, 2012 at 04:40 PM in CRM Best Practices, CRM Business Process, Dynamics CRM 2011, Microsoft CRM Tricks and Tips, Microsoft CRM Workflow | Permalink | Comments (0) | TrackBack (0)
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.
Posted by Denise Henke on August 29, 2012 at 10:33 AM in Activity Feeds, CRM Best Practices, CRM Development, Dynamics CRM 2011, Microsoft CRM Customizations, Microsoft CRM Tricks and Tips | Permalink | Comments (0) | TrackBack (0)
August 14, 2012
How To See Your CRM Performance Metrics in Outlook Before You Even Open Your Inbox
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 info@customereffective.com.
Posted by Kevin Wessels on August 14, 2012 at 02:20 PM in CRM Best Practices, Dynamics CRM 2011, Microsoft CRM for Outlook, Microsoft CRM Tricks and Tips | Permalink | Comments (0) | TrackBack (0)
August 13, 2012
Preserve At-Risk Clients and Become Their Primary Bank with Microsoft Dynamics CRM
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.
Posted by Kevin Wessels on August 13, 2012 at 02:00 PM in CRM Best Practices, CRM Business Process, Dynamics CRM 2011, Microsoft CRM Tricks and Tips, Microsoft CRM Workflow | Permalink | Comments (0) | TrackBack (0)
August 09, 2012
Microsoft Dynamics CRM in the Contact Center: Maintaining Data Quality – Second in Series
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.
Posted by Denise Henke on August 09, 2012 at 08:57 AM in CRM Best Practices, Dynamics CRM Community, Microsoft CRM Tricks and Tips | Permalink | Comments (1) | TrackBack (0)
August 03, 2012
Dynamics CRM in the Contact Center - Keeping Multiple Source System Data in Sync - First in Series
“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.
Posted by Denise Henke on August 03, 2012 at 01:27 PM in CRM Best Practices, CRM Business Process, Dynamics CRM 2011, Microsoft CRM Reporting, Microsoft CRM Tricks and Tips | Permalink | Comments (0) | TrackBack (0)
June 28, 2012
Using a Lookup Entity in CRM 2011 to handle default values and field lengths on a form
Business Problem:
A recent client of ours had extremely complex rules regarding creating new records. When the lookup was used the form needed to auto fill and limit the number of characters that can be entered. We could have accomplished this via JavaScript, but it soon became apparent that it would become unmanageable quickly. It would also be a management nightmare if the business rules changed tomorrow.
Solution:
Customer Effective, Inc. created a lookup entity that stored the lookup value, default values and length restrictions for fields. User selects a lookup value, the on-change event calls JavaScript which loops thru the lookup entity and set default values and control field lengths on the form.
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.
This section allows an administrator to limit the length of fields on a form. When creating the length fields in the lookup entity make the attribute names the same as the attribute on the other entity. This makes writing the JavaScript to loop thru the form and setting the attribute length easier.
(Field Lengths)
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.
(Default Values)
2.) Create an entity that will use the new lookup to store the actual selected values based on the lookup value selected. This example entity called “Host Parameters.” A user selects a processor and the form status are “create” state we loop up thru the lookup entity to set field lengths and set the default values using JavaScript.
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.
3.) Create a new JavaScript web resource that calls the lookup entity. The JavaScript needs to retrieve the field lengths and default values from selected lookup value. Use JavaScript to set the field lengths and default values on the form.
If this is something your organization could leverage, feel free to reach out to Customer Effective at info@customereffective.com
Posted by Sean Shilling on June 28, 2012 at 11:39 AM in CRM Business Process, Customer Effective Success Story, Microsoft CRM Customizations, Microsoft CRM Tricks and Tips | Permalink | Comments (0) | TrackBack (0)
June 11, 2012
Setting a Blank iFrame in CRM 2011
Occasionally there are times when you need to default an iFrame to a blank page. When this is the case, through JavaScript, you’ll then want to set the page to the desired URL.
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.
Posted by Paul Way on June 11, 2012 at 09:22 AM in CRM Best Practices, CRM Development, CRM Javascript, Dynamics CRM 2011, Microsoft CRM Customizations, Microsoft CRM Tricks and Tips | Permalink | Comments (3) | TrackBack (0)
June 04, 2012
Using the "Bulk Delete" feature in CRM 2011
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
Continue reading "Using the "Bulk Delete" feature in CRM 2011" »
Posted by Scott Sewell on June 04, 2012 at 02:03 PM in Microsoft CRM Tricks and Tips | Permalink | Comments (0) | TrackBack (0)
Unmasking CRM's PrincipalObjectAccess table - with a free Secret Decoder Ring!
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
Continue reading "Unmasking CRM's PrincipalObjectAccess table - with a free Secret Decoder Ring!" »
Posted by Scott Sewell on June 04, 2012 at 11:30 AM in Dynamics CRM 2011, Microsoft CRM Tricks and Tips, Microsoft CRM Troubleshooting | Permalink | Comments (0) | TrackBack (0)
May 29, 2012
Transform Multi-Select / Delimited fields into CRM Many-To-Many Relationships.
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
How To:
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.
Continue reading "Transform Multi-Select / Delimited fields into CRM Many-To-Many Relationships." »
Posted by Scott Sewell on May 29, 2012 at 09:56 AM in CRM Development, Microsoft CRM Tricks and Tips, Microsoft SQL Server, Scribe | Permalink | Comments (5) | TrackBack (0)
May 22, 2012
Return All-but-One Duplicate Records in CRM using SQL
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.
Continue reading "Return All-but-One Duplicate Records in CRM using SQL" »
Posted by Scott Sewell on May 22, 2012 at 01:00 PM in Microsoft CRM Tricks and Tips, Microsoft SQL Server, Scribe | Permalink | Comments (2) | TrackBack (0)
May 21, 2012
Asset Management: Making Connections in CRM 2011 with Dialogs
In my last blog, I talked about how Dialogs and Connections can be useful to Investment Bankers who use CRM. Another example of using Connections and Dialogs comes from the Asset Management arena, where it’s important to track, among other things, Consultants and Custodians for the customers of the Asset Management firm. The importance of these relationships, especially the Consultant, cannot be undersold. Using Connections is ideal in this case, but using Dialogs really simplifies the process of creating these Connections. Dialogs reduce the process of data entry to questions and answers that are very intuitive.
Continue reading "Asset Management: Making Connections in CRM 2011 with Dialogs" »
Posted by James Diamond on May 21, 2012 at 08:25 AM in CRM Best Practices, CRM Business Process, Microsoft CRM Customizations, Microsoft CRM Tricks and Tips | Permalink | Comments (0) | TrackBack (0)
May 10, 2012
Managing Access to Activate/Deactivate Ribbon Buttons in Microsoft CRM 2011
Background:
When an account or a contact isn’t currently engaged in business with your company, we might think of them as “inactive.” – CRM offers a button on the ribbon to ‘deactivate’ the record - but is that the right way to manage the status of a record? - Typically not. – The Active/Inactive status of CRM records really refers to the status of the ‘record’ rather than the contact or account the record refers to. Setting a customer to ‘inactive’ means that it cannot be edited, re-assigned, shared and it immediately gets excluded from most views and reports.
While an administrator may ultimately want to de-activate records if the customer goes out of business or is merged, everyday users shouldn’t be deactivating records on-the-fly. Far more useful is to add a customer “Classification” options to include a more descriptive set of data around why the customer is not an ‘active customer.’ – Once that information is captured, a data administrator can review and deactivate those records through a more methodical process.
Continue reading "Managing Access to Activate/Deactivate Ribbon Buttons in Microsoft CRM 2011" »
Posted by Scott Sewell on May 10, 2012 at 09:00 AM in CRM Best Practices, CRM Development, Dynamics CRM Community, Microsoft CRM Customizations, Microsoft CRM Implementation, Microsoft CRM Tricks and Tips | Permalink | Comments (4) | TrackBack (0)
May 08, 2012
Tips for better performing Microsoft Dynamics CRM SQL reports in SSRS
For Dynamics CRM On-Premise, Microsoft SSRS-based reports can be developed either as SQL or FetchXML based reports. SQL is the more common (old-school) style of report development and is probably more familiar with CRM report developers.
There are a handful of common mistakes or traps that anyone writing CRM reports can fall into - and we've all had to tackle 'fixing' a report that runs so heavy it dims the lights when you try to load it.
Fortunately, these best practice are pretty straightforward and will help you develop reports that run quickly and effortlessly on your server.
Let's get started.
Continue reading "Tips for better performing Microsoft Dynamics CRM SQL reports in SSRS" »
Posted by Scott Sewell on May 08, 2012 at 08:44 AM in CRM Best Practices, Microsoft CRM Reporting, Microsoft CRM Tricks and Tips | Permalink | Comments (1) | TrackBack (0)
April 04, 2012
Creating a Market Monitor Dashboard in Microsoft Dynamics CRM 2011 in 3 Easy Steps
Thanks to the ease of adding web pages and scripts to forms and dashboards in Microsoft Dynamics CRM 2011, I was recently able to quickly create a Market Monitor Dashboard. The goal was to be able to surface relevant data inside the tool I use all day (CRM), without having to flip to other systems. This is meant to be an interface, not an integration. This flexible tool is a popular feature with many of our customers who use any of our CRM for Capital Markets products, like CE: Asset Management, CE: Wealth Management, CE: Investment Banking, and CE: Private Equity. Below are the easy steps.
Posted by Brad Koontz on April 04, 2012 at 11:46 AM in Microsoft CRM Tricks and Tips | Permalink | Comments (0) | TrackBack (0)
March 26, 2012
Preparing a SQL Server Reporting Services (SSRS) Report to Use Filtering and Fetch XML in CRM 2011
Sooner or later, you will come across a more complicated report than can be handled in the report wizard or with custom views in CRM 2011. No problem, just write one in reporting services using Business Intelligence Developer Studio, right? But what if you want to use filtering in CRM to allow users the flexibility in selecting records? There are a few simple rules to follow in creating your report that will make publishing the report back to CRM painless, and very functional.
The first key is to make sure your development environment is configured to connect directly to CRM.
Posted by Michael Quattlebaum on March 26, 2012 at 11:22 AM in CRM Development, Dynamics CRM 2011, Microsoft CRM Reporting, Microsoft CRM Tricks and Tips | Permalink | Comments (0) | TrackBack (0)
February 27, 2012
Tip: Set IE to accept more connections to a site for better Microsoft CRM performance
If you are using Internet Explorer 7 or 8, and you occasionally get random error messages, such as script errors, this can be caused by IE limiting the number of simultaneous connections and downloads from the website.
To change this setting, see the following Microsoft knowledge base article:
Posted by Joel Lindstrom on February 27, 2012 at 03:00 PM in CRM Best Practices, Microsoft CRM Tricks and Tips | Permalink | Comments (2) | TrackBack (0)
February 23, 2012
Outlook 2010: Synchronization logs in Unread Messages folder Microsoft Dynamics CRM
If you use CRM in Outlook 2010, you may see messages like this show up in your “Unread Messages” folder:
First, don’t be alarmed—this is not an error—this is a change in how Outlook 2010 handles logging. However, if you are the kind of user that likes to manage e-mails in the unread messages folder, all of these synchronization log messages can get annoying. Here is how you can filter them out of the Unread Messages folder:
Posted by Joel Lindstrom on February 23, 2012 at 11:01 AM in Microsoft CRM for Outlook, Microsoft CRM Tricks and Tips, Outlook 2010 | Permalink | Comments (2) | TrackBack (0)
February 06, 2012
XRM 2011 JavaScript: Another 101 Lesson in Microsoft Dynamics CRM 2011
When you’re learning JavaScript, you’ll often come across the need to do something to every field on the form. When you do, it’s important to have efficient code to make such widespread changes so the user doesn’t have to wait for the JavaScript to finish. This lesson consists of several parts, some of which you’ll probably already know but hopefully there are some things in here for everyone.
Setting up our Environment
First thing first, open your CRM 2011 development environment and browse to an account form. Once the account form is open, hit F12 on your keyboard. A window should popup that looks like this:
Continue reading "XRM 2011 JavaScript: Another 101 Lesson in Microsoft Dynamics CRM 2011" »
Posted by Paul Way on February 06, 2012 at 08:25 AM in CRM Best Practices, CRM Development, CRM Javascript, Dynamics CRM 2011, Microsoft CRM Customizations, Microsoft CRM Tricks and Tips, XRM | Permalink | Comments (1) | TrackBack (0)
February 01, 2012
Using a No-Operation Plugin to Examine the IPluginExecutionContext in Microsoft Dynamics CRM
If you have ever had the privilege of developing a plugin for CRM 2011 you know that one of the most important aspects of plugin development is understanding what is available in the context that is passed to the plugin by CRM. After creating a few plugins you generally have a good idea of what is available for the common operations of CRM such as Create, Retrieve, Update, and Delete, but some of the more uncommon request to the OrganizationService may still be cloudy.
One of the methods that I use to understand what is available in the IPluginExecutionContext of a plugin is to use a no-operation plugin registered for the message that I will be handling that will trace the context out to the event log. This is a great way to see a list of all of the data contained in the context’s InputParameters, OutputParameters, SharedVariables, and images. Once you have a trace of what is available in the context of the plugin, the plugin development seems like a much less arduous task.
Posted by Nick Doriot on February 01, 2012 at 09:48 AM in CRM Development, Dynamics CRM 2011, Microsoft CRM Customizations, Microsoft CRM Tricks and Tips | Permalink | Comments (3) | TrackBack (0)
January 30, 2012
Removing Query Data Cached by the OrganizationServiceContext in Microsoft Dynamics CRM
One of the great set of tools provided by the CRM 2011 SDK are the SDK Extensions which provide the OrganizationServiceContext for accessing data in CRM. The OrganizationServiceContext provides a way to access CRM and provides features such as change management, exposing an IQueryable interface, implementing a LINQ query provider, and providing caching services. It is the caching services that I would like to take a look at today.
Posted by Nick Doriot on January 30, 2012 at 09:46 AM in CRM Development, Dynamics CRM 2011, Microsoft CRM Customizations, Microsoft CRM Tricks and Tips | Permalink | Comments (0) | TrackBack (0)
January 20, 2012
Retrieving Activity Feed Post with the OrganizationService
One of the new features introduced with Update Rollup 5 for CRM 2011 was the introduction of activity feeds to CRM. Activity Feeds give users the ability to monitor what is happening to various business entities. The out of the box functionality includes auto posts that include activities such as status changes in business entities, and manual posts that are created by users. Users also have the ability to post comments to posts that are created in an activity feed.
Recently, I had the need to retrieve activity feeds for various business entities in order to display a summary of interactions that had recently taken place for a set of accounts and its related entities. While the out of the box functionality allows a user to see the record wall for an individual record, it does not give the user the ability to see activity posts for multiple records on a single wall, hence the need to retrieve the posts using the OrganizationService.
Continue reading "Retrieving Activity Feed Post with the OrganizationService" »
Posted by Nick Doriot on January 20, 2012 at 08:00 AM in Activity Feeds, CRM Development, Dynamics CRM 2011, Microsoft CRM Tricks and Tips | Permalink | Comments (0) | TrackBack (0)
