Tip #717: Multi-line text on quick view forms

I will not use salesforce thumbnailQuick View forms are awesome, they are peekaboo utility for your records and can be used when summary information is required. There are some restrictions in place to make these forms fast and efficient.

One of the restrictions is that all formatting options for controls are taken away. As usually the case, baby was thrown out with the bathwater – it’s now impossible to set control to display multiple lines for, you know, multi-line text field. (And before you start pointing out that there are quick forms for cases and some other entities that display description fields on multiple lines: create a new quick form and try adding the description field to it. See? Those are system forms, created by CRM gods, after all).

David “CRM Baker” Crook to the rescue with some xml-twisting tip.

  1. Create new or edit an existing quick form.
  2. Add multi-line text field to the form as you normally would.
  3. Complete the form, publish.
  4. Create new solution, add the entity but select only that quick form (to keep xml shorter and things simpler).
  5. Export the solution as unmanaged.
  6. Extract customizations.xml from the zip file.
  7. Using your favorite xml editor, find the row and the cell elements that contain the control.
  8. Add rowspan attribute to the cell element.
  9. Add appropriate number of <row /> elements so that total number of rows is correct.
  10. If your <form> element has maxwidth attribute, ditch it.
  11. Save the file, add it to the solution zip file replacing the existing one.
  12. Import solution, publish.

Your XML should look like the following:

    <cell id="guid" showlabel="false" locklevel="0" 
        <label description="Description" 
               languagecode="1033" />
       <control disabled="false" id="description" 
          classid="guid" uniqueid="guid" 
          datafieldname="description" />
  <row />
  <row />
  <row />

I believe that this gymnastic is unsupported but like that ever stopped us before, right? Supported, people, supported, what Tanguy said.

VN:F [1.9.22_1171]
Rating: 5.0/5 (1 vote cast)
Tweet about this on TwitterShare on FacebookShare on Google+

Tip #716: Conditional values in Word templates

Flying pig thumbnailWord templates introduced in CRM Online and CRM 2016 are not the easiest contraptions to edit. One of the questions that popped up in a recent conversation was how to use conditional IF in the document generation.


To refer to the control values after the document has been generated, wrap content controls using bookmarks defined at the control container level.


CRM fields are defined as Content Controls and in theory we could have written some simple VBA using ContentControl object. Except that CRM does not play nice when generating the document and simply replaces all content controls with the record values.

The solution is to wrap the content controls using the bookmarks defined at the container level, i.e. cell, row, paragraph, etc. Then this bookmark can be used as a reference in a conditional expression of the IF field.

For example, to insert conditional text depending on the total invoice value:

  1. Extract the Invoice template that comes with the sample data and save it under a different name.
  2. Open the template, find total amount, select the entire table cell and click Insert > Bookmark.
  3. Type totalbookmark as a bookmark name, click Add.
    Insert bookmark
  4. Delete the words “Thank you for your business” and click Insert > Quick Part > Field.
  5. Select IF field and type the following field code:
    IF totalbookmark > 100 “Thank you for you business!” “Thanks for nothing!”
  6. Click OK. Hint: to see and edit field codes in the document, press Alt-F9.
  7. Save the file and upload to CRM as a new template.
  8. Create an invoice and generate the invoice document.
  9. Enable document for editing, press Ctrl-A to select the entire content and press F9 to refresh the field content
  10. Depending on the total value of the invoice, the document will say “Thank you for your business!” or “Thanks for nothing!”
    Conditional values in the template

It’s not a full automation that potentially could be improved with some VBA (I’m not 100% sure if it will work) but it’s a step in the right direction and a cheap way to add some pizazz to your documents.

VN:F [1.9.22_1171]
Rating: 5.0/5 (1 vote cast)
Tweet about this on TwitterShare on FacebookShare on Google+

Tip #715: Backup and restore CRM Online at will

Floppy backupDerek “clients call him ‘The Guru'” Hughes has been our follower for some time and today he returns the favor with some interest because his tip is hot.

We haven’t seen any announcements or heard anything in the official channels regarding backup and restore coming in any wave updates. Edit: official announcement and documentation are now available.

It took Derek and us by a very pleasant surprise when we could see the new option in CRM Online admin center:

Backup & restore CRM Online


Documentation is absent but here is what we’ve been able to establish so far after scooping our jaws off the floor:

  • You need to have a CRM administrator role in O365 to see the options
  • There is a daily system backup and it’s retained for three days
  • You can perform what seems to be an unlimited number of manual backups that will be retained for three days
  • Your manual backups will count against your storage limits
  • Restore can only be performed into a sandbox instance. If you need to restore production, you need to either set it to the sandbox mode, restore then flip it back to production
  • The instance remains available while being backed up but is unavailable during the restore

So far we can confirm that this option is available in US (crm), Europe (crm4), APAC (crm5) and Oceania (crm6) datacenters – most likely it’s been rolled out worldwide by now. Here is what the backup screen looks like:

CRM Online backup options

I have no idea what is implied by “Some backups may not be restorable”, let’s hope that all the manual ones can be.

VN:F [1.9.22_1171]
Rating: 5.0/5 (4 votes cast)
Tweet about this on TwitterShare on FacebookShare on Google+

Tip #714: Avoid solution bloat with the new solution component framework

Bloat fishAdam “you say gotcha, I say undocumented feature” Vero has the microphone.

The ability to add individual components to a Solution in 2016 is great, with or without the formal patch clone, update and rollup features.

You can add just the things that you are actually changing to deliver the requirements for a sprint, or a bug fix, or an individual user story and keep your solution lean and mean. This makes any unwanted interactions or overlap between solutions easier to predict and avoid, and makes it much clearer when looking at a Solution exactly what components it is changing.

That’s not the tip! (hopefully readers of CRM Tip of the Day already know most of that).

The tip is to avoid a gotcha that reduces the benefit of this new model. Say you create a new custom entity in your solution. Like most entities, to do useful things it needs relationships to other entities, often big things like Account, Contact, Opportunity, Case and so on. When you create a new relationship from an entity to any other entity that is not already in the solution, the system very “helpfully” adds the target entity (parent or child) to your solution just in case you want to work with it later. No prompt, no confirmation dialog box – it does not handle this like it does for offering to include dependency components. It just silently adds the whole of a huge OOB entity that you are not modifying in any way at all (or at least not yet), along with all of its subcomponents. As always, this might include untested or incomplete changes made by someone else which you then unwittingly ship with your Solution.

So how to stop this happening? Stay one step ahead. Before you create the relationship, add the target entity to your Solution and select only the components you will be modifying (if any). If you are creating a 1:N relationship, you might want one or more forms of the “child” entity so you can add the new lookup field to them, or even a Quick View form. Perhaps you need one or more views so you can add a column for this field too (especially lookup entities such as Country, Category…). If you are creating a N:1 relationship you might want the forms of the “parent” so you can add a sub-grid for the new child entity, or at least navigation pane links. But apart from the things that you are expecting to modify, don’t add anything now. If unsure, add nothing at all except the entity itself (not even metadata) – you can always add subcomponents later.
When you create your relationship, the system sees the target entity is already in the system and does nothing unhelpful to bloat your Solution.

If you have been caught out by this already, you can of course remove the entity from your Solution, then re-add it by hand and be more selective. In some cases you might not need to change anything about the target entity, in which you don’t need it in your Solution at all – subject to usual dependency checks of course, in other words you know it will already be in the target system you are deploying to.

VN:F [1.9.22_1171]
Rating: 5.0/5 (4 votes cast)
Tweet about this on TwitterShare on FacebookShare on Google+

Tip #713: Tipster guide to Dynamics CRM and Machine Learning – Part 1

I am robotIn the video, we look and some of the new Machine Learning options currently in Preview as part as Update 1 for 2016. In this first video we explore how to setup and configure the Text Analytics feature, and how to use it for Article Suggestions.

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.

Don’t forget to subscribe to http://youtube.com/crmtipoftheday.

VN:F [1.9.22_1171]
Rating: 5.0/5 (1 vote cast)
Tweet about this on TwitterShare on FacebookShare on Google+

Tip #712: How to add a spacer to CRM Business Process Flow

Tile spacersWith so many tips to share, Daryl “New MVP on the block” LaBar is on a fast track to become one of our resident tipsters. Here is another good one.

The CRM form designer has a spacer control allowing to achieve some finesse in the form layout. This feature is sorely missing in CRM Business Process Flows, but the good the news is that you can implement your own space with no coding required!

You can read the original illustrated guide, or this reader’s digest version:

  • Pick up an unused field. Created By (Delegate) is a good choice.
  • Add this field as a step in the Business Process Flow.
  • Add a business rule to unconditionally hide this field.
VN:F [1.9.22_1171]
Rating: 5.0/5 (2 votes cast)
Tweet about this on TwitterShare on FacebookShare on Google+

Tip #711: Record merge fails when assignee has insufficient privileges

Hand over the keysGuido “Trekkie not Star Wars fan” Preite is not the man to puzzle easily but even he was confused:

Someone faced this error before? “Assignee has insufficient privileges” when merging two contacts. The User is System Administrator and the same user is the owner of both records. No plugins running on the merge message. CRM Online DB

Assignee has insufficient privileges


If you receive “Assignee has insufficient privileges” error message when merging records make sure that no owner of the child records has administrative access mode set.

I want to know why

I’m not sure if it’s possible to display an error message in error but judging by “selected {0}”, this is exactly the case here.

One of the actions performed by the record merge is ever confusing reparenting. For example, in case of the account merge, system will move subordinate contacts from the account being merged to the master account. During that move two things need to happen: master account owner will need to get access to those child records (if they didn’t already have and reparenting rules state that they should) and access of the old child record owner needs to be preserved. It’s the second part that seems to generate the erroneous error message.

The system goes bananas if owner of a child record cannot be explicitly granted access to that record at all, as is the case when user’s access mode is set to Administrative. Interestingly, disabled user accounts do not cause the problem, it’s the administrative access mode that seems to throw the system off.

VN:F [1.9.22_1171]
Rating: 0.0/5 (0 votes cast)
Tweet about this on TwitterShare on FacebookShare on Google+

Tip #710: Entities not available on mobile revisited

In Tip 284 we provide a list of entities that don’t work on CRM Mobile apps. This has changed with the Spring 2016 update. Per the CRM Roadmap site, Quotes, Orders, and Invoices are all now available via mobile, but they don’t work offline.


The following is the updated list of entities not available for mobile:

  • Attachment
  • Audit
  • BusinessUnit
  • Calendar
  • Campaign
  • CampaignActivity
  • CampaignResponse
  • Contract
  • Equipment
  • Fax
  • Goal
  • Import
  • KbArticle
  • Letter
  • Marketing List
  • ListMember
  • Mailbox
  • Position
  • Post
  • PostComment
  • PostFollow
  • PostLike
  • PostRegarding
  • PostRole
  • Report
  • SalesLiterature
  • Service
  • ServiceAppointment
  • Site
  • Subject
  • Workflow


VN:F [1.9.22_1171]
Rating: 0.0/5 (0 votes cast)
Tweet about this on TwitterShare on FacebookShare on Google+

Tip #709: Rules For CRM Territory Design

The following are some rules of thumb when designing sales territory structure in Dynamics CRM:

  • You don’t have to use the “Territory” entity. There is nothing magical about the standard territory entity. It may fit your structure, and it may not. Replacing it with a custom territory entity in many situations can give you a better result.
  • Use security for legitimate security restrictions. It can be tempting to totally lock everybody down to only see what is in their territory. While this can be a good idea, frequently it leads to problems and is not conducive to collaboration and cross-selling. Remember the “R” in CRM stands for “relationship.” If there are legitimate reasons to restrict visibility of records, this is possible; however, if the filtering of records is for convenience purposes, there are other lightweight methods that can be used.
  • Automate it. If your territory assignment follows a set of rules, these can be automated so that when a new account is added, it is assigned to the correct territory automatically, without an administrator having to do anything. This can be driven by several methods, including workflows, plugins, and batch integration jobs.
  • Make it easy to administer. Over-engineered or overly complicated territory logic can sometimes break down over time. The leading reason for this is processes that are difficult to administer. If your CRM partner goes away or your CRM administrator gets hit by a bus, the territory logic should be easy to administer so that it is maintained over time.
  • Make it easy to update. I have seen many territory designs that are very cumbersome to change when a territory assignment changes. For example, if your territory is driven by postal code, instead of putting the territory on the account, create a table of zip code records, and associate the territory with the zip code. With this approach, changing the territory of accounts in a certain zip code only requires update of one record, rather than updating hundreds of account records.
VN:F [1.9.22_1171]
Rating: 0.0/5 (0 votes cast)
Tweet about this on TwitterShare on FacebookShare on Google+

Tip# 708: Tipster guide to Dynamics CRM Mobile Task Flows – (Preview)

Pokemon Go Task FlowToday we look at the Dynamics CRM Mobile Task Flow feature. This Preview feature was introduced as part of Spring Update 1. Derik walks you through how to enable, configure and consume the feature.

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.

Don’t forget to subscribe to http://youtube.com/crmtipoftheday.

VN:F [1.9.22_1171]
Rating: 5.0/5 (2 votes cast)
Tweet about this on TwitterShare on FacebookShare on Google+