Very happy new year to all of my blog readers. This is my first post of the year and it could not have started in a better way. I am delighted to announce the new “Multi-Select Picklist control” from XrmForYou.com tools library. Showing a picklist attribute as multi-select is a requirement we get every now […]
In my previous posts we had discussed about how we can connect Dynamics CRM with Power Bi and Power Query. But with the introduction of API in CRM 2016, there is slight change in the OData feed URL generated for CRM 2016.
Using the same process mentioned in older posts but making use of this new OData feed URL, we can achieve same results for CRM 2016 as well.
The url format is [Your Organization Root URL]/XRMServices/2011/OrganizationData.svc.
Till CRM 2011 we used to use Xrm.page.getControl(“grid”) to get a grid control available on form and perform any runtime activity like changing the view/query, etc. Also we were required to write the complete script on OnLoad even of form and add a timeout till the subgrid is loaded as subgrids are loaded asynchronously after the form is loaded. There was no way we can have a trigger on load of a subgrid till CRM 2015 Update 1. What we used to do is explained in older post here.
But with CRM 2015 update 1, we now have an option to execute scripts when data is loaded in subgrids. Because of which we are not required to have any timeout added in the script and iterate it till the data is loaded into subgrid.
With addition on GridControl.addOnLoad method, we can now add event handler for OnLoad event of subgrid which is more reliable than the form OnLoad event for form with a timeout. This event will get triggered whenever data is bound to a subgrid.
The steps to add this event is not similar to adding a form OnLoad event (from form customization popup), the way to add it is by invoking it using a code from other events (e.g. form OnLoad) by making use of GridControl.addOnLoad method. Similarly, use GridControl.removeOnLoad to remove event handlers.
With the launch of Microsoft Dynamics CRM 2016, out of many important features added one is Solution Segmentation and Patches.
With solution segmentation we can now export solutions with selected entity assets (fields, forms, views, etc.) rather than entire entities with all the assets.
This helps a lot as previously if we were required to deploy a single new view created for an entity, we were required to deploy and publish the complete entity. This used to end up deploying some under development depended components too. The feature is most importantly useful in applying patches.
This feature allows granular control of the solution package without changing any XML. This will make ALM and Deployments much smoother.
Also by making use of the API aspect, we can try to automate build and deployment process.
Supported entity assets that can be selected for a entity are:
- Relationships (1:N, N:1, N:N)
- Business Rules
- Hierarchy Settings
Follow TechNet articles for more information on Use segmented solutions and patches to simplify solution updates
Dynamics CRM 2016 release includes updates to all online services, including Microsoft Dynamics CRM 2016, Microsoft Dynamics CRM Online 2016, Microsoft Dynamics Marketing 2016, and Microsoft Social Engagement 2016. Below are some quick notes from the guide. Complete guide is available here.
- Microsoft Dynamics CRM is a major release that will be delivered to both online and on-premises customers.
- The online services – Microsoft Dynamics CRM Online 2016 Update, Microsoft Dynamics Marketing 2016 Update, and Microsoft Social Engagement 2016 Update – will be delivered as a customer driven update.
- Introducing capabilities like intelligent product suggestions (for up-sell / cross-sell) and recommended cases and knowledge to resolve customer service cases.
- Field service capabilities with the acquisition of FieldOne.
Adding SMS as a marketing channel to our multi-channel campaigns in MDM with features as:
- Support for outbound and inbound SMS marketing.
- Maintain a database of opt-in and opt-out preferences of your marketing contacts.
- Send outgoing promotional SMS messages to opt in contacts for SMS.
- Tracking performance of your SMS campaigns.
- Enriching the email editor with features to generate HTML in your emails interactively.
- CRM App for Outlook.
- Excel Integration: To help increase productivity, Microsoft is providing the ability for salespeople to conduct analysis in Excel, directly within Microsoft Dynamics CRM.
- OneDrive for Business
Document Generation: Building a beautiful document based on CRM data is now simplified with Document Generation.
- With one click users can easily generate a document from CRM using pre-defined Word and Excel templates.
- Authors can manage the pre-defined templates and using a wizard like flow build custom templates in Word or Excel.
- Document templates are role based by entity to ensure users have the proper content to meet their needs.
- Cortana Integration
Voice of the Customer: Dynamics CRM 2016 includes a new survey designer that to create and send out questionnaires to collect feedback from customers about your products or services.
- When a customer completes a survey, rules in Dynamics CRM can trigger follow-up actions that occur immediately.
- Multi-stream Dashboard
- Single-stream Dashboard
- Modern and intuitive UI design
- External Party Access: External Party Access is the foundation that allows external parties such as Employees, Customers and Partners to access CRM data with the right level of permissions.
Unified Service Desk
- Out of the box integration is now available with any third party systems such as Azure HDInsights.
Social Listening & Social Analytics
- In addition to Twitter, Facebook, Blogs (WordPress/Tumblr), Videos (YouTube) and News, you will now be able to search boards/forums and custom sources via RSS.
- Adding 14 additional languages: Arabic, Chinese, Danish, Dutch, Finnish, Greek, Hebrew, Japanese, Norwegian, Polish, Russian, Swedish, Thai and Turkish.
- Bulk Data Loader for CRM Online
- Next generation search
- Azure Machine Learning and insights integrated into the CRM user interface, removing the complexity of requiring data scientists or understanding ML models.
Note: This is all about UNSUPPORTED database level updates. These kind of updates are not recommended (unless you are left with no options).
Though any kind of database level updates are not recommended in CRM, there are scenarios where we are required to do so. I had one such requirement where I was required to perform a simple update (setting two options field value to Yes) for millions of records. Doing same using a supportive way (bulk update or bulk workflow execution) used to take days due to CRM service calls but same updates using SQL script was done in few hours.
I had auditing enabled for these records in CRM, but as this was unsupported db level update I was not expecting any help from audit history. What was expected form auditing was either of below:
- Change track as new update request in audit history. (If there is any kind of trigger return at db level to maintain auditing)
- No updates at all in audit history. (Assuming auditing are maintained by some kind of workflow/plugin that trigger at UI level)
Unfortunately, none of this happened and what happened was not at all audit friendly or expected. This is what happened:
The change made by SQL script was tracked at create event itself in audit history. But only the field value change was tracked and not the change date/time. The change date/time was still showing when the record was created.
Though these kind of changes are not recommended, but I still feel that in some cases these are required and this behavior of auditing will affect the consistency. I feel that things should be either completely baked or not baked at all than having them half baked. But again this is only what I feel. J
I created a Contact record on 7/6/2015 at 11:52 AM with ‘First R~~~~~ Created’ set to ‘No’. Audit history shows something like below.
Now on 7/6/2015 at 12:00 Noon, I update the value for ‘First R~~~~~ created’ to ‘Yes’ using a database level update script. Ideally there should have been a new entry made in audit log to track this change and there should be no change made to existing audit history records. But CRM updates the changed value in create event itself without even tracking the change time.
Hope this helps and thanks if you have come all the way down here reading the article.
I have an OOB workflow process developed some time back and activated. Now when I try to open the process, I get generic CRM error (below image). Also the process status is changed to “Draft” automatically. There were no updates made to the process.
I have seen these issues frequently especially when working with Child Workflow Processes where I have a child workflow called from a Master workflow. If you have a Master workflow calling a child workflow and for some reason the child workflow is activated as “Process Template”, then user gets this error when they try to open the master workflow.
CRM throws generic exception and its status is changed to Draft if it linked/related to a “Process Template” instead of “Process”.
Other common issue faced while working with workflow process is “Invalid Expression” error in “Condition Expression” step. This occurs if the field used in condition expression is either deleted from system or if Value is changed. Once you fix the field/value issue, all conditions in the process are automatically fixed.
We all know that whenever we create an entity in CRM, CRM creates few fields by default. Some of these like Owner, Owning Business Unit, Created On, Modified On, etc. are used extensively while working with Dynamics CRM. But there are some fields that we use very rarely or even never; thus we tend to forget about them. But some of these fields are really important and can save a lot custom work, it’s just that we should be aware of them.
Recently there was a question on Dynamics Community regarding use of same fields which inspired me to search for them and have it documented. Few fields can be understood from their name but some fields don’t even have proper description in CRM. For such fields, below table can help. Links against the fields has more explanation and scenarios where these can be used.
|CreatedBy||User who created the record.|
|CreatedOn||Date and time when the record was created.|
|CreatedOnBehalfBy||To create records on behalf of another user.
Used for impersonation in CRM 2011
|ExchangeRate||When I create a record, such as an opportunity,
and use a non-base currency, such as GBP in this
hypothetical scenario, this is what happens:
Afterwards, when the dollar makes that incredible comeback,
|ImportSequenceNumber||The import sequence number is a whole number field. The range can be customized if needed.
The basic idea behind this field is to store the sequence number (ID) of the source record during
data import to CRM. If this field is mapped during migration package/script design,
it provides a one-to-one link between source row and destination CRM record.
|ModifiedBy||User who modified the record.|
|ModifiedOn||Date and time when the record was modified.|
|ModifiedOnBehalfBy||To create records on behalf of another user. Used for impersonation in CRM 2011|
|OverriddenCreatedOn||Date and time that the record was migrated.
|TimeZoneRuleVersionNumber||The definition of a recurrence pattern of how local time is converted to/from Universal Coordinated Time (UTC). This includes information about Daylight Savings Time (DST) versus Standard Time. Time zone rules can change over time, thus a time zone can have multiple rules from a historic point of view, but can have only one rule that is current and in effect.
|TransactionCurrencyId||Currency associated with the entity.|
|UTCConversionTimeZoneCode||Time zone code that was in use when the record was created.|
|VersionNumber||This column is used mainly for concurrency support. The VERSIONNUMBER field is a unique value that gets incremented as records are updated – it can be very useful.|
You can reduce the complexity involved with data integration scenarios by using the UpsertRequest message. When loading data into Microsoft Dynamics CRM from an external system, for example in a bulk data integration scenario, you may not know if a record already exists in CRM. In such cases you will not know if you should call an UpdateRequest or a CreateRequestoperation. This results in your querying for the record first to determine if it exists before performing the appropriate operation. You can now reduce this complexity and load data into CRM much more efficiently using the new UpsertRequest (Update or Insert) message. This topic discusses how to use UpsertRequest and the process that unfolds when an UpsertRequest is received.
For Microsoft Dynamics CRM Online organizations, this feature is available only if your organization has updated to Dynamics CRM Online 2015 Update 1. This feature is not available for Dynamics CRM (on-premises).
**This topic is pre-release documentation and is subject to change in future releases.