Loading...

Automatically Create SharePoint Folder Structure Based on Specific Table in Dataverse Using Cloud Flow (Part 3 of 8)

Automatically Create SharePoint Folder Structure Based on Specific Table in Dataverse Using Cloud Flow (Part 3 of 8)
This is the third post in a series of Automating SharePoint Integration with Dataverse using Power Automate. You can check out the other posts via these links (Part 1, Part 2, Part 4Part 5Part 6Part7Part 8)

In my first post, I have explained how to automatically create the SharePoint Document Location using the cloud flow when a new row is added to the Dataverse/Dynamics 365 table. But if you want to automatically create the folder for the tables related to a specific Account or Contact, you need a few additional steps to create the subfolders under the Account/Contact folder.


In this post, you will learn about how to automatically create the SharePoint Document Location as a subfolder under the related Account/Contact folder. The SharePoint folder of the tables related to a specific Account/Contact are created as the subfolders under the Account/Contact folder when the Document Management Settings is configured as below and either Account or Contact is chosen to be based on.

Before we jump into creating the cloud flow for this solution, I would like to explain a little bit about the folder structure based on a specific Account/Contact. As an example, I will use the Case table related to the Contact table (via Customer lookup) for the following ERD as well as the cloud flow below but it can be applied to any other table with document management enabled and related to Account or Contact.
The diagram is similar to the one in my first post but the there are two more additional Document Locations for the Case in this diagram. Since the folder structure is ../contact/«contact name»/«table logical name»/«row name», the SharePoint folder for the Case is created under incident folder under the SharePoint folder for the Contact. Since the Relative URL of the Document Location does not contain "/" character, each folder name between two forward slashes "/«folder name»/" need to be created as the Document Location. Since the incident folder is not related to any specific row, regardingobjectid lookup for that Document Location is empty.


In the second scenario, the Case is related to the Account (instead of Contact) or if the Customer lookup of the Case is empty. When the Document Location is created for this scenario, the SharePoint folder for the Case is created under the root SharePoint document library with the table logical name "incident" like a normal SharePoint folder structure that is not based on a specific table. (Technically, a Case cannot be created with an empty Customer lookup but it is possible for the other Contact lookup on the other tables).


These are all the steps included in the cloud flow for this solution.

The trigger is just on Create of the Case. The folder name is initialised as a variable with the format of «case title»_«incidentid in uppercase without '-'»
toUpper(replace(triggerOutputs()?['body/incidentid'], '-', ''))
Parent Location variable is to store the Document Location GUID to set as the parent for the case folder in the last step.


The next step is to get the URL of the SharePoint site so that the Site Address can be dynamically populated and deployed to different environments without having to be changed. The site URL is then, set to the variable since it will be used in a couple of places.
first(outputs('List_SharePoint_Site_-_URL')?['body/value'])?['absoluteurl']


This is for the first scenario where the SharePoint folder for the Case is created as a subfolder under the related Contact folder. The flow will run these actions when the Customer lookup (customerid) is not equal to Null and the type of the customerid is "contacts". For checking the type of the Customer lookup, you need to use the following expression instead of choosing the Customer (Type) from the dynamic value.
triggerOutputs()?['body/_customerid_type']
The output of the trigger is different from the Get a Row by ID or List Rows actions. Read Alex Shlega's blog post for more details.

First of all, retrieve the Document Location of the Contact related to the Customer lookup value. Then, use the relativeurl from the retrieved Document Location to create the SharePoint folder under the Contact library. In this step, populate the Site Address parameter with the SharePoint Site Address variable.
first(outputs('List_Document_Locations_-_related_to_the_Customer_Contact')?['body/value'])?['relativeurl']

Then, List Rows action to retrieve the existing "incident" Document Location under the specific Contact. If there is no existing one, create the Document Location for the "incident" folder under the Contact SharePoint folder by setting the Parent Location with the result from the step above. This Document Location is not related to any particular data so that the Regarding lookup will be empty. Set the GUID of the newly created Document Location in this step into the Parent Location variable.
first(outputs('List_Document_Locations_-_related_to_the_Customer_Contact')?['body/value'])?['sharepointdocumentlocationid']
If there is an existing Document Location, set the Parent Location variable with retrieved value.


This is for the second scenario where the Case is not related to the Contact and the SharePoint folder is created under the root "incident" SharePoint document library. Just like the other SharePoint step, populate the Site Address parameter with the SharePoint Site Address variable. For the List of Library parameter, populate with the name of the library "Case" and not to be confused with the URL of the document library "incident"

The next step is to retrieve the parent Document Location for the Case document library and set it to the Parent Location variable.
first(outputs('List_Document_Location_-_Parent_Document_Location_for_Case')?['body/value'])?['sharepointdocumentlocationid']


Lastly, create the Document Location for the Case with the Parent Location variable.


Summary

Automatically creating the SharePoint document folder for the tables as subfolders under related Account/Contact can be achieved by covering two scenarios:
  1. Create the SharePoint folder under the related Account/Contact folder
  2. Create the SharePoint folder under the root document location if there is no related Account/Contact

Published on:

Learn more
Linn's Power Platform Notebook
Linn's Power Platform Notebook

A blog about Dynamics 365 and Power Platform (canvas apps in Power Apps and flows in Power Automate).

Share post:

Related posts

Power Automate – View property value expanded inline in the new cloud flow designer

We are announcing the ability to view property value expanded inline in the new cloud flow designer in Power Automate. This feature will reach...

1 day ago

Substring vs Slice in Power Automate

Power Automate has quite a few string functions that can help you sort out textual issue. Two of these functions are Substring and Slice. Do y...

3 days ago

Power Automate – Debug easily into condition actions at runtime

We are announcing the ability to debug condition actions by displaying values passed into the dynamic content and expressions at runtime in Po...

3 days ago

Run a generative action in Power Automate

Recently the Run a generative action was added to Power Automate. To make this action work is not as easy as you might hope.

4 days ago

Send community news by email using Power Automate

Yesterday on Reddit I was asked about how to collect and send community news articles from websites using Power Automate so that news letters ...

4 days ago

4 ways to filter data in Power Automate

Yesterday, I looked at how to filter data when making an API call using the HTTP action and noticed that filtering data isn't always straight ...

6 days ago

Segments in Customer Insights - Journeys: Bulk delete with Power Automate

Currently its not possible to delete segments more than one at a time from the view in Dynamics 365 Customer Insights - Journeys. Why? I don’...

11 days ago

Organise UI Elements in Power Automate Desktop

In recent months, I have begun using Power Automate Desktop for automated testing within Power Apps. In this post I will have a look at how w...

12 days ago

How to read Global Choice/Optionset Metadata from Dataverse from Power Automate using HTTP Dataverse WebAPI Call

In this blog You will learn How to read Global Choice/Optionset Metadata from Dataverse from Power Automate using HTTP Dataverse WebAPI Call. ...

13 days ago

How to read Local Choice/Optionset Metadata from Dataverse from Power Automate using HTTP Dataverse WebAPI Call

In this blog You will learn How to read Local Choice/Optionset Metadata from Dataverse from Power Automate using HTTP Dataverse WebAPI Call. W...

13 days ago
Stay up to date with latest Microsoft Dynamics 365 and Power Platform news!
* Yes, I agree to the privacy policy