What’s the problem
Given my role at Microsoft (TSP), I generally have 2 priorities when it comes to daily work:
- Be in-front of customers as much as possible (those of you reading, you guys are awesome)
- Prepare for, or catch up from, those meetings
This means I try to not be in the office as much as possible, and run my entire life out of my outlook calendar.
When I first started, I got caught out by the “impossible travel” scenario a couple times, by team-members booking meetings I can’t possible attend. I was invited to be at opposite parts of the city at the same time or immediately one after the other, like this:
Not their fault, no one can see my calendar apart from “busy”. I kind of got sick of missing these meetings, and had to do something about it.
What’s a solution
One solution is to block out “travel” in my calendar, which works great. Since doing so, I’ve basically stopped the impossible travel situation. However, for a given week my calendar usually looks something like this:
If I spent my time manually blocking out travel for each meeting, I would end up spending all my time blocking out travel for each meeting and not actually doing anything.
I thought surely there’s a way to automate this?
Enter Logic Apps
Logic apps are one of those super cool things where I hear something new each day. Every day a colleague tells me something they can do, and I think “that is so cool, I didn’t think that was possible”.
Given their flexibility and the sheer volume of connectors for getting data and actions in and out of a given system, I was positive I could craft something for my calendar.
We want to do something like this:
WHEN a new calendar invite is received THAT has a location AND subject is NOT "Travel" (This will cause a recursive loop) AND timezone is "AUS Eastern Standard Time" THEN: Create an out-of-office "Travel" event, 30 minutes prior to invite, for a duration of 30 minutes AND Create an out-of-office "Travel" event, immediately after invite, for a duration of 30 minutes
Office 365 integration
We first must connect into our o365 tenant as ourselves (principal), for our calendar:
- Create a new logic app
- Click “blank app”
- In the connectors window, choose “Office 365 Outlook”
- In the search-box, type “event”. Select “When a new event is created (V2)”
- Click it, click sign in. Sign in with your identity.
- Choose your calendar, select your frequency, I’ve done 3 minutes because logic apps cost next to nothing to run.
Now we have to setup the conditional logic above, for checking for valid events. Thankfully, the
time zone are all fields automatically pulled out of the invite we can use on the fly.
- Click new step
- Type ‘control’, click on ‘control’, click ‘condition’
- Add 3x rows:
- Value: Location -> Is not equal to -> (leave this box empty)
- Value: Subject -> Is not equal to -> “Travel”
- Value: Location -> Is equal to -> “AUS Eastern Standard Time”
In your conditional true, insert 2x “Create event V2” Outlook steps. The tricky part is getting the “+30 minutes” time. For a given event, you have to use this expression:
- Click the starttime or endtime field
- Click ‘Expression’
- Use this code:
addMinutes(triggerBody()?['Start'],-30)for -30mins before, note the negative 30
addMinutes(triggerBody()?['End'],30)for +30mins after
Instead of typing the rest, I’ll just paste a screenshot:
Seeing it in action
Below shows what it looks like in action:
- Events that get created then modified get double/triple travel booked (but stacked parallel, so not to big to quickly delete them)
- Events which have a meeting room get travel added
Yes, you could use
Microsoft Flow to do this. This was more of a validation exercise about logic apps themselves and how much awesomeness they contain, and how easy it is to do basically anything with them. This concept could also be extended into meeting rooms etc. for intelligent management there, other o365 (or d365?) resources, on-prem resources etc. it’s really up to your imagination.
Logic apps have also recently announced isolated instances (Integration Service Environment) for vnet integration, and with biztalk vnext integration it provides a clear path forwards for on-prem connectivity and a seamless integration experience.
Overall, works perfect and requires much less administrative overhead then doing it yourself. A+ 5/5 would logic app again.