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.
In some scenarios we all have to refresh or navigate to specific entity view after a particular action performed. We can use a method called navigateTo() for this requirement. This method is available under new Namespace Navigate.
This is a common issue everyone would have faced once in a while that the customizations were not getting applied on the target instance through solution deployment. This is due to the direct changes on the component which is part of managed solution.
A component which is managed, gets an unmanaged layer as soon as you edit it directly on the instance. This unmanaged (active) layer lays on top of all other layers, which are coming from the different solutions containing this component. The layer on top is always winning, hence you can’t see the new changes coming from new deployments.
To avoid this issue, Microsoft introduced a new feature called “Solution Layers” where you can see all solutions where this component is part of it. You can see one “Active” solution on top of all solutions if you would have changed something directly on the instance. So, to get rid of the unmanaged customizations on managed component, you have to follow the below steps.
Select the component and Click on “Solution Layers” button (some times you can see this option under “More Actions” drop down menu).
2. On click of this button, it will show the list of all solutions which included selected component, as shown in the below screenshot.
3. Select the 3 dots (…) of “Active” solution row, select “Remove Active Custmoziations” option and confirm.
4. That’s all you have to do to remove all unmanaged customizations, after that the changes will be affected which are coming from new deployments.
I faced this situation so many times, the changes I have done for ex. in web resources in dev instance couldn’t transfer to UAT/Prod instance due to the “Active” solution layer. So with this new feature, you could remove this unwanted solution layer with a single button click.
Note: Microsoft not yet rolled out this feature for some components like Views and Fields. (Thanks Viswanath for highlighting this in your comment)
In one of my previous blog I mentioned how to use on demand flow within MS CRM. But we have some limitations with that approach
we can’t apply Enable rules on the Flow button as it is OOB context menu which generates dynamically based on the number of flows.
we can’t restrict a call to Flow to check the conditions whether Flow needs to run or not, I mean we can’t apply our conditions before a request goes to Flow.
Step 1: Create a Flow with HTTP Request with proper “Request Body JSON schema” (use sample payload option to generate the schema)
Step 2: Add “Create a new record (Dynamics)” action to create a new Contact in CRM.
Step 3: Add a Response action at the end to send the response back to CRM and Save the Flow .
Step 5: Create a ribbon button in CRM and call the below function from the ribbon button.
with this approach you can add all your validations in the java script and call the Flow once the conditions met, this way we can reduce lot of unnecessary calls to Flow. We can pass whole record context to Flow if needed. Hope it is interesting 🙂
Today I faced an issue to get the records in PowerApps from SQL database by applying date filters (From and To Dates). I spent so much time to retrieve the records by using the below command “ClearCollect(FilteredWorkReports,Filter(‘[SQL_Table_Name]’, ReportDate >= FromDate.SelectedDate && ReportDate <= ToDate.SelectedDate))“, but I didn’t get the expected result. The reason is simple “Direct date filters do not work for SQL Server” based on this link from MS. So, the solution for this issue is to create a calculated column for the date column in SQL table with Integer datatype. The formula for this calculated column is “YEAR([your_date_field]) * 10000 + MONTH([your_date_field]) * 100 + DAY([your_date_field])“. The data in your table will look like below with new field
Finally, I applied the date filter with new column like below which is working like a charm 🙂 “ClearCollect(FilteredWorkReports,Filter(‘[SQL_Table_Name]’,ReportDateAsInt >= Value(Text(FromDate.SelectedDate,”[$-en-US]yyyymmdd”)) && ReportDateAsInt <= Value(Text(ToDate.SelectedDate,”[$-en-US]yyyymmdd”))))“.
We all know that dialogs should be replaced with either BPF or Canvas App as dialogs were deprecated in Dynamics 365 CE, but what if we want a simple dialog which will accept some custom parameters and use those values to process the business logic? The best alternative for this scenario is MS Flows. We can create a Flow and call explicitly from “Flow” button on the CRM record. For this, we need to create a Flow with the trigger “Common Data Service –> When the record is selected”. Take an example to convert a lead to opportunity based on some parameters. The below is the Flow that I developed.
After the Flow creation, you can see this Flow from the Lead entity records like below.
The Flow will open the dialog like below with set of questions that we defined above once you click on “Qualify Lead” button.
Click on “Run Flow” button to execute the Flow
Your flow executed successfully and created an opportunity record.
With this, we can create simple dialogs very easily with out any extra efforts. Hope this will be useful for other developers.
Now it is very easy to get the parent records with at least one child record or with no child records from Advance Find like below
Before this feature got introduced, it was not possible to query the records from Advanced Find, you have to download the fetchxml and modify the filter type to “outer” and create a view or report with the modified fetchxml.