Co-presence in Power Automate | Multiple users working on a Flow

Here’s a cool feature that is just announced!

Now see who’s also Editing the Flow in parallel with you. Microsoft just announced this update is super-useful in teams working parallelly on a Flow – https://powerautomate.microsoft.com/en-us/blog/announcing-co-presence-in-power-automate/

Here’s a quick summary

Co-presence in Flow

Once a Flow is shared and if both the users happen to be on the same Flow in Edit mode at the same time, here’s how you identify

  1. Let’s say this Flow is being edited by CRM Admin and it’s shared with the user Priyesh Wagh too.
    And it appears like a usual Flow which you are editing


  2. Now, on the other hand, Priyesh Wagh also logged in and opened this Flow to Edit. And when CRM Admin too is already editing parallelly, both parties will see the other participants like so –




  3. Both parties can continue to Edit. However, when either of them saves First after both have entered, there will be no issue.
    Now, once any other party after that Saves their change i.e. 2nd save by other user than who first saved, they’ll see the below warning asking to choose an option to avoid the clash.


  4. Let’s say the user chooses to Save a copy, you’ll be asked to save this into a new Flow.



    The new Flow saved will not be shared with other users and hence, will continue to exist outside of the Shared with me section into Cloud flows section



Hope this was useful

Here are some more Power Automate / Flow posts you might want to check out –

  1. Retrieve Metadata of Global OptionSets from Dynamics 365 in Power Automate | HTTP with Azure AD action
  2. Primary Key of Activity type entity in a Dataverse connector in Power Automate | Quick Tip
  3. Split On in Power Automate in SharePoint trigger for Item updates
  4. Search Rows (preview) Action in Dataverse connector in a Flow | Power Automate
  5. Suppress Workflow Header Information while sending back HTTP Response in a Flow | Power Automate
  6. Invalid XML issue in Dataverse connector for List Rows action | Fetch XML Query | Power Automate
  7. FetchXML Aggregation in a Flow using CDS (Current Environment) connector | Power Automate
  8. Invalid type. Expected Integer but got Number error in Parse JSON – Error at runtime after generating Schema | Power Automate
  9. Asynchronous HTTP Response from a Flow | Power Automate
  10. Setting Lookup in a Flow CDS Connector: Classic vs. Current Environment connector | Power Automate Quick Tip

Thank you!

Create Teams Meeting invite from Power Automate

Here’s an example of several use cases which can let you create a Teams meeting from within Power Automate based on your business use case.

In my example, I’m using Power Automate to schedule a meeting from a Project in Project Operations inviting all Team Members for a follow up!

PS: Creating an Appointment in Outlook doesn’t set the Teams call. 😊

Scenario

For example, in Project Operations’ sample Project example – I want to simply put a Teams meeting to all the Project Team members of this sample Star Piping Project.

  1. Here are my Project Team Members whom I want to send the Teams invite to.


  2. And I should just be able to run a Flow from the Project itself to send an invite to all the Team Members.
    I’m calling my Flow as ‘Teams Roundtable Meeting’

  3. And my Flow is asking me when this meeting should be. So, I’ll mention the same.
    So, I want the meeting to be on 16th Sep 2021 and start at 10:30am


    And End it by 11:30am


  4. And once the values are accepted, the Meeting should be on the Teams of all the Team Members





    Let’s see how I built this Flow.

The Flow

Now, this is subjective – in your case, this could be anything we can imagine!!

  1. I’m accepting the important parameters in the form of Dataverse (Legacy) connector [Because, this connector let’s you Run the Flow in the context of the record, the new Dataverse green connector doesn’t allow this.]

    These are the values which we filled when we ran the Flow on the Project.


  2. Further, I have some steps to retrieve the Team Members, then eventually their Email addresses (In Project Operations, you need to retrieve the Email addresses from the Bookable Resources and further – see if User record has these email addresses or not)
    Next, I’ll create a variable of type Array to collect the Email Addresses which the meeting invite should go to.

  3. Now, I’ll append all the Email Addresses I retrieved from the Team Members in the array.

  4. Now, the Array is formed with all the Email addresses separated by commas. But, we are not done yet. We need to form a string.


    So, I use Join operation to join the email addresses into a string separated by semicolon (just like how you enter in the To field of emails)


    The result will be a string of Email addresses separated by semicolon


    Finally, once all the important data is collected, we can proceed towards creating the Teams invite.

Create a Teams meeting

Here’s how you can create a Teams meeting from Microsoft Teams connector in Power Automate

  1. Look for Microsoft Teams in Power Automate

  2. Now, in this Meeting, I can set the parameters based on how I want the meeting to be created.
    I’ll fill in the information which is required for the Invite to be created.
    The Start Time and End Time need to be set in the date-no-TZ format, hence, I’ve arranged the same accordingly
    Select Calendar Id as Calendar (Other options are Birthdays and United States Holidays)

  3. The Outputs are from the result of the Join operation we performed to form the string of Email addresses to be added as attendees.

  4. Finally, you can select these optional parameters to make sure the invite is created based on your preference.

    And that’s it!

Teams Invite vs Calendar Invite

Now, if you have a normal Calendar Appointment, it’ll look like below – It doesn’t have a Join button


Whereas, the Teams Calendar Invite has a Join button on it

Caveats

Some caveats worth mentioning –

  1. In case you are planning to have Appointments created in D365 and eventually either sync it to Outlook using Server-Side Sync, the invite will not be a Teams Invite.
  2. No option to later retrieve this Outlook Appointment in Flow and convert/update it to a Teams call.

Hope this was useful!

  1. Action.ShowCard vs Action.ToggleVisibility in Adaptive Cards | Microsoft Teams
  2. Admin Center URLs under M365 – Power Platform, Teams, SharePoint, Power BI
  3. Tag a User in a Microsoft Teams post made using Power Automate
  4. Visualize Adaptive Card for Teams user action within a Cloud Flow | Experimental Feature
  5. Create a Team, add Members in Microsoft Teams upon Project and Team Members creation in PSA / Project Operations | Power Automate
  6. Task Completion reminder using Flow Bot in Microsoft Teams | Power Automate
  7. Turn Teams On / Off at Org Level, provisioning users | M365 Admin Center Tip
  8. Adaptive Cards for Teams to collect data from users using Power Automate | SharePoint Lists

Thank you!

Join action in Data Operations in Power Automate

One of the commonly used connectors to perform operations in Flow is Data Operations

To describe this action in simpler terms, it is “Joining values in an array with a value”.

Join

Here’s how you can use the Join operation in Power Automate

  1. Look for Data Operations connector in Power Automate.

  2. In Join, you’ll see that you’ll need two fields that takes a source and by what character you want to Join into the String result this Action will output.

  3. Example – I want to Join numbers by a hyphen “-“. Here’s how it can be done.
    Here’s how my From and Join With fields will be populated.

  4. And this will return a String value by joining the items in the array by the value we entered in Join With.


    To be sure this is string, you can click on Show raw outputs and see the results


    Hope this was useful!

Here are some more Power Automate / Flow posts you might want to check out –

  1. Retrieve Metadata of Global OptionSets from Dynamics 365 in Power Automate | HTTP with Azure AD action
  2. Primary Key of Activity type entity in a Dataverse connector in Power Automate | Quick Tip
  3. Split On in Power Automate in SharePoint trigger for Item updates
  4. Search Rows (preview) Action in Dataverse connector in a Flow | Power Automate
  5. Suppress Workflow Header Information while sending back HTTP Response in a Flow | Power Automate
  6. Invalid XML issue in Dataverse connector for List Rows action | Fetch XML Query | Power Automate
  7. FetchXML Aggregation in a Flow using CDS (Current Environment) connector | Power Automate
  8. Invalid type. Expected Integer but got Number error in Parse JSON – Error at runtime after generating Schema | Power Automate
  9. Asynchronous HTTP Response from a Flow | Power Automate
  10. Setting Lookup in a Flow CDS Connector: Classic vs. Current Environment connector | Power Automate Quick Tip

Thank you!

Retrieve Metadata of Global OptionSets from Dynamics 365 in Power Automate | HTTP with Azure AD action

Not sure if you’ll ever need to retrieve the Metadata of Global OptionSets ever or if you’re just curious that this could be retrieved or not, probably this post might be able to help. 😊

Let’s look at how you can retrieve Global Option Set metadata from your Dynamics 365 instance in Power Automate using Invoke and HTTP Request using Azure AD connector.
I’ve mentioned some considerations along the way as well!

Flow

Let’s see how we can retrieve the Global Option Sets from your D365 instance –

  1. For simplicity, my Flow will run on-demand. Hence, the next step is to have HTTP with Azure AD connector to be used.
    Consideration: The reason we are not using Dataverse connector is because it doesn’t let you Retrieve / Retrieve Multiple on GlobalOptionSetDefinitions which is required in this case.
    And you’ll be using HTTP Request to retrieve resources from your current D365 environment and hence, will use Connection Reference based on who can access the APIs.



  2. Now, in the Invoke HTTP Request with Azure AD, use the below to query the GlobalOptionSetDefinitions


  3. Further, once this is executed, the Output of the request will be a JSON response which is tremendously huge and detailed.
    So, when I format it in an online formatter, it looks something like this –


  4. Consideration: $filter= is not supported in this type Request. Hence, it won’t work and you’ll get the below error. Below is an example when I tried –




  5. So, after referring to #3 above
    Now, once you have retrieved this data, we’ll use Filter array action in Power Automate to filter the OptionSet Metadata based on the the Name of the OptionSet and select that piece of JSON which contains the details of 1 single Option Set

  6. Now, in Select, we’ll select the Value part of the Body of the HTTP Request we’ve used above.
    body(‘Invoke_an_HTTP_request’)?[‘value’]
    And the reason we select value is because from the Body of the step above, we are selecting the Value array which is an Option Set record itself.
    Further, we’ll use a criteria to Filter the same.


    And if you Peek Code this and see


  7. Next, the criteria we’ll use to filter is based on the name of the Option Set itself which you can easily see in Dynamics 365.
    We’ll pick item()[‘Name’] to select the JSON attribute whose value we want to compare on the right hand side


    And if you Peek Code here

  8. Now, the reason we chose this is in #3 above, if you expand, you’ll see the Name JSON attribute that contains your Unique Name of the OptionSet.


  9. And now, when you Run the Flow and see the Result of the last Filter Array Step


    And if you take these Outputs and Beautify to see the structure, you’ll see that this is 1 Option Set’s Metadata. You can then see these values if you ever need to retrieve the Global Option Sets at any point.

Here are some more Power Automate / Flow posts you might want to check –

  1. Primary Key of Activity type entity in a Dataverse connector in Power Automate | Quick Tip
  2. Split On in Power Automate in SharePoint trigger for Item updates
  3. Search Rows (preview) Action in Dataverse connector in a Flow | Power Automate
  4. Suppress Workflow Header Information while sending back HTTP Response in a Flow | Power Automate
  5. Invalid XML issue in Dataverse connector for List Rows action | Fetch XML Query | Power Automate
  6. FetchXML Aggregation in a Flow using CDS (Current Environment) connector | Power Automate
  7. Invalid type. Expected Integer but got Number error in Parse JSON – Error at runtime after generating Schema | Power Automate
  8. Asynchronous HTTP Response from a Flow | Power Automate
  9. Converting JSON to XML and XML to JSON in a Flow | Power Automate
  10. FormatDateTime function in a Flow | Power Automate

Thank you!

Primary Key of Activity type entity in a Dataverse connector in Power Automate | Quick Tip

In case it’s your first time creating a Cloud Flow using Dataverse connector and dealing with Primary Key of the Activity Type of entity, here’s a quick tip to keep in mind.

Normal Entity

As a creator for Flow, let’s say you have listed Records of an entity called as Accounts (out-of-the-box), you’ll notice that the name of the entity

Activity Entity

Now, if you try to search for the Name of the Activity entity, it won’t appear as it does for other entities, instead just search “Unique” and you’ll find an entry for Unique identifier of the activity entity –

  1. Name of my Activity entity is ‘Snapshot’, but it doesn’t show up when I search Snapshot.

  2. So instead, just search “Unique” or “Identifier”

  3. On the contrary, out-of-the-box entities have their own names named as Primary Keys

Here are some more Power Automate / Cloud Flow blogs you might want to check –

  1. Split On in Power Automate in SharePoint trigger for Item updates
  2. Search Rows (preview) Action in Dataverse connector in a Flow | Power Automate
  3. Suppress Workflow Header Information while sending back HTTP Response in a Flow | Power Automate
  4. Invalid XML issue in Dataverse connector for List Rows action | Fetch XML Query | Power Automate
  5. FetchXML Aggregation in a Flow using CDS (Current Environment) connector | Power Automate
  6. Invalid type. Expected Integer but got Number error in Parse JSON – Error at runtime after generating Schema | Power Automate
  7. Asynchronous HTTP Response from a Flow | Power Automate
  8. Converting JSON to XML and XML to JSON in a Flow | Power Automate
  9. Validate JSON Schema for HTTP Request trigger in a Flow and send Response | Power Automate
  10. Tag a User in a Microsoft Teams post made using Power Automate

    Thank you!

Split On in Power Automate in SharePoint trigger for Item updates

Let’s consider this scenario where you have a SharePoint List and you need to Bulk Edit the same which triggers a Flow.

How would you want to capture the record updates in Flow Runs – Individually? Or all in an Array?

Let’s see how this can be done!

SharePoint Trigger in Power Automate

Let’s see what trigger is being used on which I can choose to have Split On in case of Bulk Update of Item Changes.

  1. In Power Automate, you can search for SharePoint and you’ll find the trigger on which for Item Update in SharePoint.

  2. Now, since I have a List called 2021 Onboarding in my SharePoint in the Site called Data Store Internal


  3. And this Flow will be triggered whenever there’s an Update to the Items on the List I’ve mentioned above.

Split On

Let’s look at what options are available us to toggle between having Split On and Off and what the results are –

  1. Go to the Settings of the Trigger to access the Split On setting toggle.


  2. You’ll see the Split On is set to ON i.e. as per below –


  3. Given that this can be turned ON and OFF, we’ll look at the difference between the two results when you Bulk Edit SharePoint Items which will initiate this trigger.

Example: Split ON

Now, let’s review how having Split On will affect the results.

  1. Now, let’s see Flow Runs are recorded when Split On is set to ON and the Split is on Body/Value


  2. Now, when I modify multiple items in SharePoint, say, the Group Code field in my SP List as below –


  3. Then, there will be 2 different Flow Runs.


  4. Now, if you look at the results, the way these exist per Flow Run is as follows. And for each record, this is the case –

Example: Split OFF

Now, let’s review how having Split OFF will affect the results.

  1. Now, once the Split is OFF and you Bulk Edit the records.


  2. And when you Bulk Edit the List in SharePoint the same way as you did above,


  3. Only 1 Flow Run will be created as shown below –


  4. And, if you open the results, you’ll see the multiple items in the body – value (Array of each record as value in the body) which were modified.


Hope this was useful!

Here are some more Power Automate / SharePoint Online posts you might want to check –

  1. Admin Center URLs under M365 – Power Platform, Teams, SharePoint, Power BI
  2. AddColumns() function to dynamically add columns to a Data table in Canvas Power App | SharePoint List
  3. Launch URL on a Data Table Text column selection in a Canvas PowerApp | SharePoint Lists
  4. Search Rows (preview) Action in Dataverse connector in a Flow | Power Automate
  5. Advanced Lookup in Model-Driven Apps | Power Platform
  6. Suppress Workflow Header Information while sending back HTTP Response in a Flow | Power Automate
  7. Adaptive Cards for Teams to collect data from users using Power Automate | SharePoint Lists
  8. Aggregate functions in a Canvas Power App | Using on SharePoint Lists
  9. Save generated PDFs to SharePoint directly – 2020 Wave 1 | Early Access Feature
  10. D365 Ribbon Button shortcut to open a Document in SharePoint Online

Thank you!

Search Rows (preview) Action in Dataverse connector in a Flow | Power Automate

As Dataverse connector keeps getting updated from time to time, here’s a new Search rows (preview) Action which you must be seeing in the Dataverse connector in Power Automate. Let’s see how we can use this Action.

As it suggests, that this is still in preview! So kindly take a note of that.

Search Rows (Preview)

  1. Search rows is an Action in the Dataverse connector and you’ll be able to see it like this

Enable Relevance Search

  1. Let’s assume you went ahead and used this connector in your Flow without having Relevance Search enabled in your D365 CE organization, you’ll see the Search Rows throw the below error.


    And the error is described as –

  2. To make Search Rows work, Relevance Search must be enabled for you Dynamics 365 CE / CRM environment. Head over to the System Settings in Dynamics 365 under Settings > Administration > System Settings. And in General tab, look for Relevance Search option, check-mark it and save.


  3. Here’s the full Microsoft Documentation on how to use queries for Relevance Search – https://docs.microsoft.com/en-us/powerapps/developer/data-platform/webapi/relevance-search?WT.mc_id=DX-MVP-5003911

Using Search Rows action

Let’s see how this Action from the Dataverse connector will work –

  1. Now, once you have selected the Search rows action, below are the features which I’ll explain one by one –

  2. Let’s first look at the last item i.e. Return row count. As it says, will result the count of results returned if set to Yes.
    Will return -1 if set to No.

  3. For Search Type and Search Mode to be covered, these need to be explained extensively since it covers several factors. To keep it short for now, I’ve linked the Search Type and Search Mode documentation as below
    https://docs.microsoft.com/en-us/power-automate/dataverse/search#search-type?WT.mc_id=DX-MVP-5003911

    And the short Summary of the same is:
    Search Type:simple | full” There are 2 types called as simple and full. Default = simple. Both have different functions within them that you can use on the Search Term.

    Search Mode: “any | all” By Default – any. This defines if any criteria of the Search Term is to be considered or all must be true based on different syntax and operators used.
  4. Row Count denotes how many records should the results Return which is standard across other Dataverse actionss.
  5. Also, Row Filter uses OData style filtering which we’ll omit in this example to keep it simple. 😊
  6. Now, let’s enter a Search Term and keep it simple, I’ll pick an example: “Contoso“.
    Next, look at the Table filter – If I leave it blank it’ll search for Contoso across all Tables in Dataverse.


    Result to show from all Tables as per the above Search rows term –


    Now, I’ll add account and contact (I do have some records in the Opportunity as well which has the keyword ‘Contoso’. So those will be filtered out)


    And the result will be as follows –


    And if we look at the Raw Outputs to see how data is retrieved, we get the below –

  7. Now, let’s look at Sorting.
    Now, in the Sort by filter, I’ll enter the field name ‘name‘ and desc as the order of the Sort.
    And then, we’ll check the results


    And the results were as below –


  8. Next, let’s look at Facet Query. basically, it drills down on the Results which are already returned as a part of the main query and serve as metadata for the same to gather similar information together.
    Here’s how I enter a Facet query – Ex: contact.address1_city. Meaning, it’ll return Address 1: City from all the returned Data and store it under Facet Query.


    Now, when we run this, we’ll get the following results –


  9. Let’s look at what Skip Rows does.
    It’ll only omit the records from the already returned Results. Example: Even if the Result returned 5 records, it’ll Omit/Skip first x records. But still show that the Results returned are whatever the Query is supposed to return.

    In the below example, out of 5, I’ll skip 4 rows.



    And when you run the Query, you’ll find that the Record Count is 5, but only 1 entry was available in the Output.



Which Columns are Searchable?

There are 2 points to keep in mind to know and configure which all columns will the Search be performed on.

  1. If you are aware of how you can configure the Quick Find views in Dynamics 365 CE, same is applicable here since this works off of Relevance Search itself.
    In any Table/Entity’s Quick Find view, make sure the columns are selected in the Add Find Columns

  2. The ones selected in Find Columns are the ones on which the Search will be performed.

Here’s a YouTube video I made to demonstrate the same –

Hope this was useful!

Here are some more Power Automate / Cloud Flow posts you might want to check –

  1. Suppress Workflow Header Information while sending back HTTP Response in a Flow | Power Automate
  2. Invalid XML issue in Dataverse connector for List Rows action | Fetch XML Query | Power Automate
  3. FetchXML Aggregation in a Flow using CDS (Current Environment) connector | Power Automate
  4. Invalid type. Expected Integer but got Number error in Parse JSON – Error at runtime after generating Schema | Power Automate
  5. Asynchronous HTTP Response from a Flow | Power Automate
  6. Validate JSON Schema for HTTP Request trigger in a Flow and send Response | Power Automate
  7. Tag a User in a Microsoft Teams post made using Power Automate
  8. Converting JSON to XML and XML to JSON in a Flow | Power Automate
  9. Formatting Approvals’ Details in Cloud Flows | Power Automate
  10. Office 365 Outlook connector in Cloud Flows showing Invalid Connection error | Power Automate
  11. Read OptionSet Labels from CDS/Dataverse Triggers or Action Steps in a Flow | Power Automate
  12. Setting Lookup in a Flow CDS Connector: Classic vs. Current Environment connector | Power Automate Quick Tip

Thank you!

Suppress Workflow Header Information while sending back HTTP Response in a Flow | Power Automate

Let’s see how we can suppress critical information about the Flow to the caller HTTP Application while sending back a response.

Scenario

The Flow will send Header information back while sending a HTTP Response to the caller HTTP Request.

  1. Here’s how the Flow will look –

    Note, that we are sending a Custom Header along as well.

  2. And along with this info, the follow Header information will also be visible in the calling application. We’ll use Postman to check this scenario.

    You’ll see that a lot of Headers have been sent back along with our Custom Header.


    And you’ll see whole lot of Headers that expose the Flow details in these Headers.

    Let’s see how we can cut this information short and not send back any unnecessary information to the HTTP Request we’ve received.

Suppress Workflow Headers in HTTP Request

Let’s see how with a simple tweat, we can avoid sending the Workflow Header information back as HTTP Response.

  1. We go to the Settings of the HTTP Request Trigger itself as shown below –


  2. Now, you see the option, Suppress Workflow Headers, it will be OFF by default.


    Your turn it ON,


  3. Now, let’s try to make a call again and see the difference. Going back to the Postman, we Send another request post you’ve saved the workflow changes above.

    We see that only 10 Headers are sent as opposed to 24 as seen without suppressing the info.

  4. And if we see what Headers are sent back, we see along with our Custom Header, only the ones which are required will be sent suppressing all the critical information.

    This is a good practice to suppress Workflows that don’t give out information in production scenarios which are not required by end application.

I’ve also made a quick YouTube video of the same. Check it out as well –

Hope this was useful!

Here are some more Power Automate / Flow posts you might want to check –

  1. Invalid XML issue in Dataverse connector for List Rows action | Fetch XML Query | Power Automate
  2. FetchXML Aggregation in a Flow using CDS (Current Environment) connector | Power Automate
  3. Invalid type. Expected Integer but got Number error in Parse JSON – Error at runtime after generating Schema | Power Automate
  4. Asynchronous HTTP Response from a Flow | Power Automate
  5. Validate JSON Schema for HTTP Request trigger in a Flow and send Response | Power Automate
  6. Tag a User in a Microsoft Teams post made using Power Automate
  7. Converting JSON to XML and XML to JSON in a Flow | Power Automate
  8. Office 365 Outlook connector in Cloud Flows showing Invalid Connection error | Power Automate
  9. FormatDateTime function in a Flow | Power Automate
  10. Make On-Demand Flow to show up in Dynamics 365 | Power Automate
  11. Task Completion reminder using Flow Bot in Microsoft Teams | Power Automate
  12. Secure Input/Output in Power Automate Run History

    Thank you!

Invalid XML issue in Dataverse connector for List Rows action | Fetch XML Query | Power Automate

While using Dataverse connector [formerly known as Common Data Service (Current Environment) connector] for different operations, List Rows is one of the common Actions we use in Flow implementations with Dataverse.

If using FetchXML Query as filter is your choice, there one of the most common issues with an XML is having an Invalid XML due to the special characters in the data we are passing.
Many times, this issue goes unidentified since we end up checking only syntax!

Here’s what you can also add as an additional check to escape the special character scenario in FetchXML query in a List Rows action.

Invalid XML Issue – Special Character

Let’s look at one of the common examples where you’ll see this error on runtime when a FetchXML issue appears

  1. You have a Flow wherein you are using FetchXML query to list records in Dataverse connector using List Records action.


  2. But when happens is, when this Flow Runs, it results in an error on the List Records step.


  3. And if you look at the right hand pane for the error, it could be a Invalid XML error which you would get in Dataverse (or while working in Dynamics CRM if you have experienced in the past).


  4. So, let’s look at what could be wrong in this case among several other reason of using FetchXML and getting syntactical errors.
    If you look at my XML below, it looks like there could be some parameters that have special characters in them and hence, your XML might fail if not anything else.


    Let’s look at how we can resolve the same.

encodeURIComponent() function

As a solution to this, you can use the encodeURIComponent function in Flow to counter this problem –

  1. Now, in ideal cases, you parameters could be coming in from elsewhere which you would add in the FetchXML as parameters.
    Let me store the same in a sample String Variable for now.


    In the Value, I’ll look for an expression called as encodeUriComponent()



  2. Then, I simply enter the value which I’ll pass on to the Fetch XML filter to be used later on. And then I enter the value in the function.


    And it looks like this in your variable.


  3. Now, you just pass this on to the Fetch XML itself.

  4. And now, this should work successfully

Here’ is the Microsoft Docs of the function to encore URI and help streamline special characters – https://docs.microsoft.com/en-us/azure/logic-apps/workflow-definition-language-functions-reference#encodeUriComponent?WT.mc_id=DX-MVP-5003911

Hope this was helpful!

Here are some Power Automate posts you might want to check –

  1. FetchXML Aggregation in a Flow using CDS (Current Environment) connector | Power Automate
  2. Invalid type. Expected Integer but got Number error in Parse JSON – Error at runtime after generating Schema | Power Automate
  3. Asynchronous HTTP Response from a Flow | Power Automate
  4. Validate JSON Schema for HTTP Request trigger in a Flow and send Response | Power Automate
  5. Converting JSON to XML and XML to JSON in a Flow | Power Automate
  6. Office 365 Outlook connector in Cloud Flows showing Invalid Connection error | Power Automate
  7. FormatDateTime function in a Flow | Power Automate
  8. Trigger Conditions not working in a Cloud Flow? Here’s Why | Power Automate Quick Tip
  9. Read OptionSet Labels from CDS/Dataverse Triggers or Action Steps in a Flow | Power Automate
  10. InvalidWorkflowTriggerName or InvalidWorkflowRunActionName error in saving Cloud Flows | Power Automate Quick Tip

Thanks!!

FetchXML Aggregation in a Flow using CDS (Current Environment) connector | Power Automate

Getting the count of records or averaging is one of the most commonly used Aggregate Functions in programming. FetchXML queries too facilitate aggregation. So here’s how you can utilize the same in a Flow using Common Data Service (Current Environment) connector [Because I’m waiting for it to be renamed to Dataverse Connector yet 😊]

To know about Fetch XML aggregation, here’s the Microsoft Docs link for the same – https://docs.microsoft.com/en-gb/powerapps/developer/data-platform/use-fetchxml-aggregation?WT.mc_id=DX-MVP-5003911

Scenario

Let’s assume, you want to get the count of records from a Common Data Service (Current Environment) connector. Here’s how you can do the same using existing Aggregate Functions provided by Fetch XML.

Disclaimer: This is of course, not he only way to get get the aggregate functions, you can implement custom logic after you’ve retrieved all the data as well.

  1. Here’s the Fetch XML I’ll be using to retrieve all the Accounts from the Dataverse environment.
    I’m using List Rows action from the connector which is this


    And this is the query which I generated from the Advanced Find in D365 CE


  2. Below are the changed I must make to work with Aggregates in Fetch XML.
    in the <fetch>, I’ll set aggregate=”true”
    And the columns which I’m using the Aggregate function on, I’ll mention the aggregate=”[Aggregate]” alias=”[AliasName]”

  3. Now, this query along won’t run and you’ll get the below error –
    An attribute can not be requested when an aggregate operation has been specified and its neither groupby not aggregate. NodeXml: [FirstAttributeInQuery]

  4. The reason being, since you are using Aggregate, only the columns on which aggregates are applied must exist. Hence, you’ll need to remove the other attributes which don’t have aggregate applied to them.
    |
  5. And the workable FetchXML will now look like this

  6. When you run this, these are the results you’ll get in which you’ll have the aggregate value.

  7. Observe the same below

Parse JSON to read the aggregate

Now, since you’ve got the aggregated results. You can do an extra step to read the value. There are several ways to contain this, but here’s a quick example of how I did it –

  1. Declare a variable. It must be outside of a For Each at all times.

  2. And in the For Each, because I’m selecting the Array inside the value attribute in the Fetch XML results, I can then use the sample data to generate the schema and use it. The loop will anyway run only once.

  3. And I’ll set the variable below

  4. And here’s the final result once you run it. Your scenario of usage may vary.

Hope this was useful!

Here’s a YouTube video I made to summarize this example –

Here are some more Power Automate / Flow posts you might want to check –

  1. Invalid type. Expected Integer but got Number error in Parse JSON – Error at runtime after generating Schema | Power Automate
  2. Secure Input/Output in Power Automate Run History
  3. Validate JSON Schema for HTTP Request trigger in a Flow and send Response | Power Automate
  4. Parsing Outputs of a List Rows action using Parse JSON in a Flow | Common Data Service (CE) connector
  5. Trigger Conditions not working in a Cloud Flow? Here’s Why | Power Automate Quick Tip
  6. Read OptionSet Labels from CDS/Dataverse Triggers or Action Steps in a Flow | Power Automate
  7. Asynchronous HTTP Response from a Flow | Power Automate
  8. FormatDateTime function in a Flow | Power Automate
  9. Tag a User in a Microsoft Teams post made using Power Automate
  10. Converting JSON to XML and XML to JSON in a Flow | Power Automate
  11. Office 365 Outlook connector in Cloud Flows showing Invalid Connection error | Power Automate
  12. Create a Team, add Members in Microsoft Teams upon Project and Team Members creation in PSA / Project Operations | Power Automate

Thank you!!