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

How to make your Excel connector retry in Power Automate

Last week, I came across an issue with actions failing in the Excel connector. Making try Excel Connector retry actions, was slightly harder t...

4 hours ago

Power Automate - [Dataverse]

Power Automate is used to automate operations through triggers and actions.Triggers: Added, Modified, Deleted, Manual (Instant), ScheduledActi...

1 day ago

Power Automate – Analyze process mining results with a web client

The Analyze process mining results with a web client feature for Power Automate has reached general availability. This feature allows you to v...

11 days ago

Fixed – Flow not getting triggered / incorrect callback registration record (Power Automate / Dataverse)

Recently, we faced an interesting issue, where we updated an existing flow in our Dev, basically we removed the Filter Rows condition and depl...

14 days ago

Power Automate – Organize desktop flows using tags

We are announcing the ability to organize desktop flows using tags in Power Automate. This feature will reach general availability on Septembe...

17 days ago

Asynchronous flows and Concurrency Control in Power Automate

In this post I will look at Asynchronous flows vs Synchronous flows, Concurrency controls and multiple response actions in Power Automate flow...

20 days ago

2 Actions to run script in Excel from Power Automate flows

Within Power Automate, it has been possible to run scripts in Excel using the Run Script actions. Did you know that the is a Run Scripts from ...

26 days ago

Power Automate Cloud Flows in Power Pages

What are Cloud Flows in Power Pages? Cloud flows allow you to: You configure this using the Power Pages + Power Automate integration via the “...

26 days ago

When Do We Use the ActivityParty.AddressUsed Property for Emails in Power Automate (Dataverse)

When we automate emails in Dataverse using Power Automate, we deal with something called Activity Party. It manages the participants of an ema...

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