A Power User friendly method of connecting hundreds of sites, list and libraries to a single Flow
We need to get this disclaimer out of the way first - this approach uses SharePoint Designer workflow as a glue - the main reason for this is because SharePoint Designer workflows (being old generation technology) can be deployed across site collections via PowerShell scripting without too much trouble, as long as they remain small and don’t need regular maintenance.
This approach isn’t necessary for deploying a Flow to a dozen sites. But if we are talking potentially hundreds of project sites. Those become scenarios that aren’t currently covered well, and would need workarounds such as this one.
Let me know what you think in the comments.
The Problem
There are many ways we can view this problem of “deploying Flows across many lists, libraries, sites and site collections”.
This problem has several issues we may not need to consider:
First, we have Export and Import, as well as Send Flow as a Copy. These are simple, manual steps. That can’t be automated.
But at some point - we will hit the 600 Flow limit (this isn’t per environment, this is per account)
We will need to reconfigure URLs specific to each Flow.
As these copied Flows are customized from the master version which makes updating and maintaining them very tricky.
When redeploy a Flow - existing connections must be maintained.
When deploying Flow to a new site - new connections must be configured (or existing connections re-used).
If we are ever in a situation where we need to deploy a new update an existing Flow but now with additional new Connections. God have mercy.
If we think perhaps just delete existing Flows and re-deploy as new, we’d kill any existing runs.
So there are alternate approaches as well… what if we just don’t deploy hundreds of copies of the same Flow?
A more developer focused approach is to handle SharePoint subscriptions directly ourselves
May be you want to try Logic Apps - I think you should test if the cost at scale is acceptable
Wait for support in the official Solutions framework eventually - which may or may not solve all our problems. I honestly don’t know. I don’t think we are even working on this problem yet.
A new solution?
The method in this blog post is a different idea - we will borrow SharePoint Designer workflow’s various tools for deploying cross site collections and have it invoke the same Flow to perform the main task.
This was posted as #FlowNinja hack 91
https://twitter.com/johnnliu/status/1121055884749053953
Let’s begin
Warning: this hack involves the use of SharePoint Designer. Now before you all run off screaming, there's a good reason why we want to try this method: mass deployments. So here we go
1. Make a Request trigger Flow. With a simple compose.
2. make SPd 2013 reusable workflow
3. first action - add SPd HTTP web request to the Flow request trigger
4. need to configure both request body and request header
5. If we don't blank out authorization this happens DirectApiAuthorizationRequired: The request must be authenticated only by Shared Access scheme
Add SPd Workflow to a Library and a List
6. now publish and add this to a List and a Document library
7. upload a file see SPd workflow trigger
8. see HTTP Request flow trigger
The Test is successful. Next copy the JSON we received in Flow
9. add Request schema from the previous successful run
10. change Compose to match request body
11. add a new item to a sharepoint list (that has the same SPd workflow attached)
12. the same Flow re-triggers.
Take a breather, have some tea
13. at this point, there's several more things to do - consider whether we want excessive logging. SPd workflow is simple - once it is working there's not a lot more to tweak, perhaps we want more context values. While still within this site collection, republish will update it.
Package the SPd Workflow for cross site collection
Let's package this workflow for cross site collection warp jump.
14 remove workflow association to list Achievements - because we don't have that list everywhere, only Documents. 15 export WSP to desktop
16 go to new site collection - this can be SharePoint or group sites or project sites.
17 site settings - upload solution to gallery - activate solution
18 site settings - site features -activate feature (this associates with Documents)
19 test with upload new file in new site collection
20 flow triggers, context of Flow is new site url.
21. note there was an error with the SPd workflow after it called HTTP - because I didn’t activate the SharePoint Workflow feature, Workflow History list isn’t available in the new site collection.
Consider Step #13 and whether you’d want to delete all the logging steps before exporting Flow
21. now we are in Flow. Re-fetch the item and go crazy.
Yes, in Step #4 we deliberately chose the context values that will allow us to re-configure Flow to pick up the item
Conclusion
Con:
The pain of writing a SharePoint Designer workflow again
Difficult to update deployed SPd workflows - but the one we have here is very simple (two build dictionary and a HTTP request)
Pros:
A simple lightweight SharePoint Designer workflow can be deployed across many site collections via PnP-PowerShell, or as part of PnP-Provisioning.
Activate the solution, and then activate the feature (this will create the workflow associations)
All the events from associated SharePoint libraries will call a single Microsoft Flow - this is where we can customize to our heart’s content.
I don’t think this approach should be written off - it should be evaluated and may suit your situation well. I also think in a possible future when cross-site Flow deployments can be done easier - we may have different Flow triggers invoking our one Flow. So there exists an upgrade path forward.