In my previous blog post, I share how you can reference an Option Set field in a Flow condition step. This time round I'm showing you how to configure a Two Option field in a Flow condition step.
In Dynamics 365 workflows we can reference a Two Option field in a workflow step.
This field provides two options. Each option has a number value of 0 or 1 corresponding to a false or true value. Each option also has a label so that true or false values can be represented as “Yes” and “No”, “Hot” and “Cold”, “On” and “Off” or any pair of labels you want to display.
How many ways can you go wrong with this in Flow? You'd be surprised. A true #WTF moment.
I experienced the frustration and wanted to share this in case someone else is going through this same pain.
Welcome to another WTF blog post where I share with you how to replicate this in Flow.
What did not work and what worked
Here's a table summary of the different values I tried in my expression.
Summary
For the Two Option value of 0, use false.
For the Two Option value of 1, use true.
Both are applicable to Dynamics 365 connector or CDS connector.
Tweet if you came across this post so that I know I helped you out 😁
A field type that can be referenced in a Dynamics 365 workflow condition step is an Option Set. As defined in the https://docs.microsoft.com site:
This field provides a set of options. Each option has a number value and label. When added to a form, this field displays a control for users to select only one option.
In Dynamics 365 workflows we are used to configuring a condition step in a clicking manner when referencing an Option Set.
How do I replicate this in Flow?
Welcome to another WTF blog post where I share with you how to replicate this in Flow.
Two Dynamic Contents to choose from
When referencing an Option Set in Flow through a Dynamics 365 connector, there will be two options (no pun intended) presented to you.
1. This will reference the number values of the options in the Option Set
2. This will reference the the labels of the options in the Option Set
Using Dynamic Content No.2
This is displayed as <field name> Label in the Dynamics Content selector. In my scenario, I see Priority and Priority Label.
Selecting Priority Label is a valid approach as it allows you to configure the Flow condition step by entering the label of an option such as "VIP" in the criteria of the expression.
Why this is useful
If the person configuring the Flow is not familiar with customizing Dynamics 365 they will only know of the options displayed in the Option Set field through their regular interactions with the field on a daily basis. You simply navigate to the field, then click on the Option Set field to see the options that can be selected.
Why this is not useful
Using the Priority Label will not safeguard the Flow from future changes to the label of the option. As seen in my vlog, if I were to change VIP to Very Important, the Flow will not pass the expression of the Flow condition step the next time it is executed. This is due to the Flow condition step being told in the expression that the Priority Label criteria must be VIP, not Very Important.
Using Dynamic Content No.1
Priority is another valid approach in the Flow condition step when the trigger is a Dynamics 365 connector. Rather than using the label of the option the number value will be used instead.
When using the number value in Flow, the commas need to be removed. If you leave the commas of the number value after copying from the field configuration record in Dynamics 365 and pasting into Flow the expression will fail. So remove the commas!
NOTE: If using CDS connector you will only be able to use Priority in your expression.
Why this is useful
If in the future the label value changes, such as from VIP to Very Important, the Flow condition step will continue to pass the expression because the number value is used, rather than the label.
Why this is not useful
The person configuring the Flow is required to know the number values of the options in the Option Set fields. The person may not know or have the required access to view the option set number values. However one could argue that only certain users in Dynamics 365 or CDS would only ever be allowed to configure workflows in the first place, therefore would have a security role that would provide them with the ability to do so.
Summary
If you are restricted to using the Dynamics 365 connectors because you don't have a Flow Plan 1 or Plan 2 to use CDS connectors, recommend to use the Dynamic Content that will reference the number values of the options in the Option Set instead of the Dynamic Content that will reference the labels in a Flow condition step. This way if the label is changed in the future, the Flow condition step will continue to execute as the number values are being referenced.
If you use a CDS connector as a trigger for the Flow, then you can only use the Dynamic Content that will reference the number values of the options in the Option Set.
Whether it is Dynamics 365 connector or a CDS connector, you will need to know the number values of the Option Set for your Flow condition step. This requires access to viewing the Field configuration record in Dynamics 365 or in CDS.
When you configure a Dynamics 365 workflow to be triggered on update of a record, it is defined by fields that have changed.
How do I replicate this in Flow?
Welcome to another WTF blog post where I share with you on how to replicate this in Flow.
Can I do this using a Dynamics 365 trigger?
The answer is no. Not what you wanted to hear right?
When you use the Dynamics 365 trigger of "When a record is updated" or "When a record is created or Updated" the Flow will always execute because you are unable to define the fields that the Flow needs to validate as a result of an update in Dynamics 365. There's two reasons why this is not ideal.
Reason one
If you have other Flows that are executing for the same entity where you have selected the "When a record is updated" trigger, all your other Flows will execute. If there is a Flow that is updating a field whenever an update has occurred for the record, you'll experience the Flows to continuously execute.
I experienced this when I was experimenting with what I could do with Flow in the beginning for my Dynamics 365 Saturday New Zealand presentation. I had a few Flows executing for the same entity whenever the record is updated and one of them ended up being continuously triggered.
Reason two
If you have a large volume of Flows that will execute in a month and you are on the free plan of Flow, i'ts possible that you may reach that limit. You don't want to burn through your threshold.
Oh dear. What can I do then in Flow?
If you have a Flow Plan 1 or Flow Plan 2, you are entitled to use Premium connectors. A Premium connector that is available to use is the Common Data Services connectors. I showed you this in WTF Episode 1.
When you select the "When a record is updated" CDS trigger, you'll see Show advanced options. When you click on this, the step will expand where you can select your field(s) to define when the Flow is executed.
Does it work?
Yes as seen in my vlog. If you update any other field that is not defined in the trigger step of Flow, the Flow will not execute. The moment you do update a field that is defined in the trigger step of the Flow, the Flow will execute. This means the number of Flows executed whenever a record is updated will be low in comparison to when a Dynamics 365 trigger is used.
Summary
If you want to replicate the same functionality that you are used to in Dynamics 365 workflows where it will only start when fields have been updated, you must have a Flow Plan 1 or Flow Plan 2 licence to use the CDS connector. In the "When a record is updated" CDS trigger, you can define the fields through advanced options.
If you don't have a Flow Plan 1 or Flow Plan 2, you will need to create some additional fields to prevent other Flows that reference the same entity to continue to execute. However the Flow will still execute whenever an update has been made to the record.
Another #FlowFever blogger to follow
Thanura, aka T or Thunder ⚡ has a blog post that provides a side by side comparison of Dynamics 365 connectors and CDS connectors. I recommend you check it out as it's a great blog post that will help you understand the limitations.
T blogs about Flow in the context of Dynamics 365 in our community, follow him.
Another type of configuration that we are familiar with in Dynamics 365 workflows is Does not contain data and Contains data in a condition step. This is typically used to check whether a field is populated with data for the next workflow steps to take place.
When you use basic mode, you'll be presented with the click and select style you're familiar with in Dynamics 365 workflows however what is missing is Does not contain data and Does contain data.
It is not as obvious on how to achieve this in Flow compared to Dynamics 365 as the two are visible in Dynamics 365 workflows.
Welcome to another WTF post on replicating Dynamics 365 workflow functionality in Flow!
Replicating Does not contain data
In Flow we have to edit in Advanced mode instead of using basic mode. I covered Advanced mode for AND OR statements in my previous blog so check it it out if you haven't already done so.
When you select the field you're after in basic mode, switch to advanced mode. Your expression will look something like this:
The expression to use for Does not contain data is
@empty(triggerBody()?['_productid_value'])
You replace the condition expression with empty
Remove the comma
Remove the field reference of ' '
The step will now pass the function with the logic of checking that the field does not contain data, in other words is NULL.
Replicating Does contain data
To achieve the same for Does contain data, use an additional condition of not( ).
@not(empty(triggerBody()?['_productid_value']))
This will now pass the function with the logic of checking that the field does contain data, in other words is not NULL.
Summary
Use edit in Advanced mode to achieve Does not contain data or Does contain data in Flow. You'll need to enter the expression as outlined in this post within the Condition step in Flow.