One of the ways that you can make Voice of the Customer your own is to brand it–change the theme colors and add images. However, the image files are a bit of a mystery–they are not CRM image web resources, and don’t follow the same logic for file sizing. And the available documentation does not clarify the size limits of VOC images.

So you get your snazzy logo and try to upload it, you may see the following error.

Based on my experiences with VOC, the file size is limited to PNG or JPG <100 KB. It doesn’t seem to matter the actual image size, but rather the size of the file cannot be more that 100KB.

If you upload your file and find it fails, reduce the resolution of your file to get it below 100KB and try again. Once you have a file that is below 100KB, refresh the image form and upload the new file.

If you are a Microsoft Paint jockey and don’t have the tools to reduce image size, you can use an online image compression site lite tinyPNG.com to compress the image without significantly degrading the image quality.

You try to install Voice of the Customer, but the installation fails repeatedly. What is going on?

You are doing it wrong.

Don’t just go to the Dynamics 365 instance picker, click solutions, and then install Voice of the Customer. First go to the Application tab of the instance picker, configure and approve the T&C’s for Voice of the Customer, then install the solution.

In Dynamics CRM 2015 or later we have cross entity search. This allows users to search across multiple entities and displays the results on a single screen. If you don’t find the record you want, you can hit the + button.

So when you are training users, should you train them to create new records from the view, from the quick create button, or the cross-entity search results page? I maintain that you should teach users to create from search results for two big reasons:

It forces them to search before creating, which protects against creating duplicate records.

When you click the + button on the search results, the new record form will prepend the words you searched for to the “name” field of the created record.

So if I search for CRM Tip of the Day and don’t get any results…

When I click the + button, the quick create form will already contain “CRM Tip of the Day” as the record name.

You have people in your company who are not Dynamics users, will never use the system, and have no need to own records. However, you want to track those relationships and include them as activity parties or have them synchronize to your Exchange/Outlook contacts. What are the options?

Disabled users: Add a Dynamics 365 license to the user in Office 365, assign a security role to the user that includes activity permissions, then remove the license from the user in Office 365. The user will be a disabled user in Dynamics 365, and can be added as an activity party, but users will not synchronize to Exchange/Outlook contacts.

Create contacts for them: Create a company record for your company and add contact records for internal contacts. This will make non-users available to be added as activity parties, but then you will be faced with a conundrum: if you have workflows or other processes that send notifications to internal people, you will want the process to apply to both users and non-users, and you will probably want all internal contacts to sync to Outlook. So you will want to add all internal people, including active users, as contacts.

Challenges of maintaining user and contact records for the same people

Most implementations faced with this requirement will elect to create internal contacts, and that can be a workable solution.

In the “old days” (sometime early 2011), having a contact record and a user record that had the same email address caused big problems–Dynamics would resolve the email address of meeting attendees to the first match, which meant that if you had the same email address on a contact and a user, sometimes it would track and resolve against the contact rather than the user, so the meeting would disappear from users’ calendars, causing people to miss meetings.

Now this is no longer an issue–if a meeting is tracked in Outlook with the email address of a user that matches multiple additional records, the meeting attendee is now matched to all records that match. If you pull up a tracked appointment in CRM and see the same name repeated multiple times, this is what is happening. While this may appear unsightly from within the CRM web interface, it does not appear that way to external attendees or inside of Outlook.

So the main technical reason to not have users and contacts with the same email address is no longer an issue; however, you may still find some minor inconveniences from maintaining internal contacts for active users.

Creating activities from within the Dynamics web client, if you type a name that matches both a user and a contact, the user creating the record in CRM may inadvertently select the contact when they should select the user. If you are an executive assistant following tip 905to create appointments for your boss, if you type in “George Doubinski” and select the contact George rather than the user George, the appointment will not synchronize to George’s Exchange/Outlook calendar.

If your company religiously updates AD information to reflect email, address, and phone number changes, you may find the contact record for the user is outdated. Given that the contact record is what synchronizes to Outlook, not user records, people who use their Outlook contacts on their phone as the company directory may find themselves calling old phone numbers. This happened to me one time when Scott Sewell changed his phone number. The new owner of his old number was quite unhappy when I kept calling him.

A possible solution for this is to tie the internal contacts for active users to their user record. Add a custom lookup to the user record on the contact, and add a lookup for contact to the user that connects to the user’s contact record. when the user record is updated, update the contact record to reflect the updated information. This approach can also automate initial creation of user contacts–on create of a user record, if the contact lookup is blank, create a new contact, populate the user lookup on the contact with a link to the user, and update the contact lookup field on the user with the newly created contact record.

How do you solve the user/contact challenge for people at your company? Let us know in the comments.

If you open Dynamics 365 Online 8.2 in Internet Explorer or Microsoft Edge, you may see a second tab with a blank page open automatically. The page will have a URL that starts with https://www.crmdynint.com/Auth/v2/. The browser will prompt you to close this tab.

The first time I saw this, it reminded me of back in CRM 4 when you launched CRM and it would open a second page, then ask you to close it.

Turns out this page is a traffic monitoring site that has something to do with Learning Path. To make this unwanted popup go away, opt out of Learning Path. Or use Chrome, which appears not to exhibit this behavior.

Today I tried to import some accounts from an Excel file in a new CRM instance using the Data Import Wizard, I need also to assign them to the right users using an “Owner” column inside the Excel containing the Full Name of the user.
The records were imported but they were assigned to me and not the the users indicated inside the “Owner” column, I did some test and I found that the problem was about the security roles: if a user inside CRM is active but has no security roles, the Data Import Wizard will not map it. After assigning a security role to the users I tried again the import and the “Owner” was set correctly.

Tîpp Jåär wouldn’t be my name if I didn’t do some extra testing. And what do you know, there are some other strings attached. The records will import successfully but the owner will not be set correctly if:

Target user does not have any security roles assigned

None of the user’s security roles has read permission on the target entity

One of my favorite classic features of Dynamics 365/CRM is the marketing list. While it is never on the top of anybody’s list of top features, and the legacy campaign features with which it is associated are long in the tooth, static marketing lists have some unique capabilities that give them utility outside of marketing contexts.

Data cleanup

Marketing lists are very useful for data cleanup, as they allow users to build lists of leads, accounts, or contacts. These lists can be built using one or more advanced finds, lookups, and ad-hoc records. So if you want to bulk delete unqualified leads that are over X months old, and also delete 500 newer junk leads, marketing lists are a great way to put together the list of records to be deleted before running your bulk delete job.

Once you build your marketing list, you can easily select companies, contacts, or leads related to the marketing list in Advanced Find and schedule the deletion with Dynamics bulk delete.

“Not-in” lists

Advanced find does a great job of returning records that meet a certain criteria, but doesn’t do so well telling you what is not there. For example, I can easily get companies with a related contact, but I can’t easily get companies that do NOT have a related contact. Note that FetchXML does allow left outer joins for “not-in” queries, but Advanced Find cannot build these queries. When you don’t have the time, budget, or developers sitting around to write a custom “not-in” query, marketing lists can be a poor man’s alternative.

Let’s consider the scenario where we want to get a list of companies that don’t have any related contacts:

Create a new marketing list. Select “Static” for list type and “Account” for target.

Use advanced find to add all active companies to the list.

Use advanced find to remove companies from the list where related contact contains data.

The resulting list is a list of companies that do not have any related contacts.

Got any other novel/alternate uses for Marketing Lists or any other standard application features? Send them to jar@crmtipoftheday.com.

In this video we look at Dynamics 365 Activity Feed feature. We walk through how to configure Auto Posting at an Entity level, as well as how to enable the specific rules. In addition we explore how to create a workflow to handle creating rules that are not available by default.

Give us your feedback, all of it: good, bad, and ugly, I’m sure we can take it. Suggest new topics either in comments or by sending your ideas to jar@crmtipoftheday.com.

Today is a good day if you care about development, and ALM in particular. I’ll be paraphrasing Matt “SDK Deity” Barbour in this post but the news is too big to spend time prettifying it.

What is it?

It’s a REST API that lets you create and manage Customer Engagement instances in your Office 365 tenant. It will allow Tenant Administrators to do Instance Create, Back up, Restore, Enabled and disabled Admin Mode and a number of other things.

Is it a big deal?

It sure is!

Why is it a big deal?

For years developers, administrators, and devops have been whining “why can’t you give me the same feature set you have on prem to create or delete or restore instances so I can build this into my Dev / ALM flows”. Well, now you can fully automate your dev / ALM processes.

Recently I installed AdBlock and Privacy Badger and found that I cannot effectively access Dynamics 365 / CRM without disabling these extensions. That seems to be logical: Dynamics makes a fair use of headers and cookies, both frown upon by privacy nutjobs and anti-ad advocates.

There are probably some other extensions that could trigger unusual behavior so, before blaming Dynamics 365 / CRM for not displaying your pages properly, try running your browser without any extensions or add-ons. The easiest way to do that is to use browser user profiles or incognito mode, both by default won’t load any extensions.