Category Archives: Dynamics CRM
Sitemap changes are not moving to UAT ?
Use case : We were trying to deploy the solution from dev environment to UAT but Sitemap changes were not moving to UAT. Solution : after RND we noticed that App extension for that particular app were not present in the solution Then we tried to add app extension and it is working To add app extension Go to solution-> click on the component -> client extension and add extension for your app. Now Save and Publish. And try to deploy the solution. I hope this helps you while deployment of apps.
Share Story :
Resolve the dependency between multiple solutions in D365 Customer Engagement / CRM Solution using Solution Component Mover.
You have might question in your mind that why we need to move the components from one solution to another solution in D365 Customer Engagement So, let’s consider a scenario you and your team is working on D365 CRM customization and created the two solution — ‘ Solution A’ and ‘Solution B’. While customization development when you are moving the ‘Solution A’ on the Production instance but you are not able to move it. Because some of the missing components are present in the ‘Solution B’. Then you have decided to move the ‘Solution B’ first, but again while moving the ‘Solution B’ its failed because of some of the missing components present in ‘Solution A’. It means ‘Solution A’ and ‘Solution B’ are dependent on each other and you can’t move either of the solutions in the Production Environment or Target Environment. There are two solutions to the above problem Add the missing components in the one solution and move that solution to production. Merge the dependent solution into one solution using Solution Component Mover. Now, the First solution is time-consuming as well as effort making and developers need to track all the missing components and add them manually. But using Solution Component Mover, you can merge solutions in 10 to 15 min just by selecting the component from Source Solution and Target solution to which you need to move the components. So, let us see how to do it. Perquisites: XrmToolBox You can download the XrmToolBox from https://www.xrmtoolbox.com/ Steps to follow: Open the XrmToolBox and connect to your D365 CRM environment. Search for the Plugin “Solution Components Mover” Image: Search Solution Components Mover in XrmToolBox 3. Once the plugin will be load, click on load solution — it will load all the solutions present in the Environment. Image: Click on Load Solution After solutions are loaded you can see I have two solutions in my Environment “Solution A” and “Solution B” which have dependent components and one “Target Solution” on which I m going to copy the component so that “Target Solution” will become a master solution. Solution A Image: Solution A has Account entity and it’s subcomponents Solution B Image: Solution A has Case entity and it’s subcomponents Target Solution Image: Target Solution doesn’t have any entity or component. 4. Move the solution component by select the Source solution and Target Solution 5. Click on the Copy component, a popup will open where you can select the component type to move to the target solution. 6. Click on “Ok” and component from both solutions will be moved to Target Solution. You can see the following screenshot in which Target Solution has a component from “Solution A” and “Solution B”. You can see XrmToolBox Plugin how it helps to reduce your time and effort to which are required to move the component from solution to solution manually one by one.
Share Story :
Updating multiple CDS records from Grid using PowerApps
Introduction: In this blog, we will learn how to Update multiple records of CDS from the Grid. Use Case: We have a requirement where there is a Grid of CDS Data Source, on clicking the Save Icon on top of the Grid, it should Save every record which is selected through the checkbox which is there on every record of the Grid. Steps: 1. There is a Screen on which there is an Editable grid of Quote Product Entity. To Create an Editable Grid refer to the following link. https://www.cloudfronts.com/create-an-editable-grid-view-in-powerapps/ To add Lookup Fields in the Grid refer to the following link. https://www.cloudfronts.com/add-lookup-fields-in-an-editable-grid-using-powerapps/ 2. This is the grid with a checkbox. 3. To Save selected records, first create a Collection: OnSelect property of the Delete icon: Set SaveIcon.OnSelect = ClearCollect( <VariableName>, Filter( <GalleryName>.AllItems, <CheckBoxName>.Value = true ) ) For eg: SaveSelectedRecord.OnSelect= ClearCollect( SelectedQuoteProduct, Filter( GalleryQuoteProduct.AllItems, CheckboxQuoteProductGallery.Value = true ) ) 4. When we select the Save Icon, it will collect all the records where the Checkbox is selected. 5. To Save the records from the CDS, set the OnSelect property of the Save Icon to the following formula: OnSelect property of the Delete icon: Set SaveIcon.OnSelect = ForAll( <CollectionVariable>, Patch( ‘Gallery Data Source’, <GUID you want to delete> { <fieldName>: TextInput.Text, <fieldName>:ComboBoxName.Selected, <fieldName>:Value(CurrencyTextInput.Text) } ) ) For eg: SaveSelectedRecord.OnSelect=ForAll( SelectedQuoteProduct, Patch( [@’Quote Products’], LookUp( [@’Quote Products’], ‘Quote Product’ in SelectedQuoteProduct[@’Quote Product’] ), { ‘Product Code’: ProductCodeQPGallery.Text, ‘Product Name’: ProductNameQPGallery.Text, Quantity: Value(QuantityQPGallery.Text), ‘Sales Price’: Value(SoldPriceQPEditform.Text), ‘Discount Amount’: Value(DiscountAmountQPGallery.Text), Tax:Value(TaxQPEditForm.Text), ‘Extended Amount’: Value(ExtendedAmountQPGallery.Text) } ) ) 6. Combine the Whole formula in the OnSelect property of Save Icon : For eg: SaveSelectedRecord.OnSelect= ClearCollect( SelectedQuoteProduct, Filter( GalleryQuoteProduct.AllItems, CheckboxQuoteProductGallery.Value = true ) ) ForAll( SelectedQuoteProduct, Patch( [@’Quote Products’], LookUp( [@’Quote Products’], ‘Quote Product’ in SelectedQuoteProduct[@’Quote Product’] ), { ‘Product Code’: ProductCodeQPGallery.Text, ‘Product Name’: ProductNameQPGallery.Text, Quantity: Value(QuantityQPGallery.Text), ‘Sales Price’: Value(SoldPriceQPEditform.Text), ‘Discount Amount’: Value(DiscountAmountQPGallery.Text), Tax:Value(TaxQPEditForm.Text), ‘Extended Amount’: Value(ExtendedAmountQPGallery.Text) } ) ) Conclusion: Hope the above Blog helps you Save multiple records of CDS from the Grid.
Share Story :
How to Set Default value of Two Options on New form using PowerApps
Introduction: In this blog, we will learn how to set Default Value of Two Options on New Form. Use Case: We have a requirement where there is a Field(Data Field: Two Options) on the form, which should show “NO” as Default value. The Field on the Form is a Combo Box. Steps: 1. This is the form of Quote Product. We want to set Override Price as NO. 2. To set Default value of the field, click on the Combo Box. DefaultSelectedItems property: Set OverridePrices.DefaultSelectedItems = { Value: <Field Name>.No} For eg: OverridePricesComboBoxQPForm.DefaultSelectedItems = {Value: ‘Override Prices (Quote Products)’.No} Conclusion: Hope the above Blog helps you to set Default Value of Two Options on New Form.
Share Story :
Delete multiple CDS records from Grid using PowerApps.
Introduction: In this blog, we will learn how to Delete multiple records of CDS from the Grid. Use Case: We have a requirement where there is a Grid of CDS Data Source, on clicking the Delete Icon on top of the Grid, it should delete every record which is selected through the checkbox which is there on every record of the Grid. Solution: Steps to be followed: 1. There is a Screen on which there a Editable grid of Quote Product Entity. To Create an Editable Grid refer to the following link. https://www.cloudfronts.com/create-an-editable-grid-view-in-powerapps/ To add Lookup Fields in the Grid refer to the following link. https://www.cloudfronts.com/add-lookup-fields-in-an-editable-grid-using-powerapps/ 2. This is the grid with a checkbox. 3. To delete selected records, first create a Collection: OnSelect property of the Delete icon: Set DeleteIcon.OnSelect = ClearCollect(<VariableName>,Filter(<GalleryName>.AllItems,<CheckBoxName>.Value = true )) For eg: DeleteSelectedRecord.OnSelect= ClearCollect(SelectedQuoteProductDelete,Filter(GalleryQuoteProduct.AllItems,CheckboxQuoteProductGallery.Value = true)) 4. When we select the Delete Icon, it will collect all the records where the Checkbox is selected. 5. To delete the records from the CDS, set the OnSelect property of the Delete Icon to the following formula: OnSelect property of the Delete icon: Set DeleteIcon.OnSelect = ForAll(<CollectionVariable>,RemoveIf(‘Gallery Data Source’,<GUID you want to delete>)) For eg: DeleteSelectedRecord.OnSelect = ForAll(SelectedQuoteProductDelete,RemoveIf( [@’Quote Products’], ‘Quote Product’ in SelectedQuoteProductDelete[@’Quote Product’] )) 6. Combine the Whole formula in the Set OnSelect property of Set DeleteIcon : For eg: DeleteSelectedRecord.OnSelect = ClearCollect(SelectedQuoteProductDelete,Filter(GalleryQuoteProduct.AllItems,CheckboxQuoteProductGallery.Value = true)); ForAll(SelectedQuoteProductDelete,RemoveIf([@’Quote Products’],’Quote Product’ in SelectedQuoteProductDelete[@’Quote Product’]) ) Conclusion: Hope above Blog helps you delete multiple records of CDS from the Grid.
Share Story :
Hide certain Field of the form depending on Security Role of the User using PowerApps.
Introduction: In this blog, we will learn how to hide fields from the form based on the Security Role of the Logged in User. Use Case: We have a requirement where there are some Fields in the form, which should be hidden to the users who does not have the Security Role as Manager. Steps: 1. This is the form of Quote Product. We want to hide the Price Overriden field from the form to certain Users. 2. To hide the field, click on the DataCard. Visible property of the DataCard: Set Price Overridden_DataCard.Visible = If(LookUp([@’Security Roles’],Name = “Manager”,Role) in Concat(LookUp([@Users],’Full Name’ = User().FullName).’Security Roles(systemuserroles_association)’,Role & “;”),true,false) Conclusion: Hope the above Blog helps you to hide fields from the form based on the Security Role of the Logged in User.
Share Story :
Filter a Lookup Field on New Form Using PowerApps.
Introduction: In this blog, we will learn how to filter a Lookup Field on the New Form. Use Case: We have a requirement where there is a Lookup Field on the form, which should only show those values whose Status is Active. Steps: 1. This is the form of Quote Product. We want to filter the Existing Product field. 2. To filter the field, click on the Combo Box. Items property: Set ExistingProduct.Items = Filter(<Data Source>,Status = <Field Name>.Active) For eg: ExistingProductQPEditForm.Items = Filter([@Products],Status = ‘Status (Products)’.Active) Conclusion: Hope the above Blog helps you to filter a Lookup Field on the New Form.
Share Story :
Nested Filters in PowerApps.
Introduction: In this blog, we will learn how to use Nested filters in PowerApps. Use Case: We have a Gallery(GalleryQuoteLineDetail) where we need to put filter which equals Quote Product selected in another Gallery. Once we get those Quote Products, we need to filter the Gallery(GalleryQuoteLineDetail) based on ‘Transaction Type’ Field, which is a field on Quote Product. The ‘Transaction Type’ should be equal to “Project Contract”. Solution: Steps to be followed: 1. Below is the CDS Data Source, we want to filter. 2. To filter the Gallery Based on another Gallery, Use the below Formula: Items property of Gallery: Set: GalleryQuoteLineDetail.Items: Filter( ‘Data Source’,Condition) For eg: GalleryQuoteLineDetail.Items : Filter(‘Quote Line Detail’,’Quote Line’.’Quote Product’ = GalleryQuoteLine.Selected.’Quote Product’) 3. To filter the Gallery Based on “Transaction Type”, Transaction Type is of Option Set Data Type, Use the below Formula: Items property of Gallery: Set: GalleryQuoteLineDetail.Items : Filter( ‘Quote Line Detail’, ‘Transaction Type’ in “Project Contract” ) 4. To Combine both the Filters in a single Formula, use the first filter as ‘Data Source’ of the second filter: Following is the formula: Filter( Filter (‘Quote Line Detail’, ‘Quote Line’.’Quote Product’ = GalleryQuoteLine.Selected.’Quote Product’ ), ‘Transaction Type’ in “Project Contract” ) Conclusion: Hope this Blog helps you to combine multiple Filters into single Filter.
Share Story :
Schedule Serverless CRON Job to Pull data from REST APIs (Part – 1)
REST API is an Application Program Interface that uses HTTP request to GET, PUT, POST and DELETE data, it’s an architecture style approach to communicate with third party application. In order to integrate our module with third party applications or in order to pull data from third party application to our database for analysis purpose the REST APIs are useful. For the analysis purpose we can consume REST API with SSIS using third party connector, but the problem with this approach is that, it will be required On Premise server for package deployment and job schedule. The alternate approach is to use serverless CRON expression. Since, mid 2018 the serverless development methodology is ditching the traditional development. In this blog we are going to see how to consume REST API with Serverless CRON expression. Here, we are using Zoho People API for integrating HR modules data to Azure DB. With Zoho People API, you can extract employee’s data and form data in XML or JSON format to develop new applications or integrate with your existing business applications. Zoho People API is independent of programming languages which helps you to develop applications in any programming languages (reference). Implementation Authentication token generation In order to access Zoho People API, Zoho People authentication token is required. The token can be generated using Browser mode and API mode. For the API mode each request has Username or Email and Password needs to include in the POST body Another approach is to register your app with Zoho by going to zoho.com/developerconsole and Add Client ID, Once added it can be used to generate new access_token. We can check the response by use using POST request, Open any REST Client and send request by using any REST API method, here we are send request to get leave data and we are using VS Code REST Client. If the request is valid then the we can get response in following format containing the data requested. 3. As we are getting proper response, the next step is to create CRON expression (Serverless approach) to pull the data from REST API, here we are going to use App services on Azure to create Timer Trigger Function App. The CRON expression is a time-based job schedular. which has six field to define time precision in following format. {second} {minute} {hour} {day} {month} {day-of-week} Each field can have one of the following types of values: Type Example When triggered A specific value “0 5 * * * *” at hh:05:00 where hh is every hour (once an hour) All values (*) “0 * 5 * * *” at 5:mm:00 every day, where mm is every minute of the hour (60 times a day) A range (- operator) “5-7 * * * * *” at hh:mm:05, hh:mm:06, and hh:mm:07 where hh:mm is every minute of every hour (3 times a minute) A set of values (, operator) “5,8,10 * * * * *” at hh:mm:05, hh:mm:08, and hh:mm:10 where hh:mm is every minute of every hour (3 times a minute) An interval value (/ operator) “0 */5 * * * *” at hh:05:00, hh:10:00, hh:15:00, and so on through hh:55:00 where hh is every hour (12 times an hour) 4. The next step is to create function app, for development purpose we are going to use Visual Studio Community 2019/2017. In Visual Studio create a project by selecting File > New > Project Select Visual C# (here we are going to use C# for development you can choose Php, Python or F#) any of your choice. Under the Visual C# select the Azure Functions and click on Next The next step is select a new Azure Function Application, Select the Timer trigger function choose your Azure Function version (v1, v2 or v3). Select Authorization level as Anonymous as we don’t want to include API Key for the function and kept the other settings as it is. After clicking on Create button, it will create the Azure Function App Solution for us, the directory structure is as follow. The next step is to publish the function on Azure, it will deploy your function on IIS and Azure. That we will see in next part of this blog.
Share Story :
Schedule Serverless CRON Job to Pull data from REST APIs (Part – 2)
In this blog we’ll see how t publish the and deploy the Azure function on App service. With Continuing with the previous part of this blog Right Click on the solution and click on Publish, it will ask to select the proper subscription, resource group. Select the option relevant to you. Following are the Publishing option available for us. Publish on Azure App Service Azure Virtual Machines File system Local webserver (IIS) Note:- Make sure you have sign in with proper credential and cloud explorer is connected. Once we publish the function, we can check Azure function by going to the https://portal.azure.com/ then search for the Function App. We can see our function app in read only mode, since we have deployed it from visual studio environment. The next step is to create the development logic for the data pull from the Zoho People. Make sure to add all reference libraries required for the development, we can manage the NuGet package manager by going Right clicking on the solution and select manage NuGet package. Make sure to add all required reference to your script file. using System; using Microsoft.Azure.WebJobs; using Microsoft.Extensions.Logging; using Newtonsoft.Json; using System.Data.SqlClient; using System.Net.Http; using System.Net.Http.Headers; using System.Collections.Generic; using System.Linq; As our destination is Azure DB so, we need to create the environment variable to store ADO.NET connection string in settings.json file or by clicking on Azure App Service Settings Then click on Add Setting and then add the setting name like in following diagram we are creating setting for the Azure DB connection. Click on ok and provide the value for the setting. We can get azure connection string by going to the Azure Portal search the DB name and then click on the connection string and copy the ADO.NET connection string, replace the {your_password} with your server password. After adding the environment variable, we can check this in settings.json file The Next step is to implement the code logic and debug the code on local. That we’ll see in final part of this blog.
