top of page

Power Automate - Get Email from CreatedBy in Azure DevOps

Hey kids! So I’ve recently been asked to create an automated flow using Microsoft Flow (Power Automate) that is attached to Azure DevOps. We want to send a confirmation email to the person who created the work item.

You would think this would not be hard.


IT IS.




I searched for days on how to do this another way but was unable to figure it out without using a ridiculous process. So! In case others are in the same boat - here are the steps to get the email address from any of the Identity fields in an Azure DevOps work item.


The CreatedBy object looks like : "UserFirst UserLast <useremail@gmail.com>"

So we have to strip the text name and carrots. In C#, this is super-duper easy!!


var strippedName = name.Substring(name.IndexOf('<') + 1, name.Length - 1);

Not so in this program. Boooooooooo :(


First, you do need to have the upgraded version of Flow (Power Automate). We’ll refer to it as Flow from now on.

Step 1 - Create a new automated flow





During this step, you’ll be able to connect your Azure DevOps instance to your Flow account for dynamic usage.

Step 2 - Add the “When a new work item is created” task




Fill in the project and other details. This is another place I couldn’t find a way to use a flow universally for all projects. If anyone knows of a way, please shoot me a message or add to the comments!


Step 3 - Add “initialize variable"



Add a variable for the index of the opening carrot (<)


Add a variable for the index of the closing carrot (>)


Add a variable for the email string coming from Azure DevOps


Add a variable for the length


Add a variable to trim the opening carrot (<)


Add a variable to trim the last char



Step 4 - Add "Set variable"


We want to get the value of the system object "CreatedBy". This variable will set the index of the first carrot


The next variable sets the index of the closing carrot


Then we set the email length


Next we subtract 1 from the length


Next, we set the index of the open carrot, adding 1 to it so it strips out the carrot itself


Finally we put all the pieces together to get just the email from the system object CreatedBy




That is a ridiculous amount of steps to get an email. Way. Too. Many. Are you listening, Microsoft?? If they had customer service or read any of the community ideas, I'd probably complain.


Anyways, I hope this post can help someone else who may be on the struggle bus. I'm sure there are faster ways with less variables to do this - but I was just irritated, so I didn't refactor (I know, rookie move). The people that will maintain this flow are not developers so I tried to make it easy for them to follow. They get it, so I'm alright with that




Bonus thing I found:


It took me quite a few tries to figure out what to compare using custom fields from my Azure DevOps work items. So as a bonus, here is a quick way to compare if you need to check against 'selected value' in a list.



Include your condition and open the Expression section. Find the name of your custom object and replace what I have below. I'm checking to see if my custom field "Request Type" is equal to "Test"




Cheers!!



10 Comments


Guest
Sep 27, 2022

Hi, I am getting this error at set variable stage "Unable to process template language expressions in action 'Set_variable' inputs at line '0' and column '0': 'The template language function 'indexOf' expects its first parameter to be of type string. The provided value is of type 'Null'."

Like
DigitalLiv
DigitalLiv
Nov 07, 2022
Replying to

Hi! Try the solution presented on this forum - https://powerusers.microsoft.com/t5/Building-Flows/Flow-failing-due-to-Null-value/td-p/55527

Like

Guest
Jul 04, 2022

You can use the split function where Custom_Requestor is the ADO Identity: split(split(triggerOutputs()?['body/fields/Custom_Requestor'],'<')[1],'>')[0]

Like
DigitalLiv
DigitalLiv
Apr 18
Replying to

You would use this split as a function. Like the last example on the post - instead of ‘contains(‘ you would use the split function as stated above.

Like

Guest
Dec 18, 2021

Awesome thanks!

Like
bottom of page