Power Automate Is Awful
It’s Not Code
There’s no source code. You can’t do an environment-wide (or even flow-wide) find and replace to switch out an old manager’s email for a new one. As you might suspect, that also means no version control. Once you hit save, it’s completely overwritten the old version. This is fine for simple things where code would get in the way. For complex processes that require ongoing work and are subject to change, it’s horrible.
It’s always live. Even when a flow is disabled, it’s always “live”, which means it needs to be error-free (not bug-free, a big differece) at all times. Effectively, you can’t save the editor until it “compiles”. If you spend four hours doing custom logic and formatting, and all that’s left is an issue with the connection (which probably can’t be fixed without reloading), too bad. Better get started copying and pasting all the code changes you made into a text file and hoping you can put them back later.
The New Editor
The new editor for power automate does not work correctly.
It tries to insert Copilot sometimes (though it’s not nearly as annoying as in other products), which seems to be people’s primary issue.
My main issue is that it absolutely destroys HTML formatted emails.
Often when you add html to the email (in HTML mode), it will work fine. But the next time you try to edit it, the flow will think it’s back in rich text mode.
As a result, when you save it, there will be <br>
s and <p></p>
s all over the final email, visible as plain text, not rendered into the proper new line and paragraph separators.
If you want to edit the html, you need to put it back into HTML mode. But when you do that, it turns the HTML markup into escaped HTML markup like this
<p class="editor-paragraph">@{outputs('Email_formatting_header')}<span> <br>Dear
</span>@{body('Update_item_3')?['PurchaseRequester']?['DisplayName']}<span><br></span>@{body('Update_item_3')?['PID']}<span>
has been processed and ordered. In case of alarger orders the Pilot Plant will be informed. <br>Purchase
Title: </span>@{body('Update_item_3')?['PurchaseTitle']}<span> <br><b> PACKING SLIP: Upon receipt of
goods, packing slip must be provided via PDF scan to purchaser, and then place original in top tray on
purchaser's desk.</b><br>In the event there is no packing slip, provide tracking information
frompackaging. <br><!-- PO information --><div
class="table"></span>@{body('PO_Table')}<span></div><!-- vendor info --><div class="table">
<table> <thead> <tr><td>Vendor</td> <td>Purchse Amount</td>
<td>Cost Center/CAR/WBS</td> </tr></thead> <tbody>
<tr><td></span>@{body('Update_item_3')?['VendorNameLookUp']?['Value']}<span></td> <td>
</span>@{body('Update_item_3')?['TotalPurchAmt']}<span> </span>@{body('Update_item_3')?['Currency']?['Value']}<span>
</td> <td>
</span>@{coalesce(body('Update_item_3')?['CostCenter']?['Value'],body('Update_item_3')?['WBS_x002f_CAR_x002f_IO'])}<span>
</td> </tr></tbody> </table></div><!-- Products --><div
class="table"></span>@{body('Products_Table')}<span></div></span>@{outputs('Email_formatting_footer')}
</p>
<p class="editor-paragraph"></p><br>
This was not a problem in the old editor. You could have html code blocks loaded from variables doing fancy HTML things, but still edit the rest of the email as rich text. I suspect the new editor does HTML conversion differently, rendering it at edit time instead of run time. This is worse. Much worse.
It will have issues with connections/authentication with no clear way to resolve it - Invalid connection, please update your connection to load complete details - Loading the flow up in the old editor immediately gives the opportunity to fix the connections, and once saved it works fine, even in the new editor.
Yes I know I can use the old editor, but a) there are some things in the new editor that are actual improvements, and b) I’m sure microsoft will take away that option eventually.
Authentication
A month ago I had to change the password on the service account. I’m still suffering the consequences.
I can update the authorization on the environment-wide connection, which every flow uses. Except they don’t. You need to update the connections in each flow individually, and even then it’s a tossup for whether it will work. It might save fine in the editor. And then you try to actually run the flow and it tells you the action is unauthorized. You might look for a more thorough error than 403, thinking you’ll find something useful. Best I can offer is
Action 'Send_an_email_(V2)' failed: Error from token exchange: Runtime call was blocked because connection has error status: Enabled| Error, and office365 is in the block list
Microsft, you’re so close. Pleeease. Just let me edit it as normal code, and fix your stupid connection/authentication issues