Find recurring meetings that have ended with Microsoft Graph

Calendar with date circled

When I joined the Microsoft Graph team I set up recurring 1:1 meetings with each of my teammates and a number of people from other teams within our group. As luck would have it those meetings defaulted to have an end date ~1 year from when the series was created.

As you might guess, I forgot to extend some of those meetings and then after they reached their end date I had to go through my calendar to find which ones were impacted and extend them.

<Update 2023-02-02>I confirmed with the PM for this endpoint that the Recurrence property does not support filtering at this time. As such you will need to filter client-side through your own means.</Update>

The below query is intended to find all recurring meetings on your Exchange Online calendar. It is not a complete solution as I haven’t figured out the exact syntax for recurrence property with an end date in the past. Hopefully someone finds this useful and if you have enhancements to help with filtering please feel free to share in the comments.

Click here to try this out in Graph Explorer

Ex. query

https://graph.microsoft.com/v1.0/me/events?$filter=type eq 'seriesMaster'&$select=id,subject,recurrence

Note that type = ‘seriesMaster’ will only find the series and not individual meeting instances which may have exceptions from the original recurrence pattern.

-Frog Out

Make things that are “linkable”

Similar to my recent post about “share early and share often” I also encourage others that are creating things (documents, videos, blog posts, digital artwork, etc.) to make them “linkable”. Let me describe what I mean and why it is important.

If you create a document for a new project specification and then store it on the desktop of your computer, how would you go about sharing that document to a coworker?

You could email / FTP / etc. the full file, but now when you make changes how do they get those changes? Instead, if you share the document to a cloud storage location and then send them a link, now they have access to the latest version.

In a similar way, when I have an idea that I want to share with others (like this post) I’m putting it in a location (Yammer, my blog, cloud storage, etc.) that I can easily link to and share with others. Same goes for tips and tricks videos that I’ve posted to TikTok.

Conclusion

By making things I create “linkable”, now the next time a topic comes up in conversation, I can quickly grab the link and share with others.

How are you making things you create “linkable”?

(PS, how many links did you count in this post…?)

-Frog Out

What are you working on? (share early and often)

Hands working on clay project

I’ve always enjoyed “Show and Tell Fridays”, “Brown bag sessions” (i.e. bring your lunch and a presenter shares about a topic), and hackathons to see what cool things my peers are working on. Not only do I get to see / hear interesting projects and solutions they are building, it also sparks creativity in me to work on my own projects.

During our September 2022 company-wide hackathon I had the opportunity to collaborate with folks from multiple areas of Microsoft (Teams, Outlook, .Net Interactive, M365 Profile, and more) on interesting projects. What was really interesting to me is that 2 of these projects started via tweets on Twitter. A random message from myself was picked up by one engineering team for 1 project and a thread from a peer about “wouldn’t it be cool if…” started another project.

Ultimately, I highly recommend that you take the time to share early and share often your ideas, interests, side projects, and more. You never know how that may lead you and your peers to build the next innovative product / feature / etc.

For those interested, here is a link to one of the hackathon projects I worked on for a “Microsoft Graph extension for .Net Interactive”. For those unfamiliar, .Net Interactive Notebooks allow you to mix text (Markdown) and runnable code snippets (multiple languages supported) in a notebook style format. This custom extension allows authenticating to Microsoft Graph via 3 different authentication flows (possibly more to come) and run Microsoft Graph SDK queries easily.

I’ll be sharing more about this on my blog, M365 platform community call, and a few other places as it continues to develop. For now follow / star / fork / etc. the GitHub repo for more updates.

Microsoft Graph extension for .NET Interactive Notebooks
https://github.com/microsoftgraph/msgraph-dotnet-interactive-extension

-Frog Out

Drip by drip: cumulative progress over time

Starting July 1st of this year I set some goals for myself to get back into exercise routines and improve my overall health. Many of these are things that I had done before the pandemic but had not gotten back into.

  • Walk / run 4-mile (6.4 km) race before end of 2022
  • Workout for at least 10 mins a day, 4 days a week
  • Lose 10 pounds (4.5 kg) by end of 2022

Rather than dive head-first into these goals, I made small adjustments to my daily / weekly schedule and continued adding every few weeks, but always being consistent.

Much of the inspiration for this approach came from the book Atomic Habits by James Clear which I read earlier this year.

https://www.goodreads.com/book/show/40121378-atomic-habits

Ex.

  • Installed a phone app for “core body workouts” that I use for 10-15 mins in the morning
    • I didn’t have high hopes for the app but here I am 40+ days later making real progress, repeating 3 days on and 1 day off for rest (even through vacations with family).
  • Walk on my home office treadmill at least 2-3 times a week
    • I now don’t let myself watch nighttime TV unless I’m walking on the treadmill. This motivates me to walk longer but also avoid eating unhealthy foods after dinner.
  • Reduce after hours snacking
    • This used to be a frequent problem, but with the other areas I’m seeing results with losing 7 pounds (3.2 kg) already, and I’m motivated to not gain that back by eating unhealthy foods.
  • Signed up for a 4-mile race in Oct
    • I’m already registered and working my way up in distance (see above for nighttime TV motivator for compounding effect).

Progress started out small and slow with the workouts, but overall I’m feeling in much better shape and plan to keep this up through the rest of the year. I enjoy that it was small adjustments that started to compound the gains I was seeing across the board.

What positive habits have you started up this year that have made an impact?

-Frog Out

Management for the Non-manager: Part 1

As part of my org’s FHL (fix hack learn) week, I wanted to explore Management training for Non-managers. I found a great learning path on LinkedIn Learning called “Become a Manager“. Here are a few lessons so far from the copious notes I’ve been taking.

  • Impact of the team
    • “Make the shift from me to we
    • Important perspective for managers as well as principal or higher individual contributors (IC)
  • Transition plans
    • If you are moving from IC to manager (or between management roles), define transition plans before and during changes
  • Communications
    • Communicate more often than you may think you need to.
    • Build relationship with team members (1:1s, recognize wins / failures as a team, etc.)
    • Share constructive feedback in private but in a positive manner
  • Delegate tasks / projects
    • Delegate strategically, even if it challenges a person
    • Ensure team has the clarity, training, and support to succeed
  • Civility and candor
    • When communicating, have a balance of civility (empathy) and candor (directness)
    • Without candor, communication lacks substance and manager may be seen as just “a nice person”
  • Feedback
    • When sharing feedback, avoid generalities (ex. “I know you can be a better salesperson”)
    • Be concrete and give examples (ex. “I’m confident you can increase sales by X% next quarter to show you are improving as a salesperson”)
    • Think SMART goals to create clarity
  • Decision making style
    • Share your decision making style ahead of time so team knows what to expect
    • Styles
      • Autocratic – Manager makes decision and informs team
      • Collaborative – Seek input from team then make decision
      • Democratic – Team makes the decision
    • If using Autocratic or Collaborative, explain your decision afterwards (if appropriate) and stick to decision
  • Integrity
    • Fairness relates to equal opportunities, not necessarily equal outcomes or distributions
    • Share credit widely as well as pains / failures
  • Authenticity
    • Confidence is projected through what you say, body language, etc.
    • Competence is demonstrated through work you produce
    • Being Authentic = open, humble, show humanity, and always “model the way”
    • Promote your employees more than yourself
  • Lieutenant / 2nd in command
    • Informal relationship for someone who can be your stand-in when needed
    • Shares feedback, mobilizes support, can take opposing perspective (plays devil’s advocate), and potential candidate for succession plan
    • They are not:
    • A clone of you, a “yes person”, nor an enforcer of manager’s commands
  • Resiliency
    • Understand how to get back up when knocked down
      • (I call this “filling your cup up after being drained” or “energizing your batteries”)
    • Diet, exercise, and sleep are basics to take care of yourself
    • Proactively reflect on yourself / team
    • Choose to spend time with other resilient, positive, and successful
  • Take notes
    • Easier to refer back to what was discussed / decided
    • Can be shared with others asynchronously

This post is only a partial copy of my notes from ~2hrs of training, but as you can see, writing / recording things helps for re-enforcing concepts but also being able to share afterwards.

I have more courses to complete in the learning path and will try to share out notes in a later post. Feel free to share in the comments other recommended training in the “management for non-managers” space.

-Frog Out

Power Automate Sample – Custom Microsoft Teams Reminder for Meeting

In this post I’ll walk through a sample workflow I created for sending out Microsoft Teams messages for a team sync meeting. This is part of my Spring 2022 Fix Hack Learn (FHL) project.

Requirements

  • Send individual reminder to teammates (35+) to capture “weekly accomplishments” for next sync meeting
  • Schedule to run weekly (Fridays)

Solution

The high-level architecture for the solution I prototyped is as follows:

  • Trigger
    • Recurrence – weekly on Fridays
  • Actions
    • Create variables for tracking date when flow is run and “next Tuesday”
    • Create copy of template file and rename to desired filename
    • Get list of team members
    • For each team member
      • Send Teams message with link to above file

Below is a sample of the Teams message that is sent.

Challenges

Dynamic links in Teams chat message

When using the HTML designer for the Teams “message”, you are only able to specify static links. In our scenario we need to include a dynamic link to the upcoming document for weekly accomplishments.

Through some investigation online (link) we found that this can be achieved using the Code View. Once in Code View, you can specify an HTML anchor element <a href=…> and include the “link to item” for the file in SharePoint.

Rename files in SharePoint Online document library

Power Automate has a SharePoint action for copying a file, but you have little control over naming the file (ex. replace, new copy with an incremented integer, etc.). Separately, there are currently no native actions for renaming a file.

Instead, I found a quick workaround (link) to copy the contents of an existing “template” file and then create a copy using the contents of the template file. In the process we can provide whichever name we desire.

Calculate date for “next Tuesday”

As part of the renaming of file, I wanted this flow to be able to dynamically calculate the date for the next Tuesday on the calendar. Aside from being an interesting calculation I was personally curious about, this would also allow sending out the reminder on any day of the week.

After much searching online, I found solutions for calculating this in Excel (example), but that made use of a different set of functions that are not available in Power Automate. In the end I decided not to spend too much time on this and instead hard coded the calculation to be Friday’s date + 4 days. See below for the formula.

formatDateTime(addDays(variables('currentDate'),4), 'yyyy-MM-dd')

Conclusion

Hopefully this example can give you inspiration if you need a similar solution for sending out customized reminders of a recurring event or meeting. I was surprised at how quickly I was able to prototype the first iteration of this (less than 1 hour) and then iterate on it with a few enhancements before the day was done. I’m a big fan of how easy Power Automate makes it to automate and simplify manual processes. If you have any suggested improvements, share them in the comments.

-Frog Out

Resources

Flow does not generate clickable links for dynamic paths
https://powerusers.microsoft.com/t5/General-Power-Automate/Flow-does-not-generate-clickable-links-for-dynamic-paths/m-p/789336#M63152

Power Automate Rename File
https://www.enjoysharepoint.com/power-automate-rename-file/

How To Round Date To Previous Or Next Specific Weekday In Excel?
https://www.extendoffice.com/documents/excel/2663-excel-roud-date-to-nearest-sunday.html