In the (fairly) new "Power Automate Management" connector, there are a bunch of actions for managing flows. So far, I've used them to build a set of flows to inventory my flows as well as an "update flow" flow to enable/disable or delete a flow. It's very meta. Anyway, I noticed one of the templates was named "Create a file in SharePoint to save modified Flows in JSON format daily" and that got me thinking that it would be great to export the definition of the flow to a json file before deleting it (in the event that I need to rebuild the flow later). There is a "Create Flow" action that seems like it would be able to take the flow definition and create a new flow from it. However, it doesn't seem to recognize the "File content" of that .json file as valid input.
Here is the action as I have it configured:
And this is the error I get when saving the flow:
Flow save failed with code 'OpenApiOperationParameterValidationFailed' and message 'Input parameter 'Flow' validation failed in workflow operation 'Create_Flow': The parameter with value '"@outputs('Get_file_content')?['body']"' in path 'Flow/properties/definition' with type/format 'String/binary' is not convertible to type/format 'Object'.'.
So, it seems to not recognize the file content as valid json, but I'm not sure why. I mean, the "create file" action is literally just shoving the "Flow definition" in as the content of the file, so going in reverse should (in theory) work.
Any ideas on this?
Now that is pretty cool. Never knew those options were available. In a situation like this, I would use a compose to see that the contents of the variable file content look like. It's obvioulsy not in the format the step is looking for and if you see it first hand, you'll be able to put it right. You can initiliaze a new variable as an object and drop the file content in there too - it might also give you a heads up as to what is wrong.
Interested to see what this one brings.
When I have done a get flow -> create flow with the JSON template being copied from one to the other, it works first time, so the file you have saved must be doing something with the content - the compose will definitely help you identify this. This has given me an idea for staff to be able to request common personal flow type routines - all automated of course.
Well, I got the flow to save and run successfully by wrapping the file content in the "json()" expression (in a compose action). The flow was created, but didn't work. It was a really simple one that just collected a list of groups I own (using the Office Groups connector) and put them into an HTML table. When the new flow was created, the List groups that I owned action shows "Connector not found".
When I first discovered the Power Automate connectors, I dug around for a way to "export" flows, but there is no action for that. Saving the definition to a json file is great, but if I can't use that file to "reconstitute" the flow, it's kind of useless. I mean, the json is kind of readable to understand what the flow does, but rebuilding one manually using that as a guide would be a real pain.
So, I guess I'll stick with turning those unused flows off, at least until I can figure out programmatic way to back them up in a restorable format. It's a shame there's no action to replicate the "export to zip" option in the GUI.
I tried the same process with another flow and got very similar results. Basically, any action (other than "internal"/built-in actions like initializing or setting variables or doing date/time conversions) shows the same "Connection not found" message.
I suspect that the "connectionReferences" array in the Create Flow action may need to be populated in some way, but that would mean parsing that information out of the json definition. I'm not confident enough in my skills to attempt that.
Connection references are an output from the get flow - must be doable 🙂
So, what I tried (which hasn't failed yet, but is still running) is saving the connectionReferences to a multi-line text field in my SP list of flows and attaching the .json file to that item. The new flow I built takes the flow definition from that attached file (wrapping the file content in a "json()" expression) and the connectionReferences from the mlot column (wrapping it in an "array()" expression). Probably won't work, but worth a shot.
OK, it did eventually fail with an error I've never seen before:
Cannot access child value on Newtonsoft.Json.Linq.JValue.
at Newtonsoft.Json.Linq.JToken.get_Item(Object key)
However, I think the connectionReferences part is a bit of a red herring. Using "peek code" to examine the underlying json of the trigger and actions in the original flow vs. the one generated by the "Create Flow" step reveals that some elements in the json are getting moved around. I suspect that is why the connections are, uh, reconnecting.
Stepping back a bit, the point is that through the existing actions in the Power Automate Management connector, we have the ability to save the definition of an existing flow to a json file. We also have a "Create Flow" action that takes the "Flow definition" and builds a flow from it. However, that - for unknown reasons - does not work.
I've followed the pattern in the "Create a file in SharePoint to save modified Flows in JSON format daily" template for creating the .json file with the flow definition, so I assume I'm doing that right. I guess I may be jumping to an inaccurate conclusion thinking that that json file could be used in the "Create Flow" action to create a new copy of that flow.
To restate the question: The "Get Flow" action produces an output of "Flow Definition" which can be saved into a .json file. The "Create Flow" action has an input of "Flow Definition", which does take the contents of that .json file (when wrapped in the "json()" expression) and creates a new flow. However, it appears that the Connections are not properly created in that flow.
Is there a method or mechanism for generating ("reconstituting") a flow from the Flow Definition saved in a .json file? Even if it means saving the connection info in a separate file?
I was able to use the Create Flow action from a text-based Flow definition using a setting like this:
(*)Action: Initialize a variable; Name: flow; Type: string; Value: the Flow Definition json content without quotes.
(*) Action: Compose; Input: (expression) json(variables('flow'))
Thanks to other answers above for the hints.
IMPORTANT: When using the Create Flow you must specify the connectionReferences input fields by using "Create Connection" action, or "Get the list of my connnection" action, so that all connections specified in the Flow Definition json are inputted into the action.
Learn how to create your own user groups today!
Check out the new Power Platform Community Connections gallery!
Join us, in-person, December 7–9 in Las Vegas, for the largest gathering of the Microsoft community in the world.