Tuesday, December 14, 2021

Graph API News: API to list all Microsoft Teams in a tenant is now available


So far, to list all Microsoft Teams teams in an organization programmatically, you had to work with the groups API. I believe that the preferred approach has been to filter all groups by the resourceProvisioningOptions property to get only those groups that have teams. The following is an example of this request:

GET /groups?$filter=resourceProvisioningOptions/Any(x:x eq 'Team')

However, this request returns a response that is partially helpful. On the one hand, it returns all groups that have teams. On the other hand, additional requests are needed to return team specific properties, such as isArchived, specialization, and webUrl.

The Microsoft Graph Teams team has just introduced a new BETA API that allows users to list all teams in a tenant:

GET /teams

The not-so-good part of this implementation is the limited number of properties (id, displayName, and description) that a call to GET /teams return. Basically, it gives you less data than working with the groups API that, for example, also returns the group/team’s visibility. Nevertheless, progress is progress 😀 and I appreciate the invest. In general, I hope the list of supported properties returned from a GET /teams call will increase rapidly. This would help developers to reduce the number of additional requests to retrieve all teams related properties and consequently improve applications. 

The following example shows the response of a GET/teams request. You will notice that the response body also contains a set of other properties that are returned with null, which represents a behavior similar to a call to GET/joinedTeams.

{
   "@odata.context":"https://graph.microsoft.com/beta/$metadata#teams",
   "value":[
     {
         "id":"b4f36c5f-c66e-4212-9b87-8817dabd8230",
         "createdDateTime":null,
         "displayName":"Project Alpha",
         "description":"All about the Project Alpha.",
         "internalId":null,
         "classification":null,
         "specialization":null,
         "visibility":null,
         "webUrl":null,
         "isArchived":null,
         "isMembershipLimitedToOwners":null,
         "memberSettings":null,
         "guestSettings":null,
         "messagingSettings":null,
         "funSettings":null,
         "discoverySettings":null
     },
     {
         "id":"78ee08a5-6c7d-4136-b2ca-78b049738f96",
         "createdDateTime":null,
         "displayName":"Project Alice",
         "description":"All about the Program Alice.",
         "internalId":null,
         "classification":null,
         "specialization":null,
         "visibility":null,
         "webUrl":null,
         "isArchived":null,
         "isMembershipLimitedToOwners":null,
         "memberSettings":null,
         "guestSettings":null,
         "messagingSettings":null,
         "funSettings":null,
         "discoverySettings":null
     }
   ]
}

For more details on this API, see List teams.

Keep in mind that the use of Microsoft Graph BETA APIs for production applications is not supported because BETA APIs are subject to change. I am crossing my fingers that this specific API will indeed change, for example, all teams related properties will be returned with proper values 😊

Thanks for reading,
Jarbas Horst

Tuesday, November 30, 2021

Upgrade from classic authentication experience in Azure Functions

The classic Authentication / Authorization experience in Azure Function apps will be removed from the Microsoft Azure portal in December 2021. As a result of a lack of Microsoft documentation, we don't know currently what side effects this change will bring to the way how authentication will be handled for Azure Function apps that remain in the old model. To avoid potential issues, I've followed the Microsoft instructions and upgraded to the new authentication experience. For more details, see how to configure your Azure Function app to use Azure Active Directory login

The following steps describe how I upgraded from the classic authentication experience in a secured Azure Function app:

1. Go to the Azure portal > Your secured Azure Function app  > Authentication

2. If the Authentication page shows a warning indicating that the classic Authentication experience will be removed and it includes an Upgrade button, it means that the classic Authentication experience is still in use:


However, if you experience an UI that is different than the one demonstrated in the previous image, the Azure Function app already uses the new experience and no further actions are required.

3. To upgrade to the new Authentication experience, click on the Upgrade button. Now, read the instructions carefully and click again on Upgrade:


4. Wait for the upgrade to complete, which might take a few seconds.

5. After the upgrade to the new Authentication experience has finished, you will see an UI that is similar to the one demonstrated in the following image:


The upgrade process is done if you have followed all the previous steps.

Thanks for reading,
Jarbas

Tuesday, September 28, 2021

Graph API News: API to add members in bulk to a team reached GA

As an active consumer of Microsoft Graph endpoints in the solutions I manage, I’m always happy when beta endpoints reach general availability (GA). That happened again in the Microsoft Graph Teams APIs. The endpoint to add members in bulk to a team has officially reached GA 🥳 after being for almost nine months only available via beta.

This API allows developers to add multiple users within a single request to a specific team. Previously, developers had to make multiple single requests to add many users to a team which can be a slow process. Also, the error handling mechanism is for sure one additional advantage that this API offers. If a request fails to add one or more users to a team, you get an HTTP response that indicates the users that could and couldn’t be added. For example, if you try to add a user that doesn’t exist in your organization anymore, the HTTP response will contain a NotFound code for that specific user.

The following example shows a request to add members in bulk to a team:

POST https://graph.microsoft.com/v1.0/teams/b55bd212.../members/add
{
"values":[ { "@odata.type":"microsoft.graph.aadUserConversationMember", "roles":[ ], "user@odata.bind":"https://graph.microsoft.com/v1.0/users(9fa90cf1...')" }, { "@odata.type":"microsoft.graph.aadUserConversationMember", "roles":[ "owner" ], "user@odata.bind":"https://graph.microsoft.com/v1.0/users(5e07f5b3...')" } ] }


For more details on this API, check out the official documentation.

Thanks for reading,
Jarbas

Tuesday, August 31, 2021

The Microsoft Azure Cosmos DB security flaw and the impact on customers

On August 12, 2021, the cyber security researcher Wiz reported to Microsoft a vulnerability in Microsoft Azure Cosmos DB that potentially allowed intruders to gain access to customer’s database by using the Cosmos DB primary read-write key. According to Microsoft, the flaw was related to a data visualization feature called Jupyter Notebook. In a blog post, Wiz pointed out that this feature was introduced in 2019 but it has been enabled by default for new DBs since February 2021. What made me think whether my customers or my environments could have been affected.

In an official statement, Microsoft shares that this security issue was fixed immediately to keep the customers protected.

On August 29, 2021, Wiz published a very good blog post called Protecting your environment from ChaosDB that goes deeply and covers topics such as Who is affected, Find out which Cosmos DBs are affected by this vulnerability, and Actions to be taken (short-term and long-term actions/recommendations). If you use Cosmos DB in your applications, I recommend you to have a look at the following blog posts to better understand the overall situation and reach out the correct decision for your business scenario:


Better safe than sorry 😊

I ended up regenerating the primary read-write key of my Cosmos DBs. I also took this opportunity to regenerate the primary read-only key as well as the secondary read-write and read-only keys of all my Cosmos DBs to ensure all keys are new and my data is protected.

Sunday, August 22, 2021

Awarded the Microsoft MVP in Office Development - 2021/2022

The doorbell rang and someone from my family opened it. I knew the postman was supposed to deliver something special for me on that day but I wasn't sure whether he/she was at the door. I started thinking, "Maybe it is a friendly neighbor or a postman who isn't delivering the package I’ve been waiting for." Although I was keen to go and see what was going on, I couldn't because I was in the middle of a meeting.

Finally, the meeting was over; and I walked downstairs like a kid in a candy shop. The package was for me and the sender was Microsoft. Together with my family I opened the package and a beautiful “THANK YOU” appeared. The MVP award for 2021-2022 has just arrived!

I’m delighted to receive the MVP award also this year. 2020 was definitely exceptional and I hope the near future will allow us more and more to get back to what we used to call normal 😊 I’m also looking forward to meeting the community in person at events again. This is something I miss most about our awesome community!

This blog post represents an opportunity for me to say thank you to people who keep inspiring and motivating me:

  • Chris O’Brien: You’ve been an MVP for 14 consecutive years. Congratulation 🥳 Thanks for all the content you've been sharing with us via your blog, events, social media, and so on. You've been a source of inspiration to me.
  • Jeremy Thake: Although you aren't an MVP anymore, you keep contributing to our community with the awesome Microsoft 365 Developer Podcast. Thank you and Paul Schaeflein for the content you share and the speakers you invite. Also, thank you for the great work you’ve done on the Microsoft Graph docs.
  • Vesa Juvonen and Waldek Mastykarz: The Microsoft 365 PnP Weekly is a success and you guys have been playing a very important role in impacting our community.
  • A huge thanks to all of you who has been sharing your knowledge with us. As Vesa Juvonen says, "YOU ARE AWESOME".
I also want to say thanks to the Valo Teamwork team for the peer programming, the brainstorming, and innovation sessions we have. It’s been a pleasure to work with you and to be part of Valo. Thanks also to the Microsoft Graph docs team for the tireless and amazing work you do and for the huge impact you have in our community. Very special thanks to my wife and kids for everything 😊 I loved each and every second we spend together ❤

#MVPBuzz





Sunday, June 27, 2021

Graph API News: Tag support in Microsoft Graph APIs

The Microsoft Graph Teams team has just released new API support for interacting with tags in a team. Developers can now list, create, get, update, and delete tags. Additionally, support for listing, getting, and deleting members from tags in a team is also available.

Tags in Microsoft Teams provide a simple way for user categorization based on common attributes. For example, I’ve created tags in my development teams to reach Designers, Developers, Testers etc. After a tag is created, users can @mention it in a channel. For example, a chat message that contains @Designers reaches the group of users specified in the @Designers tag. For more information about tag management in Microsoft Teams, see Manage Tag in Microsoft Teams.

The APIs support application permissions and currently they’re only available as BETA endpoints. Keep in mind that BETA APIs in Microsoft Graph are subject to change and production usage isn’t supported.

The following examples show the HTTP requests for listing, creating, getting, updating, and deleting tags associated to a team.

Get a list of the tags:

GET https://graph.microsoft.com/beta/teams/{teamId}/tags

Create a tag in a team:

POST https://graph.microsoft.com/beta/teams/{teamId}/tags

Read a tag:

GET https://graph.microsoft.com/beta/teams/{teamId}/tags/{tagId}

Update a tag:

PATCH https://graph.microsoft.com/beta/teams/{teamId}/tags/{tagId}

Delete a tag:

DELETE https://graph.microsoft.com/beta/teams/{teamId}/tags/{tagId}

The following examples show the HTTP requests for listing, getting, and deleting members from a tag in a team.

Get a list of tag members in a team:

GET https://graph.microsoft.com/beta/teams/{teamId}/tags/{tagId}/members

Get details of a tag member in a team:

GET https://graph.microsoft.com/beta/teams/{teamId}/tags/{tagId}/members/{tagMemberId}

Delete a member from a tag in a team:

GET https://graph.microsoft.com/beta/teams/{teamId}/tags/{tagId}/members/{tagMemberId}

I assume the roll out for these new APIs is still taking place. So, no worries if you can’t use them yet in your environments! I’m eager to learn more about it and consider possible implementation scenarios for the products I manage.

Thanks for reading,
Jarbas

Monday, April 19, 2021

Speaking at Beetroot webinar about Employee Onboarding in the Digital Age

I'm looking forward to speaking at Beetroot AG webinar on April 21st, 2021.

Since the administration of Covid-19 vaccines is a slow process in many countries, several organizations are still looking for a digital solution to onboarding challenges in times social distancing is the need of the hour. Regardless of the ongoing pandemic, flexible work is here to stay as it helps to overcome demographical and other timely challenges and brings additional benefits for both employees and employers. In cooperation with Daniel Schnyder (Co-Founder and Managing Partner at Beetroot AG, consulting company in Switzerland), I have organized a free webinar about onboarding experience. We will address cultural, organizational, and psychological aspects of an onboarding process. Thanks Mario Niederhauser (work and organizational psychologist at Beetroot) for helping us preparing the webinar’s content.

Both pre-boarding and onboarding are fundamental for a good employee orientation. If these processes are not well planned and executed, contract termination might be a consequence. Along with the topics already mentioned in the introduction of this blog post, we will show how Microsoft 365 empower organizations during the employee onboarding process. Although, the Microsoft 365 platform does not replace essential human aspects in an onboarding process, it offers excellent tools that combined with 3rd-party can leverage the way how talents start at companies.

Let's get in touch if you're also going to participate in this event!


Event information:

Registration page in German

Thursday, March 25, 2021

Speaking at HIRSCHTEC webinar about onboarding process in times of social distancing - Recap

Last week I held another webinar about onboarding experience in times of social distancing. The more I reflect on this topic, the more I want to discuss with others about it. The ongoing pandemic has forced us to change our ways of working. Working from home is no longer an option, but for many the only way to go. This also impact onboarding processes where the onboarding experience happens in a hybrid or completely remotely.

From my point of view, one of the biggest challenges currently is to ensure good communication between the organization and new employees. At the end of the day, it is not only about getting new talents up to speed, but making them feel welcome and proud of working in the organization. Microsoft 365 has good tools that can help HR departments and team leaders to create a structured and consistent onboarding process where the manager, IT and HR departments, the mentor and finally the new talent can participate and collaborate.

In my last webinar, I talked to attendees of the HIRSCHTEC webinar about the different roles in the onboarding process as well as presented them an innovative way for employee onboarding using Microsoft Teams. I also showcased how this process can be automated and simplified using a third-party solution. While getting the webinar ready, I worked closely to Anna Luft and Malte Zimmermann. Thanks Anna and Malte for the coordination and special thanks to Malte for being my co-speaker in that webinar.

Wednesday, February 10, 2021

Speaking at SharePoint Klubi about Employee Onboarding in the Digital Era

Odotan innolla SharePoint Klubissa puhumista 💛 I'm looking forward to speaking at SharePoint Klubi on February 11th, 2021.

SharePoint Klubi is an initiative from Sininen Meteoriitti (now Valtti Kumppanit) consultants to share the latest news about Microsoft 365 ecosystem with their customers. I will be speaking about Employee Experience in the context of employee onboarding. The onboarding process plays a central role in the overall employee experience. If this process is not well planned and executed, the new talent might decide during the onboarding process to not continue working at the company or the company might end up after the probation period with someone who doesn't have the right skills for the position. 

Microsoft recently announced Microsoft Viva as a solution to increase employee experience. This is indeed a timely topic and requires attention as the so called "new normal" will not disappear completely after the current global pandemic. Well, at least, I believe that remote work will become more and more common in the future because of its flexibility and possible cost saving factors for companies.

I want to say thank you to Valtti Kumppanit consultants for this opportunity. Let's get in touch if you're also going to participate in this event!


Event information:

Home page in Finnish


Tuesday, February 9, 2021

Speaking at I4-YOU webinar about Employee Onboarding in the Digital Age

I'm looking forward to speaking at I4-YOU webinar on February 10th, 2021.

I4-YOU is a consultancy company from Netherlands focused on delivering real solutions to their customers. Tomorrow, I will be speaking with Maurits Mes (Adoption Specialist at I4-YOU) about employee experience with a focus on employee onboarding in times when working remotely has become the new normal. We will also showcase how Microsoft Teams and Valo Teamwork can increase the onboarding experience.


Working closely with the I4-YOU team has been very inspiring. Iris van Sligtenhorst (Marketing Specialist at I4-YOU), Maurits and Peter de Graaf (CEO at I4-YOU) have been very cooperative and professional with the webinar organization. We have been planning the webinar already since December 2020 and I am really happy about the time we spent together as well as for the content we created.

Let's get in touch if you're also going to participate in this event!


Event information:

Monday, February 8, 2021

Webinar: H2H approach to leadership and employee experience


In times of social disconnection, it becomes apparent how important leadership skills are for the wellbeing and a successful employee experience. Daniel Anderson and Henna Ojala will be addressing this topic in an expert talk about human-to-human approach to leadership and employee experience. I have been working on the organization of this webinar with the Valo Marketing team and I am so glad about it. From defining the marketing strategy, to selecting the speakers and helping with the webinar’s content, working closely with Johanna Riva (Events and Marketing Specialist at Valo) in this project has been an amazing experience! I am also proud of having Daniel Anderson (awarded as a Microsoft Most Valuable Professional recently) and Henna Ojala (a passionate Customer and Employee Experience Leader and Advisor) as speakers. They put together a webinar content that you just can’t miss out.

Microsoft announced a few days ago Microsoft Viva as a new Employee Experience Platform. Even before knowing about Microsoft Viva, we already noticed the importance of a good employee experience as a success factor for the challenges we have been facing nowadays and decided to create this free webinar with useful content for HR departments and team leaders in general.

Thanks Johanna Riva, Daniel Anderson and Henna Ojala for the awesome work you have done so far! I am looking forward to attending the webinar tomorrow and learning from your experience.

Free webinar registration: https://www.valointranet.com/events-all/how-to-lead-remove-work/

Support for channel moderation in Microsoft Graph

Microsoft release recently support for channel moderation via Microsoft Graph Teams APIs. This allows administrators to read and apply channel moderation settings programmatically. The feature itself has already been there since a while. However, API support wasn’t available in Microsoft Graph before. In this blog post, I will demonstrate how to use this new functionality and what limitations I faced while testing this new approach.


Benefits of channel moderation

A Microsoft Teams team consists of one or more channels. A channel is the place where chat based communication and content sharing happens. Previously, team members or everyone (including guests) have been able to start a new channel post, which represents channel moderation equals OFF. Now, team owners are capable of turning channel moderation ON which allows them to limit the posting of new posts to only moderators, with additional control options. This becomes handy if a channel should only by used for announcements or if only a specific users should be allowed to start posts in a channel.

Read channel moderation settings

Reading channel moderation settings is only possible with a Microsoft Graph beta API. Please, keep in mind that beta APIs are subject to change and its usage in production environments are not recommended! That being said, you can use the already existing GET channel API to retrieve the channelModerationSettings which is part of the response. This is what the API and the response look like:

GET https://graph.microsoft.com/beta/teams/{id}/channels/{id}
{
   "@odata.context":"https://graph.microsoft.com/beta/$metadata#teams...",
   "id":"...",
   "createdDateTime":"2020-01-09T19:05:27.498Z",
   "displayName":"Test",
   "description":null,
   "isFavoriteByDefault":false,
   "email":"",
   "webUrl":"https://teams.microsoft.com/l/channel...",
   "membershipType":"standard",
   "moderationSettings":{
      "userNewMessageRestriction":"moderators",
      "replyRestriction":"everyone",
      "allowNewMessageFromBots":true,
      "allowNewMessageFromConnectors":false
   }
}

Note: During my tests, I wasn’t able to get moderation settings of the General channel! The moderationSettings object was always returned with a value of null

Applying channel moderation settings

In case you want to apply channel moderation settings programmatically, you can either update an existing channel or apply the moderation settings while creating a new channel. Note that currently only beta API support is available! The example below shows how to apply moderation settings while creating a new channel:

https://graph.microsoft.com/beta/teams/{id}/channels/
{ "description":"description-value", "displayName":"test 2", "membershipType":"standard", "moderationSettings":{ "userNewMessageRestriction":"moderators", "replyRestriction":"everyone", "allowNewMessageFromBots":true, "allowNewMessageFromConnectors":false } }

Channel moderation is a good improvement in Microsoft Teams and opens new scenarios while giving more control to team members. This new API support brings flexibility to administrators and developers.

I hope it helps!
Thanks for reading my blog post.