Best Practices updating a Flow used by a PowerApp

Á við um: Dynamics

SYMPTOMS/SUMMARY


​After updating a Flow, calls to that Flow from PowerApps start failing. 

  • If a new input is added to a Flow without a PowerApp being updated the Flow will fail with an error message like 

Flow missing input error

Unable to process template language expressions in action 'Send_me_a_mobile_notification' inputs at line '1' and column '1900': 'The template language expression 'triggerBody()['Sendmeamobilenotification_Text']' cannot be evaluated because property 'Sendmeamobilenotification_Text' cannot be selected. Please see https://aka.ms/logicexpressions for usage details.'. 

  • If the connections required to run a flow change, an error complaining about connections should appear like 

In PowerApps it may look like 

PowerApps Flow failure error display

Or in Flow 

PowerApps Flow failed run

Unable to process template language expressions in action 'Send_an_email' inputs at line '1' and column '1899': 'The template language expression 'json(decodeBase64(triggerOutputs().headers['X-MS-APIM-Tokens']))['$connections']['shared_office365']['connectionId']' cannot be evaluated because property 'shared_office365' doesn't exist, available properties are 'shared_flowpush'. Please see https://aka.ms/logicexpressions for usage details.'. 

  • ​If a response output is removed, PowerApps will treat the value as blank and the PowerApp will behave unexpectedly.

CAUSE


To invoke a Flow from PowerApps, PowerApps needs to know what inputs the Flow needs, what connections to supply to Flow and what outputs a Flow will return.  PowerApps store this information in the definition of your PowerApp.  This creates a binding between a version of a PowerApp and the Flows used in it.  Changing any of these three aspects of a Flow can break all previous versions of PowerApps that integrate with that Flow.  To fix an affected PowerApp or to make use of one of these Flow changes the PowerApp needs to be updated.

Types of changes most likely to break a PowerApps ability to call a flow include

  • Adding a new Ask in PowerApps token
 
 

Adding a PowerApps token

  • Adding a new connection for example by adding a new action from a Connector that was not previously used like the SharePoint Connector

 

Adding a connection in Flow

  • Changing an existing connection for example changing an existing connection to a new connection

Changing a connection in Flow

  • Removing an output from a Respond to PowerApps actions

Removing a Respond to PowerApps output in Flow
​​​​​​​

Other changes to the inputs or outputs will not break the integration between PowerApps and Flow but will require the PowerApp to be updated so that it can use them. 

Resolution/Work Around


Changing a live PowerApp 

Once a PowerApp is published it is always recommended to make copies of Flows used by the PowerApps to make any updates.  Any update to a Flow referenced by a live PowerApp has the potential to break existing users.  Do not delete or turn off the existing Flows until all users have been upgraded to the new published version of the PowerApp.   

Flow Save as dialog

In the new version of the PowerApp reference the new Flows.  When the new version of the PowerApp is published, users will start to use the new Flows with the correct inputs, outputs, and connections.  This will prevent Flow updates for new versions of PowerApps from affectingusers of the existing version. 

Changing a PowerApp development version 

While developing a PowerApp making changes to a Flow not used by a live version of the PowerApp is easy.  After making changes to the inputs, outputs, or connections of a non-published Flow simply reselect the Flow from the Flows Pane.   

Updating a Flow definition in PowerApps

This will update the definition of the Flow in the PowerApp validating that the correct input, outputs and connections are used in the PowerApp.   

Users of the PowerApp will not begin using the new Flows until the PowerApp is published soupdating the existing Flow is ok until it is used by a live version of the PowerApp.