If you have ever worked in Dynamics 365 implementation then it is almost certain that you must have played around with ribbons. And more often than not you must have faced scenario where you have multiple enable and display rules on the form and not sure why the ribbon button is showing up on the form when it is supposed not to show up or vice versa.
And what we do to resolve it. Well, we play around with the ribbon customizations which takes much more time than other customizations in Dynamics 365. And if it is some custom rule, we would attach debuggers to our custom code and debug and find what is going wrong.
What if I tell you that Microsoft just released something which shall help you identify which of your ribbon rule is evaluating to what in a matter of few mins so that you can…
In this post I am going to explain how did I solved the performance issue while migrating activities using SSIS packages. My approach to migrate the data is, export the CRM data to Staging DB by using “Data Export” services and then to CRM by using SSIS packages. We all know that we have to migrate the party list (from,to,cc,bcc etc.,) data as part of activities migration and we need to write either SQL functions / script component to migrate party list data. I opted for SQL functions and I used those functions in SQL view. For ex, in email view I have to call 4 functions for each record to transform the data in party list fields (from, to, cc, bcc). So it leads to huge performance issue while fetching the data from staging table.
After a bit of research, I realised that I don’t have index for my intermediate tables. So I immediately created the following indexes.
Index for “activityid” and “participationtype” fields on “activityparty” table
Index for “activityid” on “email” table
and here is my SQL Function
CREATE function [dbo].[GetPartyListForEmail] (@activityid uniqueidentifier, @partyType int)
DECLARE @partyList nvarchar(max);
DECLARE @partyid as uniqueidentifier;
DECLARE @logicalname as nvarchar(100);
DECLARE @getPartyList nvarchar(max);
DECLARE db_cursor CURSOR FOR SELECT ap.PartyId,ap.partyid_entitytype
FROM email em
LEFT JOIN activityparty ap ON ap.ActivityId = em.ActivityId
WHERE ap.ParticipationTypeMask = @partyType AND em.ActivityId = @activityid;
FETCH NEXT FROM db_cursor INTO @partyid, @logicalname
WHILE @@FETCH_STATUS = 0
IF @logicalname = 'systemuser'
SET @partyid = (SELECT TargetUserId FROM mapping_systemuser WHERE SourceUserId = @partyid)
IF @partyid IS NOT NULL
SET @partyList = Concat(@partyList, @logicalname);
SET @partyList = Concat(@partyList, ':');
SET @partyList = Concat(@partyList, @partyid);
SET @partyList = Concat(@partyList, ';');
FETCH NEXT FROM db_cursor INTO @partyid, @logicalname
IF (LEN(@partyList)) > 0
SET @partyList= left (@partyList, len(@partyList)-1)
After adding the indexes, I experienced huge improvement and processed 230k records in 2 hours.
I used “ReviseQuoteRequest” SDK method in one of the plugin to revise the quote. When you revise a quote from UI, first it will close the existing quote and then create a revised version of this quote. So I expected that “ReviseQuoteRequest” also do the same, but I got the “The quote cannot be revised because it is not in closed state” error when I am using the SDK method. After a bit of research, I understood that we have to Close the quote before revise it. So I closed the quote by using “CloseQuoteRequest” and then “ReviseQuoteRequest” which solved my issue. But my suggestion that SDK method should handle the close quote request also internally. Please let me know your thoughts on it.
I am using KingswaySoft adapter to migrate the data between MS CRM instances. I am using WebAPI endpoint in the connection string due to the fact that SOAP endpoint is deprecated. But I encountered an issue while writing the data into custom lookup fields and the package is failing with the below error.
An undeclared property ‘aw_accountid’ which only has property annotations in the payload but no property value was found in the payload. In OData, only declared navigation properties and declared named streams can be represented as properties without values.
KingswaySoft adapter making WebAPI calls to create records in MS CRM since I selected WepAPI endpoint in my connection string. But with WebAPI calls, we have to pass entity schema name also to migrate the lookup data and KingswaySoft adapter has no option to pass this data.
Unfortunately, there is no solution at the moment. I contacted KingswaySoft support team and this is the response I got it from them.
As you have already seen, the issue that you have experienced is a limitation on WebAPI, and from the cases we have seen it mainly happens to custom fields. This limitation is documented in our software. We recognize this is a blocking issue, so we recommend to not use WebAPI for the time being until the issue is addressed by Microsoft – we did highlight a number of other issues with WebAPI in our software tooltip in the connection manager. As of now, SOAP is still available and is highly reliable than WebAPI.
So, I solved this issue by changing the endpoint to SOAP in the connection string. Hope Microsoft is working on this issue and will solve asap.
It’s always a customer requirement to see as much as information possible with out too much scrolling on the form. Now it is possible with Reference Panels, it’s basically concept of tabs inside a tab. With the reference panels, you can place multiple sub grids or quick view forms inside a tab. Let’s see how to do this.
Open a Form Designer and then Insert tab
Insert One Column tab on the Form and name it as “Reference Panels”
Click on “Section” and select “Reference Panel”
It will insert a new Section in the tab.
Add your sub grids or quick view forms in this section. I added 2 sub grids and 1 quick view form.
Save and Publish
This is how it would look like after Publish. Select the buttons in the right hand side to change between the sub grid and quick view forms.
Hope it will help to add plenty of information as per customer need.
Recently we had a problem with Queue view in model driven app. One of my colleague created a model driven app where Queue entity is also part of the app but we identified the Queue view is loading differently compare to standard CRM application.
Queue View in Standard CRM
Queue view in Model Driven App
In Model Drive App, there is no chance to look at Queue items when ever you click on Queue menu item like standard CRM. You have to open the Queue to access Queue items and there are no filters available to filter Queue items.
After a bit of research, I found the view that is loading in Standard CRM is “Queue Items” and not the “Queue”. I opened the site map designer from XrmToolBox and verified the entity that is referring in Queue menu item. The below is the screenshot from Sitemap designer
After changing the entity from Queue to Queue Item in model driven app designer, everything loaded properly.
Sometimes we need to perform set of operations as a transaction which means if one operation fails in a set of operations, we have to roll back all the operations in that transaction. For example, in your Flow you are creating a record followed by update record, it is necessary that both of these operations should complete successfully otherwise you should not run any of them. Now, you can do such things using Changeset control of MS Flow.
As of now, you can perform Create, Update and Delete operations only (CDS) in Changeset request.
Note: Common Data Service(Current Environment) is visible only when you create a Flow inside a solution.
In one of my previous post, I explained how to use navigateTo() function to navigate to entity view. But with this function, we can do lot more like navigate to dashboards and open modal popups (html web resources) which is most awaiting feature since long back. So, finally we can open a html web resource from a ribbon button click with OOB functions.