Category Archives: D365 General
Test Automation on MS Dynamics CRM using TypeScript Library
Nowadays, Test Automation is the most important requirement for any company to check Quality assurance of their product or software. There are very few tools available for Test Automation of MS Dynamics CRM. In this blog, we are going to see how we can do Test Automation using TypeScript Library (D365-UI-Test). It is the opensource library you can edit as per requirement and if any issue is present in the repo you can create an issue on Github Repo. Florian Krönert will resolve the issue as soon as possible. GitHub Repo Link: https://github.com/digitalFlow/D365-UI-Test Setup and Installation: We will use Visual Studio Code because it is a lightweight Code Editor with integrated Git support. And we will require git to clone directory, and we can do operation directly from the VS Code editor itself. Installation Process: First, we will be required D365-UI-Test Source Files So, we need to clone that Repo from GitHub remote GitHub Repo to Local Machine in your working project directory. To open Terminal inside the VS Code use the keyboard shortcut Ctrl + ` In terminal run following git command to clone the directory git clone https://github.com/DigitalFlow/D365-UI-Test.git Now after cloning the repo, we need to install the required Node Packages that are required to run the Project. To Install the required Node Packages, navigate in the project directory in the VS Code and run the following command. npm install “npm install” command will install the required Node Packages with a specific version which will be defined in the “package.json” file. After the installation of all required packages. Now, we can see the sample test cases written in the “TypeScript” in “spec” Folder. To write your own test cases we need to add our test cases and run the Project. Following is the Folder structure of the D365-UI-TEST Project you will get after setup: In the above screenshot, you will able to see the “spec” folder, we can add our own Test Cases but there are some sample test cases available for the UCI “xrm-uci-ui-test.spec.ts” which is written in TypeScript. Now, we must add the settings.txt file in the folder structure so that we can pass the CRM Login Credential to the Test Case File. Or else you can directory pass credential in the Test Case itself. After Adding the setting file, we need to give the relative or absolute path of the Setting file as follows: Following is a test case to login to CRM instance and created the Account Record: To the Run the Open the Integrated Terminal to Visual Studio Code. OR Press Ctrl + ` And Run the following command: npm run test It will run all the tests and show the result as to which test as passed and failed. If the test is failed, then it will show the error of why the test has failed. Once the test is run from the terminal it will open the chromium-browser and start the test. You can see the Documentation of the Library in GitHub or in following mentioned link: https://digitalflow.github.io/D365-UI-Test/
Share Story :
Trigger Power Automate on Condition
Introduction This blog explains how we can trigger Power Automate based on the required condition. Suppose you have a requirement where you want your flow should get trigger based on some condition then you can check condition on “Trigger” itself rather than adding a new action to check condition. Use Case: Trigger flow when Lead is created and Lead Source Type is “Trade Show” Trigger flow when Lead is created and Flag is “Yes”. Trigger Flow when Lead is created, Lead Source Type is “Trade Show” AND Flag is “Yes”. Trigger Flow when Lead is created, Lead Source Type is “Trade Show” OR Flag is “Yes”. Steps to be followed: Trigger flow when Lead is created and Lead Source Type is “Trade Show” Click on Ellipsis (…) –> Click on Settings Go to Trigger Conditions and Click on “+Add” Add condition. @equals(triggerBody()?[‘leadsourcecode’],7) NOTE: “Lead Source” is an option set field add value of that option to check. After adding condition click on Done. Test your flow. Trigger flow when Lead is created and Flag is “Yes”. Repeat step number 1 to 3. NOTE: Flag is the “Two Option” field for two option set fields use true or false in condition. @equals(triggerBody()?[‘cf_flag’],true) Trigger Flow when Lead is created, Lead Source Type is “Trade Show” AND Flag is “Yes”. Repeat step number 1 to 3. AND Condition @and(equals(triggerBody()?[‘cf_flag’],true), equals(triggerBody()?[‘leadsourcecode’],7)) Trigger Flow when Lead is created, Lead Source Type is “Trade Show” OR Flag is “Yes”. Repeat step number 1 to 3. OR Condition @or(equals(triggerBody()?[‘cf_flag’],true), equals(triggerBody()?[‘leadsourcecode’],7))
Share Story :
Multiple Ways to Share a Canvas App in PowerApps
Introduction :- This blog explains multiple options how to share a Canvas Apps in Power Apps. Steps :- Select App and click on Share option, below screenshot for reference Options of Sharing Published App :- 1. Specify each User by Name. Enter Username in sharing panel and click Share button App can be shared with other Users by checking the Checkbox for Co-owner. 2. Specify that your entire Organization. Type Everyone in the sharing panel and select the option of Everyone of your organization. 3. Specify a security group in Azure Active Directory. Select security group name in sharing panel Note :- You can’t share an app with a distribution group in your organization or with a group outside your organization. You can’t grant Co-owner permission to a security group if you created the app from within a solution. Tips :- Regardless of permissions, no two people can edit an app at the same time. If one person opens the app for editing, other people can run it but not edit it. Notify user for sharing app, select the Send an email invitation to new users check box. Conclusion :- Hope above Blog helps you sharing designed Canvas App in Power Apps with Users as per business requirement.
Share Story :
Filter Gallery based on lookup field (Combo Box) on EditForm
Introduction: In this blog, we will learn how to filter Gallery based on Combo Box which is on different form. Use Case: We have a requirement where there is a lookup field (Price List) on the Editform (Data Source: Quote Project Price List). When there is data in the lookup field the Gallery (Data Source: Role Price) should be filtered. Steps: 1. We have an Screen which is divided into two parts:(Edit Form + Gallery) a. Quote Project Price List Edit Form. b. Gallery with Role Price data source. 2. Add field into the Editable Grid (Gallery). 3. The Lookup Field on the EditForm is PRICE LIST on which the gallery is suppose to be filtered. 4. To filter the Gallery set the Items property of the Gallery to the following formula, Item property: Set Gallery.Item = Filter(‘Gallery Data Source’, ‘GalleryFieldName’.Name = ‘Form Lookup Field Name(Combo Box)’.Selected.Name) For eg: GalleryRolePrice.Item=Filter(‘Role Prices’, ‘Price List’.Name=PriceListLookup.Selected.Name) 5. Output of the screen, The Gallery is not visible as the Lookup Field (Price List) is not selected. 6. After selecting the Lookup Field (Price List), the gallery is visible and also filtered on the basis of the selected field. 7. In this way the Gallery will get Filtered on the basis of the Lookup field on the EditForm.
Share Story :
Add lookup fields in an editable grid using PowerApps
Introduction: We had a requirement where we wanted to show the editable grid in power apps. The fields which are suppose to show are of string, decimal and lookup. Other data type was easy to display but we find difficulties in showing the lookup value. In this blog, we will learn how to add lookup fields(combo box) into the editable grid and also save it in Dynamics 365 CRM. Steps: 1. Insert Gallery : Insert a new gallery – Insert > Gallery > Blank Vertical Add Data Source to the Gallery Go to Properties > Click Data Source you want. 2. Add Combo Box input control in the PowerApps Grid. I have added 3 Combo Box input control inside the Grid, 2 text box, 1 is currency field in the data source and a Save icon. 3. For each Combo Box input box: Item Property: Set ComboBox.Item = Choices([@’Data Source’].<Field Name>) For eg: RoleComboBoxRP_1.Item = Choices([@’Role Prices’].Role) DefaultSelectedItems property: Set ComboBox.DefaultSelectedItems = ThisItem.<Field Name> For eg: RoleComboBoxRP_1.DefaultSelectedItems = ThisItem.Role 4. For each text input box: Default property: Set TextInput.Default = ThisItem.<Field Name> For eg: DescriptionRP_1.Default = ThisItem.Description Note: Do not forget to set the <DefaultSelectedItems> properties or else the value wont be visible in the grid. 5. To Save the changed value into the Data source, set the Save Icon to the following: OnChange property: Set SaveIcon.OnChange = Patch(DataSource, ThisItem, { <fieldName>: TextInput.Text, <fieldName>:ComboBoxName.Selected, <fieldName>:Value(CurrencyTextInput.Text) }) For eg: SaveRP_1.OnChange = Patch([@’Role Prices’], ThisItem, { Role : RoleComboBoxRP_1.Selected, ‘Resourcing Unit’:ResourcingUnitComboBoxRP_1.Selected, Unit:UnitComboBoxRP_1.Selected, Description:DescriptionRP_1.Text, Price:Value(PriceRP_1.Text) }) 6. The Output Screen. 7. The changed Lookup value. If you click the Save Icon the changed values will be saved. In this way we can change the Lookup values and also Save the changed value in the Dynamics 365 CRM.
Share Story :
What is “Does not support untyped value in non-open type” ODataException in creating records in D365 CE?
One of the most common errors we come across while calling API to create records in Dynamics but isn’t clear what it means? One such issue is – “An error occurred while validating input parameters: Microsoft.OData.ODataException: Does not support untyped value in non-open type.” On the console of the browser, you’ll see this – But, if you open the <objectName>.responseText of the Failure message of the call, you’ll see the below – A more zoomed view of the error would be below – This is because of my typo in the code [Which is the case for most scenarios] where you mistype a name of the field and neither does the error itself doesn’t specify which field you’re missing out on nor what it means! Reason This is because of a simple typo in one of the fields in the object I was creating using AJAX In my case, this should have been “entity.duration” and not “entity.durationn“. It was a simple issue which led me wander troubleshooting in areas which I shouldn’t look into. Hope this saves you some valuable time! Happy 365ing!
Share Story :
How to use Expand Query in MS Flows
Introduction This blog explains how to use Expand Query (N:1 Relationship) in the Common Data Service List Records Connector. Steps to be followed: Initialize Variable of type string. Using Expand in list RecordsExpand Query: cf_Project($select=cf_projectname,cf_projectabbreviation) Here cf_Project is the Schema Name of Project Lookup field on location entity. Pass the field names of the project entity that you want. Here I have passed cf_projectname and cf_projectabbreviation. Result of list record: You can see we get Project value in the below format to use this we have to parse the JSON. “cf_Project”: “{\r\n \”cf_projectname\”: \”Client Commercial\”,\r\n \”cf_projectabbreviation\”: \”CC\”,\r\n \”cf_pmtrackerid\”: \”3b576605-9c82-e911-a839-000d3a07f695\”\r\n}” Retrieving Project Values. Use “Apply to each” to get the value of the Project. Pass “Value” of “List Records” from Dynamic Content in “Select an output from previous steps” Now Set the Value in the “Project” variable which we had initialized earlier. Go To Expression and type: items(‘Apply_to_each’)[‘cf_Project’] Note: Here “cf_Project” is what we had retrieved in the output of ‘list records’. Make sure you pass this value correctly. “cf_Project“: “{\r\n \”cf_projectname\”: \”Client Commercial\”,\r\n \”cf_projectabbreviation\”: \”CC\”,\r\n \”cf_pmtrackerid\”: \”3b576605-9c82-e911-a839-000d3a07f695\”\r\n}” Result of Project Variable: Parsing JSON. Use “Parse JSON” action Add “Project Variable” in Content from “Dynamic Content” Click on “Generate from sample” to generate JSON Schema Enter sample JSON payload and click on done. { “cf_projectname”: “Test Project”, “cf_projectabbreviation”: “TR”, “cf_pmtrackerid”: “3b576605-9c82-e911-a839-000d3a07f695” } It will generate a JSON Schema automatically. Using Project Values. After parsing Json successfully you can use the values of the project entity field. You can use “Compose” to get and check the value. Enter “cf_projectname” in “Compose” inputs. OutputEntire FLOW: NOTE: You can add multiple expand queries in List Record:Query: cf_Project($select=cf_projectname,cf_projectabbreviation),cf_ParentLocationId($select=cf_name)
Share Story :
Conversion of Time and Date in MS flow
Introduction We had a requirement where we wanted to create a price list with current date time with respect to current country. In this blog we will use the OOB date conversion functionality. Use Case : (UTC with ) We created a flow where we had used UTC now functionality but this was returning the value time value with -5.30 hours. After doing RND I come to know that it automatically adjust the time using our time zone. As you can see in the below screen shot. Solution: To over come with this issue we need to use the inbuilt functionality convertTimeZone. It takes below parameter Sr No Parameters Example Explanation 1. <timestamp> Utcnow() It is a string or function which contains the timestamp 2. <sourceTimeZone> UTC The name for source time zone . We can write source time zone which we want to convert into 3. <destinationTimeZone> India Standard Time The name for the target/destination time zone. In this case we want to convert UTC into India Standard Time. So the India Standard Time is a destination TimeZone 4. <format> dd/MM/yyyy HH:mm Its a format in this case we wanted to convert into date and time dd/MM/yyyy HH:mm As you can see in the below screen i have converted UTC to India time zone. convertTimeZone(utcnow(),’UTC’,’India Standard Time’,’dd/MM/yyyy HH:mm’) Result: As you can see in the below screen shot it shows the date time in the mentioned format or you can say indian format. Conclusion: Hope this will help you to over come the time zone issue while working with different country time. For more Time Zone conversion refer : https://docs.microsoft.com/en-us/previous-versions/windows/embedded/gg154758(v=winembedded.80)?redirectedfrom=MSDN
Share Story :
How to map Signature field into Word template
Introduction : As we know , signature field with pen control can not be mapped directly into word template. This blog will explain how to map signature field into word template. Implementation : Steps to Add Signature Field Step 1 : Create signature Field with data type multiple line of text and maximum length 15000 Step 2: Then in the field properties -> control -> select Pen Control and Add. In word template ,signature field will map as a text field which contains base 64 separated by comma. As shown below. Steps for resolution: Step 1 : To map signature field in picture format in word template , create new field signature text with data type multiple line of text and maximum length 1048576. Step 2 : Write plugin. Plugin will trigger on create of record and update of signature field. Plugin Explanation : Plugin will retrieve the value of signature and separate ” data:image/png;base64 ” string followed by “,” (comma) and save remaining text in newly created signature text field. Plugin Registration: Register a plugin on create and update of account entity 2.Plugin Code void SignatureUpdate(Entity account) { tracingService.Trace(“postmsg : ” + account); string signaturetext = string.Empty; string attributeToUpdate = string.Empty; Entity AccountUpdate = null; try { AccountUpdate = new Entity(); AccountUpdate.Id = account.Id; AccountUpdate.LogicalName = account.LogicalName; if (account.Contains(“new_signature”) && account[“new_signature”] != null) { signaturetext = account.GetAttributeValue<string>(“new_signature”); attributeToUpdate = “new_signaturetext”; AccountUpdate = ProcessSignature(signaturetext, AccountUpdate, attributeToUpdate); } service.Update(AccountUpdate); } catch (Exception) { throw; } } public Entity ProcessSignature(string signaturetext, Entity Account, string attribute) { //to split base64 and remaining text string[] substring = signaturetext.Split(‘,’); Account[attribute] = substring[1]; return Account; } 3. build the code and update assembly and trigger a plugin And upload this template . Result :
Share Story :
How to run your SSRS Report for Past “N” Days from the Report run Date
Introduction If have a parameter on our report to see the past “N” days data on our report, we can perform the following steps. Step 1: Add a new Parameter, say “Days” Step 2: Under the Available Values Section, Add a new Value for the Parameter with value as 7 and expression having the following formula: =DateAdd(“d”,-7,Globals!ExecutionTime) Step 3: Under the Default Values Section, Add a new Value for the Parameter with expression having the following formula: =DateAdd(“d”,-7,Globals!ExecutionTime) Step 3: In your Dataset, add the following Filter Condition in the XML. <filter type=”and”> <condition attribute =”modifiedon” operator=”on-or-after” value=”@Days” /> </filter> Conclusion Thus, now you can view your report with records modified in the past “N” days.
