cancel
Showing results for 
Search instead for 
Did you mean: 

Join the discussion

Most Recent
sandeepstw
Super User
Super User

AI was available even before 30 November 2022, but everything changed after this date. Do you want to know why? Well, the day ChatGPT launched, and it added so much value in our work and personal life, so we are not even able to think about a day without AIBut what makes ChatGPT or other AI models so special now as I told AI was even available before 30 November 2022 that LLM.  

Read more...

AkhileshKhoday
New Member

What is Microsoft Entra ID?

Microsoft Entra ID is a service in the cloud that helps your employees log in to and use resources outside your organization. Examples of these resources are Microsoft 365, the Azure portal, and many other software services available online.

How does Microsoft Entra Id Licensing Work?

Microsoft Online business services, like Microsoft 365 and Microsoft Azure, use Microsoft Entra ID for sign-ins and identity protection. If you subscribe to any Microsoft Online business service, you automatically get access to Microsoft Entra ID Free.

Read more...

Inogic
Solution Sage
Solution Sage

In Dynamics, managing access to sensitive data is handled through security measures such as role-based permissions. Security roles and access management play a significant role in ensuring that the right individuals have access to the appropriate information. To grant access to particular records, users with Share permissions typically navigate to the respective record and click on the “Share” button as shown below.

 

Access-Management-using-Power-Automate-Flows-1

 

A common scenario arises when a sales manager needs to grant specific record access to a salesperson who doesn’t have the necessary permissions. The changes made by the sales manager may leave the salesperson unaware of their newly granted access, potentially leading to a loss in productivity. To resolve this issue, we can use access triggers introduced in Power Automate. These triggers activate whenever there is a change in user access for a particular record.

 

To improve this process, we can automate it by sending access notifications through email messages. By setting up a Power Automate flow, we can establish a notification system that triggers whenever access is granted, modified, or revoked for a particular user regarding specific records.

 

In this blog, we will utilize the example of a sales manager granting/modifying/revoking the permission of a salesperson in a lead record. To achieve this, we will need to create three different Power Automate flows, each of which is explained below.

 

1. Notify the user when Access is Granted for Lead records:

The GrantAccess action is triggered whenever full access, including Read, Write, Append, Append To, Delete, Share, and Assign permissions, is granted to the user for a specific record.

 

Access-Management-using-Power-Automate-Flows-2

 

Let’s see how we can create a Power Automate flow for that:

 

Step 1: Create a Power Automate flow and select the trigger point as “When an action is performed”. Select the Catalog and Category as All, and Table as Lead. Select the Action name as GrantAccess.

 

Access-Management-using-Power-Automate-Flows-3

 

Initialize the AccessMask and leadID Variable by clicking on add action and searching for initialize variable. Set the value for each variable as shown below:

 

Access-Management-using-Power-Automate-Flows-4

  • AccessMask = triggerOutputs()?[‘body/InputParameters/PrincipalAccess/AccessMask’]
  • LeadID = triggerOutputs()?[‘body/InputParameters/Target/Id’]

Access-Management-using-Power-Automate-Flows-5-e1718779159404

Step 2: Validate the above variable values and retrieve Lead, Access Modified User, and Target User Information by using the Get a Row By ID action in Microsoft Dataverse connector as shown below:

 

Access-Management-using-Power-Automate-Flows-6

 

  • Lead = variables(‘leadID’)
  • Access Modified User = triggerOutputs()?[‘body/InputParameters/PrincipalAccess/Principal/Id’]
  • Target User Information = triggerOutputs()?[‘body/RunAsSystemUserId’]

Access-Management-using-Power-Automate-Flows-7

 

Step 3: As we have retrieved all the necessary details, we can now send an email to the user informing them that they have full access to the record, as shown below. To send the email, we are using the Outlook connector. Essentially press on “Include an activity” and look for “Send an e-mail,” as illustrated underneath.

 

Access-Management-using-Power-Automate-Flows-8

 

Now, enter the To as the primary email address of the target user and the Subject and Body as shown below.

 

Access-Management-using-Power-Automate-Flows-9

 

2. Notify the user when Access is Modified for Lead records:

This flow triggers whenever specific access i.e. Read, Write, etc. is granted or revoked for a particular user under specific records.

 

Access-Management-using-Power-Automate-Flows-10

 

When we look at the JSON output of the trigger action from the power automate, we can see the AccessMask in JSON data, which is the addition of all access values which has been given to the user as shown below.

 

Access-Management-using-Power-Automate-Flows-11

 

Following are the access values for all permissions:

  • Read: 1
  • Write: 2
  • Append: 4
  • Append To: 16
  • Delete: 65536
  • Share: 262144
  • Assign: 524288

Let’s say if we give a user Read and Write access, the AccessMask value will be 3. To check if the user has any specific permissions, we can use a basic calculation. First, divide the AccessMask value by the permission value (either Read or Write shown above). At that point, apply the modulo operation by 2 (which is nothing but the leftover portion returned after isolating by 2). If the remainder is 1 or greater than 1, the permission is granted. If the remainder is 0, the permission is not granted.

Imagine you have a user with Read and Write access, you would get the Access Mask as 3. Here’s how you can identify if specific permissions (Read or Write) are granted to the user.

  1. Access Mask Value: 3 (this means both Read and Write permissions are granted)
  2. Permission Values:
    • Read: 1
    • Write: 2

To check if each permission is granted, follow these steps:

Step-by-Step Calculation

For Read Permission:

1. Divide the Access Mask Value by the Read Permission Value:

  • 3÷1=3

2. Apply the Modulo Operation (remainder when divided by 2):

  • 3 modulo 2=1

3. Interpret the Result:

  • As the result is 1, the Read permission will be granted.

For Write Permission:

1. Divide the Access Mask Value by the Write Permission Value:

  • 3÷2=1.5

2. Apply the Modulo Operation (remainder when divided by 2):

  • 5 modulo 2=1.5

3. Interpret the Result:

  • Since the result is greater than 1, the Write permission is granted.

So, in this case, both Read and Write permissions are granted to the user based on the calculated values. This process helps us determine whether specific access permissions are granted or not for a given Access Mask value. Let’s implement this in the Power Automate and see how we can check if the permission is granted or not.

 

Step 1: The triggered step and variable declaration will be the same as we have used in Step 1 of GrantAccess flow; the only change is that the action name will be ModifyAccess.

 

Step 2: Initialize boolean variables for all access permissions and set the respective expressions as shown below:

  • Read Permission Check Equation:

IsReadPermissionGranted = if(equals(mod(div(variables(‘AccessMask’), 1), 2), 1), true, false)

  • Write Permission Check Equation:

IsWritePermissionGranted = if(equals(mod(div(variables(‘AccessMask’), 2), 2), 1), true, false)

  • Append Permission Check Equation:

IsAppendPermissionGranted = if(equals(mod(div(variables(‘AccessMask’), 4), 2), 1), true, false)

  • Append To Permission Check Equation:

IsAppendToPermissionGranted = if(equals(mod(div(variables(‘AccessMask’), 16), 2), 1), true, false)

  • Delete Permission Check Equation:

IsDeletePermissionGranted = if(equals(mod(div(variables(‘AccessMask’), 65536), 2), 1), true, false)

  • Share Permission Check Equation:

IsSharePermissionGranted = if(equals(mod(div(variables(‘AccessMask’), 262144), 2), 1), true, false)

  • Assign Permission Check Equation:

IsAssignPermissionGranted = if(equals(mod(div(variables(‘AccessMask’), 524288), 2), 1), true, false)

 

Access-Management-using-Power-Automate-Flows12

 

Step 3: Now we have all permission values as Boolean. We can check if the value is true, and then the access is granted; otherwise, the access is revoked as shown below:

  • Read: @{if(variables(‘IsReadPermissionGranted’), ‘Granted’,’ Revoked’)}
  • Write: @{if(variables(‘IsWritePermissionGranted’), ‘Granted’,’ Revoked’)}
  • Append: @{if(variables(‘IsAppendPermissionGranted’), ‘Granted’,’ Revoked’)}
  • Append To: @{if(variables(‘IsAppendToPermissionGranted’), ‘Granted’,’ Revoked’)}
  • Delete: @{if(variables(‘IsDeletePermissionGranted’), ‘Granted’,’ Revoked’)}
  • Share: @{if(variables(‘IsSharePermissionGranted’), ‘Granted’,’ Revoked’)}
  • Assign: @{if(variables(‘IsAssignPermissionGranted’), ‘Granted’,’ Revoked’)}

Access-Management-using-Power-Automate-Flows-13

 

3. Notify the user when Access is Revoked for Lead records:

This flow triggers whenever all access of the user has been removed from the specific record.

 

Access-Management-using-Power-Automate-Flows14

 

The flow is almost similar to the Grant Access flow, apart from some modifications mentioned below:

  1. The Action name would be RevokeAccess
  2. Retrieve the Target user record by providing the Table name as “User” and Row Id from Trigger Outputs i.e. “triggerOutputs()? [‘body/InputParameters/Revokee/Id’” as shown below
  3. The email needs to be modified as shown below

Access-Management-using-Power-Automate-Flows15

 

Conclusion:

By following the steps for creating Power Automate flows to notify users about access changes, organizations can not only improve productivity but also strengthen security measures by maintaining clear visibility and control over data access.

Jmanriquerios
Super User
Super User

Four scenarios for calculating rollup fields

Read more...

Amik
Super User
Super User

Typically, we populate the Item property of an EditForm control with the selected item from a Gallery control from another screen. In this scenario, we want to keep this functionality intact, but also have the option to cycle through the next and previous record in our data source without having to navigate back to the Gallery screen.

Read more...

happyume
Multi Super User
Multi Super User

In this blog article, we will learn how to safeguard your data effectively by validating user inputs for robust protection against SQL injection and XSS.

Read more...

sandeepstw
Super User
Super User

Every successful business today is looking for globalization of their services and products, but language is a big problem to give customer support. Microsoft Copilot is designed to communicate with customers in their native language. With its latest localization capabilities, Microsoft Copilot is revolutionizing customer interaction by speaking the universal language of understanding. Whether you’re a small business aiming to expand your reach or a multinational enterprise looking to enhance user engagement, the power of localization within Microsoft Copilot positions your services and support to resonate globally. 

Read more...

happyume
Multi Super User
Multi Super User

Allowing users to upload any file type poses significant security risks. Malicious files, like .exe files, can execute harmful code, steal sensitive information, or damage systems. By restricting file uploads to specific, safe types (e.g., .pdf, .docx, .jpg), you can mitigate these risks and protect your application and data. In this blog post, we'll walk through a solution to validate file types in Power Apps' attachment control, ensuring only allowed extensions are uploaded.

Read more...

maqsoftware
Regular Visitor

In this blog post, learn how to enable offline capabilities in PowerApps to ensure continuous productivity and data integrity for mobile and field workers. We'll explore how to store data locally, detect network changes, and synchronize data seamlessly once connectivity is restored. Follow our steps to make your Power App efficient both online and offline.

Read more...

Rahman1005
Advocate III
Advocate III

In this blog, we'll connect to Dataverse using an Azure function that utilizes the .Net core 6.2 framework.

The prerequisites are listed below.

  • Create a new Dynamics 365 application in Azure.
  • Make that the newly created Azure Function builds appropriately.
  • To establish a connection with the Dataverse, use this sample of code.

Create a new Dynamics 365 application in Azure:

 

We need to register the Dynamics 365 Web API on Azure and use it with an application user. This is particularly useful for those working with custom APIs in CRM.

 

To achieve this, you will need the following components.

  • Azure portal access
  • Application user
  • CRM Admin user

Log in to the Azure portal, search for " Microsoft Entra ID," and click on it.

Rahman1005_0-1719815961428.png

 

We need to select App registration.

Rahman1005_1-1719815961431.png

 

 

Fill in the required details and shown below the preferred options. I selected the first option, which is for single-tenant users only. Once completed, click on "Register." An application (Dynamics 365) will be registered, and its details will be available in the Overview tab.

Rahman1005_2-1719815961435.png

 

Application ID – The Application ID is a unique, unchangeable identifier for this application. Directory (Tenant) ID – The Tenant ID is the identifier of the AAD directory where the application was created. Next, you need to grant permissions to the API. Refer to the screenshot below.

Rahman1005_3-1719815961439.png

 

 

Rahman1005_4-1719815961444.png

 

 

Navigate to API permissions, click on "Add a permission," and select "Dynamics CRM." Choose delegated permissions and check the "user impersonation" option. Finally, click on "Add permissions.

Rahman1005_5-1719815961451.png

 

 

Here are the reasons for enabling user impersonation in the application:

  • The user calls the API with another AAD ID in the header.
  • The user is authenticated as a valid AAD user.
  • Permissions are checked to determine if the user can impersonate.
  • The AAD ID is read from the header.
  • Every call is now made as if it is by the user specified in the AAD ID header (including calls to Graph API, Dynamics CRM, etc.)

After granting permissions, the next step is to create a client secret ID.

Rahman1005_6-1719815961453.png

 

 

Add a new client secret and select its expiration date.

Rahman1005_7-1719815961454.png

 

Click on "Add" to generate a client secret. Please save the client secret in a notepad file. Refer to the screenshot below for guidance.

Rahman1005_8-1719815961456.png

 

We have successfully deployed the Dynamics online Web API. Now, let's proceed to create an application user in CRM.

Navigate to https://admin.powerplatform.microsoft.com/ and select your environment and click on setting as shown in below screen short.

 

Rahman1005_9-1719815961459.png

 

 

Next under Users and permissions click on application users.

Rahman1005_10-1719815961461.png

 

Click on New app user.

Rahman1005_11-1719815961462.png

 

Choose the app registered in Azure, then assign it to the appropriate business unit and add the desired security roles. In my case, I added the admin role to my app.

Rahman1005_12-1719815961463.png

 

Let's test the API on Postman.

To consume the Web API, first, we need to generate an authorization token. This can be done by making a GET API call to the following endpoint:

URL:https://login.microsoftonline.com/<TENANT ID>/oauth2/token

 

Rahman1005_13-1719815961468.png

 

Please include the following parameters in the API body:

  • client_id: This should be the client ID of the registered Azure application.
  • client_secret: This will be the value of the client secret generated in certificate and secrets.
  • resource: The value of this parameter will contain the URL of the CRM instance.
  • grant_type: This parameter will have a value of client_credentials.

The Client Credentials grant type is utilized by clients to obtain an access token outside of the context of a user. Upon making the request above, we will receive an access_token in return with a status code of 200.

I am obtaining CRM contacts by using an odata query in the request provided above. The details of the request are given below. The method used is Get. The URL is

https://org18828102.crm5.dynamics.com/api/data/v9.2/contacts

The above URL can be accessed by navigating to SettingsàCustomization à Developer resources, and finally to Service root URL.

Rahman1005_14-1719815961471.png

 

 

This token is intended for performing CRUD operations via WEBAPI. I will provide an example of a GET request used to retrieve data from CRM.

 

Rahman1005_15-1719815961475.png

 

Create Azure Function builds appropriately:

I am writing below Azure function to create a contact record through the Service client.

The subsequent action involves deploying the Azure function and then conducting a test using Postman or a web browser.

Conducting a test of the Azure function using Postman.

using System;

using System.IO;

using System.Threading.Tasks;

using Microsoft.AspNetCore.Mvc;

using Microsoft.Azure.WebJobs;

using Microsoft.Azure.WebJobs.Extensions.Http;

using Microsoft.AspNetCore.Http;

using Microsoft.Extensions.Logging;

using Newtonsoft.Json;

using Microsoft.PowerPlatform.Dataverse.Client;

using Microsoft.Xrm.Sdk;

using System.Collections.Generic;

 

namespace CreateContactfromAzurefunction

{

    public static class Function1

    {

        [FunctionName("Createcontactrecord")]

        public static async Task<IActionResult> Run(

    [HttpTrigger(AuthorizationLevel.Function, "post", Route = null)] HttpRequest req,

    ILogger log)

        {

            log.LogInformation("C# HTTP trigger function processed a request.");

            var _contactid = new Guid();

            try

            {

                string _clientId = "e69c80b6-615d-4c4f-97c5-88c9306e1aae";

                string _clientSecret = "sPZ8Q~152D_aVvp4TO_Fxem7iTLSP0B4Ab1OOaqI";

                string _environment = "org18828102.crm5";

                var _connectionString = @$"Url=https://{_environment}.dynamics.com;AuthType=ClientSecret;ClientId={_clientId}

                ;ClientSecret={_clientSecret};RequireNewInstance=true";

 

 

                var service = new ServiceClient(_connectionString);

                if (service.IsReady)

                {

                    _contactid = await GetContacts(service);

                }

 

 

            }

            catch (Exception ex)

            {

              return  new  OkObjectResult(ex.Message);

                throw new(ex.Message);

 

            }

            OkObjectResult testrecord = new OkObjectResult("Contact Record created with ID " + Convert.ToString(_contactid));

            return testrecord;

        }

 

        private static async Task<Guid> GetContacts(ServiceClient service)

        {

            Guid _contactid;

            // Create a contact

           

            Entity contact = new Entity("contact")

            {

                ["firstname"] = "Rahman",

                ["lastname"] = "Dynamics CRM"

            };

            _contactid = service.Create(contact);

            return  _contactid;

        }

 

       

    }

}

Copy the local host URl and send post request from postman as shown in below screen.

Rahman1005_16-1719815961477.png

 

Rahman1005_17-1719815961480.png

 

 

Rahman1005_18-1719815961482.png

 

 

Below records is created in dynamic in contact entity.

Rahman1005_19-1719815961484.png

 

 

Thank you...!

rampprakash
Super User
Super User

The term 'msbuild' is not recognized as the name of a cmdlet, function, script file, or operable program. Check the spelling of the name, or if a path
was included, verify that the path is correct and try again.

Read more...

Jmanriquerios
Super User
Super User

Modern controls have come to Canvas Apps based on the Microsoft Fluent 2 (https://fluent2.microsoft.design/) design system

Read more...

rampprakash
Super User
Super User

In this blog we will see how to call Action from Plugins in Dataverse or MSCRM

Read more...

rampprakash
Super User
Super User

In this blog we will see how to call action from WebResource using Web API

Read more...

Inogic
Solution Sage
Solution Sage

Receipt processing is a prebuilt artificial intelligence model available in Power Automate. It’s designed to analyze receipts using cutting-edge optical character recognition (OCR) technology. This model can understand both printed and handwritten text on receipts. Once it reads a receipt, it extracts important information such as the store’s name and address, the transaction’s date and time, and a detailed list of items purchased. For each item, it identifies the name, price, quantity, and total cost. Additionally, it calculates the subtotal (the total before tax), the tax amount, any tip included, and the final total spent. This helps streamline tasks like expense tracking and management.

 

Let’s delve deeper into this practical example for a better understanding:

At a local general store, the owners use Dynamics 365 CRM to keep customer information. However, keeping track of customers’ purchases and calculating daily profits has been difficult. They used to manually enter each purchase into a record, export it to Excel, and then figure out the daily profit. This process took a lot of time and often had mistakes.

 

To make things easier, they decided to use the receipt processing feature in Power Automate. Now, when a customer buys something, they just upload the receipt into the system. The receipt processing model automatically extracts important details like items bought, their prices, and the total amount spent. This data is then automatically entered into an Excel spreadsheet.

 

Implementing the described scenario using Power Automate

A custom entity named “Customers” has been established, containing fields for customer details such as name, phone number, and address. Additionally, a “Receipt” field has been incorporated for uploading receipt images or files.

 

Power-Automates-AI-Model-1-1536x699

 

Currently, our Power Automate flow is triggered by a modification of a row, as the receipt upload in the form can only occur after the record is created. We’ve specified the customer’s table name in the parameters.

 
 

Power-Automates-AI-Model-2-1536x698

 

After retrieving the record, we need to download the associated file. To accomplish this, we will add a “Download a file or an image” action immediately after the trigger action. We’ll pass the extracted record ID to this action and specify “receipt” as the column name from which the file will be downloaded.

Power-Automates-AI-Model-3-1536x698

 

After retrieving the record, we need to download the associated file. To accomplish this, we will add a “Download a file or an image” action immediately after the trigger action. We’ll pass the extracted record ID to this action and specify “receipt” as the column name from which the file will be downloaded.

 

Note: Suppose there are receipts on different pages: one on page 2 and another spanning pages 3 and 4. If you specify ‘2’, the tool will only gather information from the first receipt. Choosing ‘3-4’ means it will only extract info from the first page of the second receipt. If you choose ‘2-4’, it will collect details solely from the first receipt, ignoring the second one.

 

Power-Automates-AI-Model-4-1536x648

 

To enter the extracted information into an Excel sheet, we’ll link the output parameters to the columns of our created table in Excel Online. The output parameters from the Receipt extraction model include the purchased item name, quantity, price, merchant’s name, address, total amount, subtotal, tip, tax, and more. We’ll organize this data in the Excel sheet according to our table columns.

 

Power-Automates-AI-Model-5-1536x699

 

Now that our flow is set up, we’ll test it by uploading the following receipt in the customer’s entity form.

 

Power-Automates-AI-Model-6

 

The flow was activated when a modification was made to a customer entity’s record. The information from the receipt image was successfully extracted and entered into the system according to the flow’s instructions. You can now compare the values of those entries with the details from the receipt image provided above.

 

Power-Automates-AI-Model-7-1536x701

 

Conclusion

 

Our flow successfully automated the process of extracting information from a receipt uploaded to a customer entity’s record. By triggering the flow upon modification of the record, we ensured that the receipt details were accurately captured and entered into the system. This streamlined the data entry process and provided a reliable way to compare the entered values with the original receipt image. Overall, the flow showcased the efficiency and precision of automating repetitive tasks with Power Automate.

Amik
Super User
Super User

Scenario

 

We want to copy a record and display the attributes of that copied record on an EditForm. We then want to have the option to save the copied record as a new record in our data source.

Read more...

carsten_dick
Regular Visitor

In this blog, you'll learn how to get started with Power Platform and Azure DevOps to

  • shape the collaboration in development teams and
  • buildup ALM for your organization.

When we deal with Microsoft Power Platform and the development of apps and process automation, we quickly come across the topics of "distribution of solutions in the company" and "development of solutions in development teams". These are the topics that DevOps and Application Lifecycle Management, or ALM for short, deal with.

Read more...

maqsoftware
Regular Visitor

In this blog post, we will walk through the steps to create a Power App that converts Word, Power Point, or Excel documents to PDF format.

Read more...

maqsoftware
Regular Visitor

In this blog post, we will walk through the steps to create a Power App that displays Word, Power Point, or Excel documents stored in a SharePoint Online (SPO) document library, converted on the fly into PDF format and viewed using the PDF viewer control in Power Apps. This solution is especially useful for scenarios where there are few document creators but many document consumers, accessing a variety of document types.

Read more...

maqsoftware
Regular Visitor

In this blog post, we will talk about how organizations can make the most of pipelines. Pipelines help teams adopt automated ALM practices more easily, cutting down on the effort and expertise needed to see results.

Read more...

SebS
Super User
Super User

🚀 Revolutionize Your Invoice Management Workflow! 📧💼

Discover how to seamlessly send emails with PDF attachments using Office365 Outlook while simultaneously updating attachments in SharePoint Lists. Our step-by-step guide, coupled with visual references, ensures efficiency and accuracy in your invoicing process. Say goodbye to manual tasks and hello to a streamlined workflow! Stay tuned for the ultimate integration journey. Coming soon! 🎉 #InvoiceManagement #Office365 #PowerApps #SharePoint

Read more...

c_stringham_
Helper I
Helper I

Are you an MSP looking to revolutionize the way you communicate with your clients? Discover how to leverage the Microsoft Power Platform and SendGrid to create a dynamic, cost-effective notification system that’s easy to use and maintain. Say goodbye to additional contact lists and hello to customizable, streamlined messaging. Don’t miss out on this game-changing approach—read on to transform your MSP communications now! 

Read more...

Inogic
Solution Sage
Solution Sage

As Microsoft is providing us more flexibility with Power Automate (MS Flow), now we can retrieve List of solution details and their components directly within Power Automate flows.

Recently, we got a requirement to retrieve the list of solutions and their components from specific environments and store this information in an Excel file on SharePoint.

We can achieve this using Solution and Solution Components entity records in Dynamics CRM.

Below are the steps to achieve this requirement.

Step 1: Initialize the Array variable

This array variable should include the details of the solution component types you want to retrieve from the solution, as shown in the screenshot below.

 

List-solution-details-and-their-components-1

 

The above array contains the following details of the solution component types:

  • ComponentType – The type value of the component from the documentation.
  • EntityName – The logical name of the component type.
  • FilterRowName – The field name to filter the component type.
  • SelectColumn – The field name to filter the component type.

You can find all solution component types information in Microsoft Documentation

Step 2: Retrieve solutions

Add the ‘List rows from selected environment’ step to retrieve the solutions from the specific environment. Use a filter query to retrieve the visible solutions and exclude the default solution.

List solution details and their components 2.png

 

Step 3: Retrieve Solution Components

Now, proceed to retrieve the solution component for the previously obtained solution. Utilize an ‘Apply to Each’ step to iterate through each solution, and within that, add a ‘List rows’ action to retrieve the solution component using the filter rows.

List solution details and their components 3.png

 

Step 4: Filter Array step to check the Component Type

For each solution component, implement an ‘Apply to Each’ loop. Inside this loop, use a Filter Array step to check that the Component Type of the current solution component matches the type specified in the array variable we set up earlier.

 

List-solution-details-and-their-components-4

 

Expressions from the above image:

  • variables(‘SolutionCompentSummary’)
  • @item()[‘ComponentType’]
  • items(‘Apply_to_each_Solution_Components’)?[‘componenttype’]

Step 5: Retrieve Solution Components Summary

Add the ‘List rows’ step to retrieve the solution component if the Component Type matches and add a row into the Excel table.

 

Expressions from the above image:

  • length(body(‘Filter_Solution_Component_Summaries’))
  • body(‘Filter_Solution_Component_Summaries’)[0][‘EntityName’]
  • body(‘Filter_Solution_Component_Summaries’)[0][‘FilterRowName’]
 

List-solution-details-and-their-components-6-1536x744

 

Expressions from the above image:

  • items(‘Apply_to_each_Solutions’)?[‘uniquename’]
  • items(‘Apply_to_each_Solutions’)?[‘createdon@OData.Community.Display.V1.FormattedValue’]
  • items(‘Apply_to_each_Solutions’)?[‘version’]
  • items(‘Apply_to_each_Solutions’)?[‘ismanaged@OData.Community.Display.V1.FormattedValue’]}
  • outputs(‘List_of_Solution_Component_Summary’)?[‘body/value’][0]?[body(‘Filter_Solution_Component_Summaries’)[0][‘SelectColumn’]]
  • concat(toUpper(take(replace(string(outputs(‘List_of_Solution_Component_Summary’)?[‘body/value’][0]?[‘@odata.type’]), ‘#Microsoft.Dynamics.CRM.’, ”), 1)), toLower(skip(replace(string(outputs(‘List_of_Solution_Component_Summary’)?[‘body/value’][0]?[‘@odata.type’]), ‘#Microsoft.Dynamics.CRM.’, ”), 1)))
List-solution-details-and-their-components-7

 

Conclusion:

By following these steps, you can retrieve Solutions and their component details using Power Automate flow.

wyattdave
Responsive Resident
Responsive Resident

This series is all about creating components from other components. PCF maybe the best choice but it isn't always enabled and requires a different skillset.

This blog is all about making a multi list sorter (mainly designed for mobile devices)

Read more...

LaurensM
Super User
Super User

Ah, the good old If & Switch conditional statements! One of the first Power Fx functions you’ll familiarize yourself with when working with Canvas Apps.

 

In this blog post we’ll shortly familiarize ourselves with the Power Fx If and Switch functions. More importantly, we’ll look at some tips & tricks to easily improve code readability and scalability.

Read more...

sandeepstw
Super User
Super User

This blog is continuation of “Create Your Customized Copilot Using Microsoft Copilot Part 1 and 2” in which we explained left side navigation menu Overview, Topics, Actions (preview), Entities, Analytics, Publish, Settings. In this blog we will discuss about Copilot available channels.  

Read more...

SebS
Super User
Super User

Creating dynamic content in Power Apps can significantly enhance user experience, especially when generating documents like invoices. In this guide, we will walk through the steps to create a dynamic invoice using string interpolation and mimic CSS styles using variables.

Read more...

rampprakash
Super User
Super User

This blog post will guide you through the process of running asynchronous plugins or workflows in your Dataverse environment.

Read more...

sandeepstw
Super User
Super User

This blog is continuation of “Create Your Customized Copilot Using Microsoft Copilot Part 1” in which we explained left side navigation menu  Overview, Topics, Actions (preview), Entities, Analytics, Publish, an option to Extend Microsoft Copilot (preview), Settings, that part we will cover in this blog. 

Read more...