Tip #627: Smart duplicate detection

DVD Rewinder

Woot-woot! Our video channel now has the official URL: https://www.youtube.com/CRMTipOfTheDay! (Hint: take a minute and subscribe). To celebrate this achievement, our video dude, Derik, has gone MIA. After 38 straight weeks of videos, can’t hold it against him. So today’s tip is not a video but something that has been on my todo list for […]

Tip #608: Generate documents in code

Generate document action in the workflow

CRM 2016 has the ability to generate documents using Word templates. For workflows there’s a custom action called SetWordTemplate which can be added via Add Step > Perform Action > SetWordTemplate. But what if you want to generate the document in a plugin, javascript or in external application so that the functionality can be used by custom […]

Tip #589: Programmatically Move Cross Entity Business Process Flow Stages in CRM 2016

It’s been a while since we’ve heard from Gayan “Not Daddy” Perera. As often the case with Gayan’s tips, this one is a nugget. Moving the stage of a cross entity business process flow programmatically can be achieved by using the NavigateToNextEntity request. Most of the parameters are self explanatory, the only tricky one is […]

Tip #569: Migrate knowledgebase articles to Interactive Service Hub like a boss

How to migrate KB article

If there is one bonus take away from the yesterday’s tip, it’s existing KB functionality will soon be deprecated so it is advisable to transition to new KB as soon as possible. So people started to ask, how to do that. tl;dr Long version Yes, some assembly is required. Good news, it’s not that difficult. […]

Tip #451: Locking field in business rule can be tricky

Business rule to lock a field

Empowering users in Dynamics CRM is great but one needs to be prepared to troubleshoot adventures of a power user. If you have a rule that locks the field when certain conditions are met, beware what happens when this field is editable. That’s right, the last edit will be lost. Why? because locking the field […]

Tip #368: Keep your early bound classes lean

The convenience of early bound classes often overshadows the side-effects of using those. It is, indeed, very easy to write: CrmSvcUtil.exe /url:https://myorg.api.crm.dynamics.com/XRMServices/2011/Organization.svc /out:GeneratedCode.cs /username:”myname@live.com” /password:”myp@ssword!” then add generated file to the project and use syntax-checked a.accountname = “Acme Inc” instead of a[“acountname”] = “Acme Inc” (see what I’ve done here to demonstrate the usefulness of […]

Tip #217: Bad Id, bad

Following my anal retentive attention to the tightness of LINQ code and SQL it generates, I decided to refactor an old piece of code that extracted identifiers of the accounts matching certain criteria. Being very smug with all the newly acquired knowledge, I quickly produced an equivalent of: To my horror, this code generated an […]

Tip #215: Computer says ‘no’

Well, this is embarrassing. Remember that flogging I unleashed on unscrupulous developers being disrespectful to LINQ, performance and humanity in general? I was basking in my own cleverness of possessing the knowledge of LINQ operators including magic Any: Yesterday I had a chance to use what I preached and this is what I got in […]

Tip #212: Getting a yes or no answer in LINQ

Say, you need to find out if your organization has any opportunities with the estimated value of more than a million dollars (that’s right, that’s how developers usually roll). No need to retrieve anything, just simple yes or no. There are many ways to accomplish the task, most of them, sadly, are as efficient as […]