blog.atwork.at - Governancenews and infos about microsoft, technology, cloud and morehttps://blog.atwork.at/
http://www.rssboard.org/rss-specificationBlogEngine.NET 3.3.5.0de-DEhttps://blog.atwork.at/opml.axdhttps://blog.atwork.at/syndication.axdatworkblog.atwork.at0.0000000.000000How to convert your legacy Yammer Groups into Group connected Yammer Groups<p>Office 365 Groups bring a lot of advantages to a connected workspace within Office 365. For me they are like the glue between all different Office 365 Services. If you provision an Office 365 Group you get an Outlook Mailbox, a SharePoint TeamSite, Planner and much more. When you create a Microsoft Team, you create an Office 365 Group. </p><p>So it is really important for anyone who is working in the Microsoft 365 space to understand how Office 365 Groups work and what impact they have. Together with Microsoft Graph and Azure Active Directory those are the fundamentals of Office 365 to understand.</p><p><a href="http://blog.atwork.at/image.axd?picture=image_4380.png"><img width="450" height="225" title="image" style="border: 0px currentcolor; border-image: none; display: inline; background-image: none;" alt="image" src="http://blog.atwork.at/image.axd?picture=image_thumb_3326.png" border="0"></a></p><p>Yammer has the option to be Office 365 Groups connected as well. This brings SharePoint TeamSites, Planner, Live Events and all other functionality to Yammer. This functionality is here for a while now and applies to all new generated Yammer groups if the following requirements are met:</p><ul><li>All Yammer networks are migrated into one Yammer Network </li><li>Office 365 identity enforcement is turned on</li><li>Office 365 Connected Yammer Groups are enabled</li><li>The group owner must have Office 365 group creation privileges</li><li>Yammer groups needs to have at least one owner</li></ul><p>As soon as your network meets that requirement, you get Yammer connected groups afterwards. </p><p><a href="http://blog.atwork.at/image.axd?picture=image_4381.png"><img width="450" height="215" title="image" style="border-image: none; display: inline; background-image: none;" alt="image" src="http://blog.atwork.at/image.axd?picture=image_thumb_3327.png" border="0"></a></p><p>The official Microsoft documentation can be found <a href="https://docs.microsoft.com/en-us/yammer/manage-yammer-groups/yammer-and-office-365-groups" target="_blank">here</a>. Many customers want to know what happens to their legacy groups and how they can convert / upgrade them as well to get features like Live Events enabled in those groups. The documentation lists that the update of you legacy Yammer groups comes automatically. But what happens if you meet the requirements and you want to update the groups earlier without waiting? </p><p>To trigger the convert process you can try the following trick:</p><p>Move into the Yammer group settings and change the access level of the group from public to private. Save the settings and change it back to public. Voilà – your Yammer group is now connected to an Office 365 Group!</p><p><a href="http://blog.atwork.at/image.axd?picture=image_4382.png"><img width="427" height="332" title="image" style="margin: 0px; border: 0px currentcolor; border-image: none; display: inline; background-image: none;" alt="image" src="http://blog.atwork.at/image.axd?picture=image_thumb_3328.png" border="0"></a></p><p>Enjoy your new converted Yammer Groups!</p><p><a href="http://blog.atwork.at/image.axd?picture=image_4381.png"><br></a></p>https://blog.atwork.at/post/2019/03/13/How-to-convert-your-legacy-Yammer-Groups-into-Group-connected-Yammer-Groups
https://blog.atwork.at/post/2019/03/13/How-to-convert-your-legacy-Yammer-Groups-into-Group-connected-Yammer-Groups#commenthttps://blog.atwork.at/post.aspx?id=5a529c0b-d2af-4dbc-8d2f-65309d660043Wed, 13 Mar 2019 12:00:00 +0000EnglishGovernanceMicrosoft365Microsoft TeamsOffice365SharePointYammermghttps://blog.atwork.at/pingback.axdhttps://blog.atwork.at/post.aspx?id=5a529c0b-d2af-4dbc-8d2f-65309d6600430https://blog.atwork.at/trackback.axd?id=5a529c0b-d2af-4dbc-8d2f-65309d660043https://blog.atwork.at/post/2019/03/13/How-to-convert-your-legacy-Yammer-Groups-into-Group-connected-Yammer-Groups#commenthttps://blog.atwork.at/syndication.axd?post=5a529c0b-d2af-4dbc-8d2f-65309d660043Join us at SPC19 North America!<p>We from <a href="https://www.atwork-it.com/" target="_blank">atwork</a> will are looking forward to see you at <a href="https://www.sharepointna.com/#!/register?utm_term=POHL" target="_blank">SharePoint Conference North America 2019</a> that will take place in May 2019 in Fabulous Las Vegas. Check it out now and save $50 off your registration!</p><p><a href="https://www.sharepointna.com/#!/register?utm_term=POHL" target="_blank">SharePoint Conference North America 2019</a> will take place in the MGM Grand in Las Vegas, Nevada from May, 21st to 23rd, 2019. Add <a href="https://twitter.com/search?q=%23spc19&amp;src=typd" target="_blank">#SPC19</a> to your calendar! See the details at <a title="https://sharepointna.com/" href="https://www.sharepointna.com/#!/register?utm_term=POHL" target="_blank">sharepointna.com</a>.</p><p><a href="https://www.sharepointna.com/#!/register?utm_term=POHL" target="_blank"><img width="600" height="265" title="image" style="border: 0px currentcolor; border-image: none; display: inline; background-image: none;" alt="image" src="https://blog.atwork.at/image.axd?picture=image_4266.png" border="0"></a></p><p>"The SharePoint conference returns to Las Vegas: the world's biggest and most comprehensive event empowering you to achieve more in the modern workplace with Microsoft 365."</p><p>The Microsoft SharePoint product group are co-hosts of SPC19 and we will see Jeff Teper, Dan Holme, Bill Baer, Navjot Virk, Vidya Srinivasan, Adam Harmetz, Omar Shahine, Naomi Moneypenny, Vesa Juvonen and many more. Also, there's an amazing line up of international speakers from the Microsoft MVP community. So, you can expect the latest technologies and news around Microsoft 365 and SharePoint. If you plan to register, <a href="https://www.sharepointna.com/#!/register?utm_term=POHL" target="_blank">use code POHL to save 50$ off your registration</a> or click here:</p><p><a href="https://www.sharepointna.com/#!/register?utm_term=POHL" target="_blank"><img width="236" height="168" title="register-now5[9]" style="border: 0px currentcolor; border-image: none; display: inline; background-image: none;" alt="register-now5[9]" src="https://blog.atwork.at/image.axd?picture=register-now5[9]_1.png" border="0"></a></p><p>We from <a href="https://www.atwork-it.com/" target="_blank">atwork</a> will be there and deliver a workshop and some Breakout sessions. CU in Fabulous Las Vegas in May!</p>https://blog.atwork.at/post/2018/12/27/SPC19-discount
https://blog.atwork.at/post/2018/12/27/SPC19-discount#commenthttps://blog.atwork.at/post.aspx?id=e1a7ea88-ed7e-47ef-8120-822ac77dbc20Thu, 27 Dec 2018 17:00:00 +0000AzureCloudDeveloperEnglishEventMicrosoftMVPOfficeOffice365PowerAppsFlowGovernanceGraphSharePointSecurityatworktphttps://blog.atwork.at/pingback.axdhttps://blog.atwork.at/post.aspx?id=e1a7ea88-ed7e-47ef-8120-822ac77dbc200https://blog.atwork.at/trackback.axd?id=e1a7ea88-ed7e-47ef-8120-822ac77dbc20https://blog.atwork.at/post/2018/12/27/SPC19-discount#commenthttps://blog.atwork.at/syndication.axd?post=e1a7ea88-ed7e-47ef-8120-822ac77dbc20Office 365 Groups Governance Toolkit Part 4-Ownerless Groups<p>In this multi-part series we show you how to handle the <a href="https://github.com/martinagrom/Ignite2018GroupsGovernanceToolkit" target="_blank">Office 365 Groups and Microsoft Teams governance toolkit</a>. The next article cover the governance part of our Groups Governance Toolkit.Imagine your company policy requires at least 2 owners per Office 365 Group or per Microsoft Team. In this part, we want to monitor all groups that are ownerless (orphaned), or do not comply with our organization's policies. The IT department shall get the information of all groups and teams where there are no owners or not enough owners and the possibility to fix that. Read below how this can be accomplished.</p><h2>Get all ownerless (orphaned) groups</h2><p>The goal here is to use our application and a new function code to get a list of all groups that do not comply with our organization's policies. An Azure function runs e.g. every day, reads all existing groups in the Office 365 tenant, and writes each group in a queue. A second function is triggered by that queue and reads all the group details for one group, in that case how many owners are stored for a group. For example, our organization wants to have at least two owners of an active group to avoid ownerless groups. If one owner leaves the company, we can cover that. So, our condition checks if a group has less than 2 owners. If yes, the Admin shall receive a nicely formatted email with all groups which are affected. The following graphics shows that process from a technical standpoint.</p><p><a href="https://blog.atwork.at/image.axd?picture=image_4236.png"><img width="600" height="338" title="image" style="border: 0px currentcolor; border-image: none; display: inline; background-image: none;" alt="image" src="https://blog.atwork.at/image.axd?picture=image_thumb_3189.png" border="0"></a></p><h2>For cache we use an Azure storage…</h2><p>As cache, we need an Azure storage account for providing the queue for the communication between the two functions, and a table for storing the results of the functions. Since we don't know, when the last group has been processed, we use an <a href="https://azure.microsoft.com/en-us/services/logic-apps/" target="_blank">Azure Logic App</a> with a scheduled trigger to create a nice email with the data of the generated table. So, the "GroupsOwnerless" Logic App runs every day at 02:00AM.</p><p><a href="https://blog.atwork.at/image.axd?picture=image_4237.png"><img width="600" height="366" title="image" style="border: 0px currentcolor; border-image: none; display: inline; background-image: none;" alt="image" src="https://blog.atwork.at/image.axd?picture=image_thumb_3190.png" border="0"></a></p><h2>…and an email template as Output, stored in SharePoint Online</h2><p>The email template is stored in SharePoint Online. That's easy to access from a Logic App and the template can be modified easily. Of course, you can use any email style, but we went for a HTML design to transport the data nicely formatted. The template could look similar as here, using a [placeholder] text for the data we want to insert.</p><p><a href="https://blog.atwork.at/image.axd?picture=image_4235.png"><img width="347" height="400" title="image" style="border: 0px currentcolor; border-image: none; display: inline; background-image: none;" alt="image" src="https://blog.atwork.at/image.axd?picture=image_thumb_3188.png" border="0"></a></p><p>So, the HTML file is stored in a SPO document library (or in Azure Blob storage, or somewhere else…).</p><h2>Create the Azure Functions…</h2><p>Create two new Azure Functions as in the article before, and paste the code for <a title="https://github.com/martinagrom/Ignite2018GroupsGovernanceToolkit/blob/master/f3-RunOwnerless/run.ps1" href="https://github.com/martinagrom/Ignite2018GroupsGovernanceToolkit/blob/master/f3-RunOwnerless/run.ps1" target="_blank">f3-RunOwnerless</a> and <a title="https://github.com/martinagrom/Ignite2018GroupsGovernanceToolkit/blob/master/f4-Ownerless/run.ps1" href="https://github.com/martinagrom/Ignite2018GroupsGovernanceToolkit/blob/master/f4-Ownerless/run.ps1" target="_blank">f4-Ownerless</a> into your code window. For communicating, we are using the bindings. Adapt them as provided at <a title="https://github.com/martinagrom/Ignite2018GroupsGovernanceToolkit/blob/master/f3-RunOwnerless/function.json" href="https://github.com/martinagrom/Ignite2018GroupsGovernanceToolkit/blob/master/f3-RunOwnerless/function.json" target="_blank">f3-RunOwnerless/function.json</a> and <a title="https://github.com/martinagrom/Ignite2018GroupsGovernanceToolkit/blob/master/f4-Ownerless/function.json" href="https://github.com/martinagrom/Ignite2018GroupsGovernanceToolkit/blob/master/f4-Ownerless/function.json" target="_blank">f4-Ownerless/function.json</a>. The screenshot below shows the new bindings for <a title="https://github.com/martinagrom/Ignite2018GroupsGovernanceToolkit/blob/master/f4-Ownerless/function.json" href="https://github.com/martinagrom/Ignite2018GroupsGovernanceToolkit/blob/master/f4-Ownerless/function.json" target="_blank">f4-Ownerless/function.json</a>: The queue is accessed by the name "ownerless", the result will be written to table "groupsownerless".</p><p><a href="https://blog.atwork.at/image.axd?picture=image_4238.png"><img width="400" height="373" title="image" style="border: 0px currentcolor; border-image: none; display: inline; background-image: none;" alt="image" src="https://blog.atwork.at/image.axd?picture=image_thumb_3191.png" border="0"></a></p><h2>Finally, the Logic Apps</h2><p>To use the Ownerless Groups functions daily, Azure Logic Apps help. We use two Logic Apps: </p><p>The first simply one, "ClearGroupsOwnerless", deletes all data that might be existing in our target table "groupsownerless". We could delete the whole table and regenerate it, or run through all records and delete them. Anyway, as result, the table shall be empty, so we can insert new data. This Logic app is called from our function code <a title="https://github.com/martinagrom/Ignite2018GroupsGovernanceToolkit/blob/master/f3-RunOwnerless/run.ps1" href="https://github.com/martinagrom/Ignite2018GroupsGovernanceToolkit/blob/master/f3-RunOwnerless/run.ps1" target="_blank">f3-RunOwnerless</a> at the beginning and looks like below.</p><p><a href="https://blog.atwork.at/image.axd?picture=image_4240.png"><img width="381" height="400" title="image" style="border: 0px currentcolor; border-image: none; display: inline; background-image: none;" alt="image" src="https://blog.atwork.at/image.axd?picture=image_thumb_3193.png" border="0"></a></p><p>The second LogicApp "GroupsOwnerless" runs once in the night, reads all records from the Azure table "groupsownerless", creates a HTML table out of it, loads the email template from a SharePoint Online document library and finally creates an email to the IT Administrator. The body placeholder is replaced by the generated HTML table. </p><p><a href="https://blog.atwork.at/image.axd?picture=image_4241.png"><img width="600" height="398" title="image" style="border: 0px currentcolor; border-image: none; display: inline; background-image: none;" alt="image" src="https://blog.atwork.at/image.axd?picture=image_thumb_3194.png" border="0"></a></p><p>As expression in the email Body property, this function is used: <pre>replace(string(body('Load_HTML_template_from_Sharepoint')),'[placeholder]',body('Create_HTML_table'))</pre><p>If you are interested in the differences between Microsoft Flow and Azure Logic Apps look at this Microsoft Ignite session from my fellow MVP’s <a href="https://twitter.com/@ahmadn82" target="_blank">Ahmad Najjar</a>, <a href="https://twitter.com/@sergeluca" target="_blank">Serge Luca</a>: <a href="https://myignite.techcommunity.microsoft.com/sessions/66355?source=sessions#ignite-html-anchor" target="_blank">Microsoft Azure Logic Apps vs. Microsoft Flow: When, how, and where</a></p><h2>Let it run</h2><p>When <a title="https://github.com/martinagrom/Ignite2018GroupsGovernanceToolkit/blob/master/f3-RunOwnerless/run.ps1" href="https://github.com/martinagrom/Ignite2018GroupsGovernanceToolkit/blob/master/f3-RunOwnerless/run.ps1" target="_blank">f3-RunOwnerless</a> is executed, it will run through all groups in the Office 365 tenant, and call <a title="https://github.com/martinagrom/Ignite2018GroupsGovernanceToolkit/blob/master/f4-Ownerless/run.ps1" href="https://github.com/martinagrom/Ignite2018GroupsGovernanceToolkit/blob/master/f4-Ownerless/run.ps1" target="_blank">f4-Ownerless</a> for each group. After some minutes, depending on the number of groups, the Azure table "groupsownerless" should be filled. Then, run the LogicApp "GroupsOwnerless" to receive an email with that output. This could look similar as below.</p><p><a href="https://blog.atwork.at/image.axd?picture=image_4242.png"><img width="574" height="600" title="image" style="border: 0px currentcolor; border-image: none; display: inline; background-image: none;" alt="image" src="https://blog.atwork.at/image.axd?picture=image_thumb_3195.png" border="0"></a></p><p>In the email, we also integrated a link "manage" that leads directly to the Office 365 groups owner management in the Azure portal. So, new owners can quickly be added by an IT Admin (using the Azure authorization).</p><p><a href="https://blog.atwork.at/image.axd?picture=image_4243.png"><img width="600" height="204" title="image" style="border: 0px currentcolor; border-image: none; display: inline; background-image: none;" alt="image" src="https://blog.atwork.at/image.axd?picture=image_thumb_3196.png" border="0"></a></p><p>This process helps to make existing Office 365 Groups and Teams compliant on a daily basis.</p><p>See how to check external users in the next article!</p><h2>Office 365 Groups Governance Toolkit series</h2><ul><li><a href="https://blog.atwork.at/post/2018/11/25/Office-365-Groups-Governance-Toolkit-Part-1-Overview">Part 1 – Overview</a></li><li><a href="https://blog.atwork.at/post/2018/11/26/Office-365-Groups-Governance-Toolkit-Part-2-Provisioning-requirements" target="_blank">Part 2 - Provisioning requirements</a></li><li>Part 3 - Develop Azure Functions</li><li>Part 4 - Ownerless Groups</li></ul>https://blog.atwork.at/post/2018/12/03/Groups-Governance-Toolkit-Part-4-Orphaned-Groups
https://blog.atwork.at/post/2018/12/03/Groups-Governance-Toolkit-Part-4-Orphaned-Groups#commenthttps://blog.atwork.at/post.aspx?id=c6896e07-32a9-4206-9b04-377b9aa3eccbMon, 3 Dec 2018 17:00:00 +0000AzureDeveloperEnglishMicrosoftOffice365Microsoft365PowerShellToolsatworkCloudDevOpsFlowGitHubGovernanceLogic appsMicrosoft Teamsmghttps://blog.atwork.at/pingback.axdhttps://blog.atwork.at/post.aspx?id=c6896e07-32a9-4206-9b04-377b9aa3eccb2https://blog.atwork.at/trackback.axd?id=c6896e07-32a9-4206-9b04-377b9aa3eccbhttps://blog.atwork.at/post/2018/12/03/Groups-Governance-Toolkit-Part-4-Orphaned-Groups#commenthttps://blog.atwork.at/syndication.axd?post=c6896e07-32a9-4206-9b04-377b9aa3eccbOffice 365 Groups Governance Toolkit Part 3-Develop Azure Functions<p>After the introduction of the Office 365 Groups and Microsoft Teams Governance Toolkit and with the necessary requirements we are now looking into Azure Functions. In our group and team provisioning scenario, we need a little code for provisioning of an Office 365 group and a Microsoft team. Serverless computing with an Azure Function provides the optimal solution for that. Follow these steps to create the function we need for our workflow.</p><h2>Why Azure Functions</h2><p>Azure Functions is a solution for easily running small pieces of code in the cloud, named "functions". For our purpose, to create a new Office 365 group (or for running statistics tasks), these functions are perfect. It will take just some (milli)seconds and low compute-time to perform such an operation. If you don't consume a lot of compute time, Azure Functions in the "consumption plan" are more or less cost free, or cost very little money, see <a title="https://docs.microsoft.com/en-us/azure/azure-functions/functions-overview#pricing" href="https://docs.microsoft.com/en-us/azure/azure-functions/functions-overview#pricing" target="_blank">Azure Functions-pricing</a>. For more info about Azure Functions, see <a title="https://docs.microsoft.com/en-us/azure/azure-functions/functions-overview" href="https://docs.microsoft.com/en-us/azure/azure-functions/functions-overview" target="_blank">An introduction to Azure Functions</a>. </p><h2>Create a Function App</h2><p>In the <a href="https://portal.azure.com/#create/hub" target="_blank">Azure Portal</a>, click on "Create a resource" and search for "function". Create a new Function App.</p><p><a href="https://blog.atwork.at/image.axd?picture=image_4192.png"><img width="600" height="261" title="image" style="border: 0px currentcolor; border-image: none; display: inline; background-image: none;" alt="image" src="https://blog.atwork.at/image.axd?picture=image_thumb_3149.png" border="0"></a></p><p>Fill out the Function App form: Provide an App name, the subscription, Resource Group, Hosting Plan "Consumption Plan", a storage account and the region. </p><p><a href="https://blog.atwork.at/image.axd?picture=image_4193.png"><img width="300" height="463" title="image" style="border: 0px currentcolor; border-image: none; display: inline; background-image: none;" alt="image" src="https://blog.atwork.at/image.axd?picture=image_thumb_3150.png" border="0"></a></p><p>The Function App will be ready in about a minute. Go to the resource.</p><h2>Configure the Function App</h2><p>Since our solution is developed in PowerShell, it's important to change the Runtime Stack to Azure Functions v1: Runtime version: 1.0.11959.0 (~1). This can be done in the Function App settings. </p><p><a href="https://blog.atwork.at/image.axd?picture=image_4194.png"><img width="600" height="262" title="image" style="border: 0px currentcolor; border-image: none; display: inline; background-image: none;" alt="image" src="https://blog.atwork.at/image.axd?picture=image_thumb_3151.png" border="0"></a></p><p>PowerShell (based on .Net Core) support was announced at Ignite for Azure Functions v2 and will be available in the next months. So, until then we must use version 1 to have PowerShell support in Azure Functions. Ensure that you have that version selected as shown above. Alternatively, the code could be developed in another supported programing language in v2, as in C# (.Net Core).</p><p><strong>Note</strong>: why PowerShell? Why not C#? We got that question a lot. The intention of the Governance Toolkit is to provide a solution which is easy to consume and to redeliver within your own environment and without the help of a developer. We don’t fight technology war’s. <img class="wlEmoticon wlEmoticon-winkingsmile" alt="Winking smile" src="https://blog.atwork.at/image.axd?picture=wlEmoticon-winkingsmile_271.png"> If you are IT pro or DevOp or Developer: take the solution and adapt it on your terms.</p><p>Also, it makes sense to switch the platform to x64 (if we upload any PowerShell modules from a x64 client), to switch off PHP (we don't need that), etc. These steps are not required, but make sense in most cases e.g. if you upload x64 libraries to the functions and use them in your code).</p><p><a href="https://blog.atwork.at/image.axd?picture=image_4195.png"><img width="600" height="332" title="image" style="border: 0px currentcolor; border-image: none; display: inline; background-image: none;" alt="image" src="https://blog.atwork.at/image.axd?picture=image_thumb_3152.png" border="0"></a></p><p>Click "Save" after changes have been made.</p><h2>Add our Groups Governance Toolkit App Settings</h2><p>Now there comes the app settings part. We need our app data from the previous step for all functions and we want to store them in a central place. That's the Application Settings in that Function App. Go to the "Overview" and click on "Application settings".</p><p><a href="https://blog.atwork.at/image.axd?picture=image_4196.png"><img width="600" height="404" title="image" style="border: 0px currentcolor; border-image: none; display: inline; background-image: none;" alt="image" src="https://blog.atwork.at/image.axd?picture=image_thumb_3153.png" border="0"></a></p><p>Now, add the values from our created app as shown here. We need keys for <em>AppId</em>, <em>AppSecret</em> and <em>TenantID</em> with the values we saved before. Create the three settings with the "add new setting" link.</p><p><a href="https://blog.atwork.at/image.axd?picture=image_4197.png"><img width="600" height="397" title="image" style="border: 0px currentcolor; border-image: none; display: inline; background-image: none;" alt="image" src="https://blog.atwork.at/image.axd?picture=image_thumb_3154.png" border="0"></a></p><p>Click "Save" after the three keys have been added. After that, we are done with the app settings and we can start using them in our functions.</p><p>Note: In real world scenarios, it is recommended to use <a href="https://docs.microsoft.com/en-us/azure/key-vault/" target="_blank">Azure Key Vault</a> to store secrets. For our demo and for other samples, the Application Settings are good enough.</p><h2>Develop the Group provisioning function</h2><p>Now comes the easy part. Click on the <em>Plus icon</em> to create a new function.</p><p><a href="https://blog.atwork.at/image.axd?picture=image_4207.png"><img width="600" height="314" title="image" style="border: 0px currentcolor; border-image: none; display: inline; background-image: none;" alt="image" src="https://blog.atwork.at/image.axd?picture=image_thumb_3164.png" border="0"></a></p><p>Click on "Experimental Language Support", so that it shows "Enabled". Then, click on the "HTTP trigger" PowerShell link.</p><p><a href="https://blog.atwork.at/image.axd?picture=image_4199.png"><img width="600" height="360" title="image" style="border: 0px currentcolor; border-image: none; display: inline; background-image: none;" alt="image" src="https://blog.atwork.at/image.axd?picture=image_thumb_3156.png" border="0"></a></p><p>Name the function "f1-CreateGroup" and "Create" it.</p><p><a href="https://blog.atwork.at/image.axd?picture=image_4200.png"><img width="590" height="600" title="image" style="border: 0px currentcolor; border-image: none; display: inline; background-image: none;" alt="image" src="https://blog.atwork.at/image.axd?picture=image_thumb_3157.png" border="0"></a></p><p>Remove the generated code and open <a title="https://github.com/martinagrom/Ignite2018GroupsGovernanceToolkit/blob/master/f1-CreateGroup/run.ps1" href="https://github.com/martinagrom/Ignite2018GroupsGovernanceToolkit/blob/master/f1-CreateGroup/run.ps1" target="_blank">f1-CreateGroup/run.ps1</a> and copy and paste the code into the editor. Then, click "Save".</p><p><a href="https://blog.atwork.at/image.axd?picture=image_4202.png"><img width="600" height="332" title="image" style="border: 0px currentcolor; border-image: none; display: inline; background-image: none;" alt="image" src="https://blog.atwork.at/image.axd?picture=image_thumb_3159.png" border="0"></a></p><p> Repeat the same function creation and the code pasting from <a title="https://github.com/martinagrom/Ignite2018GroupsGovernanceToolkit/blob/master/f2-CreateTeam/run.ps1" href="https://github.com/martinagrom/Ignite2018GroupsGovernanceToolkit/blob/master/f2-CreateTeam/run.ps1" target="_blank">f2-CreateTeam/run.ps1</a>. </p><p>There should be these two functions existing in the Function App: f1-CreateGroup and f2-CreateTeam.</p><h2>Add the function bindings</h2><p>To communicate with other components, our two functions require bindings, see <a title="https://docs.microsoft.com/en-us/azure/azure-functions/functions-triggers-bindings" href="https://docs.microsoft.com/en-us/azure/azure-functions/functions-triggers-bindings" target="_blank">Azure Functions triggers and bindings concepts</a>.</p><p>Open the <em>f1-CreateGroup</em> "Integrate" menu and click on the "Advanced editor" link. Copy the <a title="https://github.com/martinagrom/Ignite2018GroupsGovernanceToolkit/blob/master/f1-CreateGroup/function.json" href="https://github.com/martinagrom/Ignite2018GroupsGovernanceToolkit/blob/master/f1-CreateGroup/function.json" target="_blank">f1-CreateGroup/function.json</a> content into the editor as here.</p><p><a href="https://blog.atwork.at/image.axd?picture=image_4204.png"><img width="600" height="377" title="image" style="border: 0px currentcolor; border-image: none; display: inline; background-image: none;" alt="image" src="https://blog.atwork.at/image.axd?picture=image_thumb_3161.png" border="0"></a></p><p>Do the same with <em>f2-CreateTeam</em> "Integrate" menu and click on the "Advanced editor" link. Copy the <a title="https://github.com/martinagrom/Ignite2018GroupsGovernanceToolkit/blob/master/f2-CreateTeam/function.json" href="https://github.com/martinagrom/Ignite2018GroupsGovernanceToolkit/blob/master/f2-CreateTeam/function.json" target="_blank">f2-CreateTeam/function.json</a> content into the editor as here. The binding of f2 listens to a queue and starts when a group shall be provisioned as team, as Microsoft calls it "Teamify".</p><p><a href="https://blog.atwork.at/image.axd?picture=image_4205.png"><img width="600" height="378" title="image" style="border: 0px currentcolor; border-image: none; display: inline; background-image: none;" alt="image" src="https://blog.atwork.at/image.axd?picture=image_thumb_3162.png" border="0"></a></p><p>Done. The bindings allow to get data into the functions or to send the output of functions to other functions.</p><h2>Test it with a sample payload</h2><p>As last part in this article, we can test the creation of a new group or team with our functions. Click on the "Test" link on the right side of the <em>f1-CreateGroup</em> function and use a Request body as here.</p><p><pre>{<br>
"Owner" : "admin@M365x4711081.onmicrosoft.com",<br>
"GroupName": "MyGroup10",<br>
"visibility": "private",<br>
"classification" : "confidential",<br>
"enableteam" : "yes"<br>
}</pre><p>We defined these parameters in our function, because we need this data for the provisioning process. Of course, that could be extended or modified if required. Click on the "Run" button on the bottom of the page.</p><p><a href="https://blog.atwork.at/image.axd?picture=image_4206.png"><img width="600" height="443" title="image" style="border: 0px currentcolor; border-image: none; display: inline; background-image: none;" alt="image" src="https://blog.atwork.at/image.axd?picture=image_thumb_3163.png" border="0"></a></p><p>If the function works properly, a new group and a new team should be created with the function call.</p><p><a href="https://blog.atwork.at/image.axd?picture=image_4222.png"><img width="600" height="203" title="image" style="border: 0px currentcolor; border-image: none; display: inline; background-image: none;" alt="image" src="https://blog.atwork.at/image.axd?picture=image_thumb_3177.png" border="0"></a></p><p>If errors occur, check the App permissions and the Output, e.g. with the Functions "Monitor" menu or the Live Monitoring.</p><h2>Check the new group</h2><p>The group provisioning can take some seconds (or even minutes), depending on the tenant and the cloud workload. Anyway, usually, you can see the new group instantly in Outlook with the "Discover" link.</p><p><a href="https://blog.atwork.at/image.axd?picture=image_4223.png"><img width="600" height="317" title="image" style="border: 0px currentcolor; border-image: none; display: inline; background-image: none;" alt="image" src="https://blog.atwork.at/image.axd?picture=image_thumb_3178.png" border="0"></a></p><p>The user we provided as parameter should be owner of the group and can start adding his project members to that group.</p><h2>More to come</h2><p>Yay! We now have created the first functions to provision a new Office 365 group or Microsoft Team. The next steps for our governance demo are to monitor the groups for the compliance with our organization's policies.</p><h2>Office 365 Groups Governance Toolkit series</h2><ul><li><a href="https://blog.atwork.at/post/2018/11/25/Office-365-Groups-Governance-Toolkit-Part-1-Overview">Part 1 – Overview</a></li><li><a href="https://blog.atwork.at/post/2018/11/26/Office-365-Groups-Governance-Toolkit-Part-2-Provisioning-requirements" target="_blank">Part 2 - Provisioning requirements</a></li><li>Part 3 - Develop Azure Functions</li></ul>https://blog.atwork.at/post/2018/12/02/Office-365-Groups-Governance-Toolkit-Part-3-Azure-Functions
https://blog.atwork.at/post/2018/12/02/Office-365-Groups-Governance-Toolkit-Part-3-Azure-Functions#commenthttps://blog.atwork.at/post.aspx?id=5bf13a64-6541-4af9-8433-862cff858e81Sun, 2 Dec 2018 17:00:00 +0000AzureCloudDeveloperEnglishMicrosoftMVPMicrosoft365Office365PowerShellToolsatworkFlowGitHubGovernanceLogic appsMicrosoft Teamsmghttps://blog.atwork.at/pingback.axdhttps://blog.atwork.at/post.aspx?id=5bf13a64-6541-4af9-8433-862cff858e813https://blog.atwork.at/trackback.axd?id=5bf13a64-6541-4af9-8433-862cff858e81https://blog.atwork.at/post/2018/12/02/Office-365-Groups-Governance-Toolkit-Part-3-Azure-Functions#commenthttps://blog.atwork.at/syndication.axd?post=5bf13a64-6541-4af9-8433-862cff858e81Office 365 Groups Governance Toolkit Part 2-Provisioning requirements<p>In <a href="https://blog.atwork.at/post/2018/11/25/Office-365-Groups-Governance-Toolkit-Part-1-Overview" target="_blank">part 1</a> of this series we described the scenario for our Office 365 groups governance toolkit. In this part we will setup a workflow for the Office 365 and Microsoft Teams provisioning. Workflows help to follow specific processes for a successful collaboration. </p><p>Offering self-services for users is a key to reduce workloads on the IT department and to allow users to cover their requirements quickly while the organization's policies are enforced during the process. A frequently asked request is how to provision a new Microsoft Team in Office 365 in a secure and monitored way. See how this can be implemented here.</p><p>To allow an app to create a Microsoft group or team programmatically in a workflow, we will use the Microsoft Graph API, Azure Functions and Flow or Logic Apps. With these technologies, we can create powerful workflows to offer a self-service for users to create a team when needed, approved by the manager and being provisioned with all the necessary properties and permissions.</p><h2>A workflow to provision a new Team with Manager approval</h2><p>The sample workflow shall work as shown in this graphics: A user creates a groups provisioning request in a custom SharePoint list and starts the approval workflow. If the manager approves the request, an Azure Function is called that does the work. Then, the flow informs the sender about the created group or team.</p><p><a href="https://blog.atwork.at/image.axd?picture=image_4232.png"><img width="600" height="338" title="image" style="border: 0px currentcolor; border-image: none; display: inline; background-image: none;" alt="image" src="https://blog.atwork.at/image.axd?picture=image_thumb_3185.png" border="0"></a></p><p>In this article, we concentrate on the technical part of the groups provisioning process, shown in step 7 (Azure Functions to create the Office 365 Group).</p><h2>Requirements</h2><p>To get the work done, we first have to fulfill the following requirements:</p><ol><li>The groups classification must be set (for using it later in the provisioning process)</li><li>An application must be created that is allowed to perform the groups provisioning operation</li></ol><h2>Set the groups classification in the tenant</h2><p>An Office 36 group can be created as <em>Public</em> or <em>Private</em> group. Additionally, a <em>classification</em> can be defined to inform the users about the content privacy in that group. This must be set on the Office 365 tenant level, before we can use it. So, use the following script and an editor as <a href="https://code.visualstudio.com/" target="_blank">VSCode</a>. You have to connect to your Azure Active Directory with <code>Connect-AzureAD</code> and a Global Admin account. Modify and run the script <a title="https://github.com/martinagrom/Ignite2018GroupsGovernanceToolkit/blob/master/Setup-Group-Classification.ps1" href="https://github.com/martinagrom/Ignite2018GroupsGovernanceToolkit/blob/master/Setup-Group-Classification.ps1" target="_blank">Setup-Group-Classification.ps1</a> from the public <a title="https://github.com/martinagrom/Ignite2018GroupsGovernanceToolkit" href="https://github.com/martinagrom/Ignite2018GroupsGovernanceToolkit" target="_blank">GroupsGovernanceToolkit repository</a>. Be aware that this is subject to change as soon as Microsoft Information Protection is general available! (We will update the sample accordingly).</p><p><a href="https://github.com/martinagrom/Ignite2018GroupsGovernanceToolkit/blob/master/Setup-Group-Classification.ps1" target="_blank"><img width="600" height="464" title="image" style="border: 0px currentcolor; border-image: none; display: inline; background-image: none;" alt="image" src="https://blog.atwork.at/image.axd?picture=image_4224.png" border="0"></a></p><h2>Create an app in AAD (with the new App registration)</h2><p>For our app to work we need to create and register it in AAD. With this app we will access our Office 365 tenant with a custom Azure function.<p>Here we create the required app in the <a href="https://portal.azure.com/" target="_blank">Azure Portal</a>. Login with a Global Admin and navigate to the <a href="https://portal.azure.com/#blade/Microsoft_AAD_IAM/ActiveDirectoryMenuBlade/RegisteredApps" target="_blank">AAD blade</a>, or to the new <a title="https://portal.azure.com/#blade/Microsoft_AAD_IAM/ActiveDirectoryMenuBlade/RegisteredAppsPreview" href="https://portal.azure.com/#blade/Microsoft_AAD_IAM/ActiveDirectoryMenuBlade/RegisteredAppsPreview" target="_blank">App registrations (Preview)</a> that was announced at Ignite. Click the "Register an application" button.<p><a href="https://blog.atwork.at/image.axd?picture=image_4176.png"><img width="600" height="324" title="image" style="border: 0px currentcolor; border-image: none; display: inline; background-image: none;" alt="image" src="https://blog.atwork.at/image.axd?picture=image_thumb_3134.png" border="0"></a><p>Name the app "GroupsGovernanceToolkitApp", select "Web" and provide a valid URI, as <a href="https://mycompany/myapp">https://mycompany/myapp</a>.<p><a href="https://blog.atwork.at/image.axd?picture=image_4177.png"><img width="600" height="397" title="image" style="border: 0px currentcolor; border-image: none; display: inline; background-image: none;" alt="image" src="https://blog.atwork.at/image.axd?picture=image_thumb_3135.png" border="0"></a><h2>Set the app permissions</h2><p>When the app was created, open the "View API Permission". To create a new Office 365 group (or a Team), the Microsoft Graph API provides methods for accomplishing that. See the documentation at<ul><li><a title="https://developer.microsoft.com/en-us/graph/docs/api-reference/v1.0/api/group_post_groups" href="https://developer.microsoft.com/en-us/graph/docs/api-reference/v1.0/api/group_post_groups" target="_blank">Create group</a></li><li><a title="https://developer.microsoft.com/en-us/graph/docs/api-reference/beta/api/team_put_teams" href="https://developer.microsoft.com/en-us/graph/docs/api-reference/beta/api/team_put_teams" target="_blank">Create team</a> (still in Beta, but working)</li></ul><p>So, our app needs to have the application permission "Group.ReadWrite.All". Let's set that here.</p><p><a href="https://blog.atwork.at/image.axd?picture=image_4178.png"><img width="600" height="400" title="image" style="border: 0px currentcolor; border-image: none; display: inline; background-image: none;" alt="image" src="https://blog.atwork.at/image.axd?picture=image_thumb_3136.png" border="0"></a><p>Let's "Add a permission".<p><a href="https://blog.atwork.at/image.axd?picture=image_4179.png"><img width="600" height="351" title="image" style="border: 0px currentcolor; border-image: none; display: inline; background-image: none;" alt="image" src="https://blog.atwork.at/image.axd?picture=image_thumb_3137.png" border="0"></a><p>Click on "Microsoft Graph".<p><a href="https://blog.atwork.at/image.axd?picture=image_4180.png"><img width="600" height="309" title="image" style="border: 0px currentcolor; border-image: none; display: inline; background-image: none;" alt="image" src="https://blog.atwork.at/image.axd?picture=image_thumb_3138.png" border="0"></a><p>…and on "Application permissions". We want the function to be able to provision a new group or team without user interaction.<p><a href="https://blog.atwork.at/image.axd?picture=image_4181.png"><img width="600" height="163" title="image" style="border: 0px currentcolor; border-image: none; display: inline; background-image: none;" alt="image" src="https://blog.atwork.at/image.axd?picture=image_thumb_3139.png" border="0"></a><p>Search for "group" and select the "Group.ReadWrite.All" permission. This requires an Admin Consent as shown here.<p><a href="https://blog.atwork.at/image.axd?picture=image_4182.png"><img width="600" height="467" title="image" style="border: 0px currentcolor; border-image: none; display: inline; background-image: none;" alt="image" src="https://blog.atwork.at/image.axd?picture=image_thumb_3140.png" border="0"></a><p>Repeat that step for "Directory.Read.All". We need to read the user objects to set the owner of a group as well.<p><a href="https://blog.atwork.at/image.axd?picture=image_4183.png"><img width="600" height="463" title="image" style="border: 0px currentcolor; border-image: none; display: inline; background-image: none;" alt="image" src="https://blog.atwork.at/image.axd?picture=image_thumb_3141.png" border="0"></a><p>Now, the Global Admin needs to confirm the permissions of the app.<p><a href="https://blog.atwork.at/image.axd?picture=image_4185.png"><img width="600" height="448" title="image" style="border: 0px currentcolor; border-image: none; display: inline; background-image: none;" alt="image" src="https://blog.atwork.at/image.axd?picture=image_thumb_3142.png" border="0"></a><p>Confirm that message with "Yes".<p><a href="https://blog.atwork.at/image.axd?picture=image_4186.png"><img width="600" height="119" title="image" style="border: 0px currentcolor; border-image: none; display: inline; background-image: none;" alt="image" src="https://blog.atwork.at/image.axd?picture=image_thumb_3143.png" border="0"></a><p>The app was successfully registered and confirmed with the required permissions.<p><a href="https://blog.atwork.at/image.axd?picture=image_4187.png"><img width="600" height="309" title="image" style="border: 0px currentcolor; border-image: none; display: inline; background-image: none;" alt="image" src="https://blog.atwork.at/image.axd?picture=image_thumb_3144.png" border="0"></a><h2>Create the app secret</h2><p>To let the App authenticate, we also need an app "password", it's named "secret" here. Click on the "Certificates &amp; secrets" and add a "new client secret".<p><a href="https://blog.atwork.at/image.axd?picture=image_4188.png"><img width="600" height="330" title="image" style="border: 0px currentcolor; border-image: none; display: inline; background-image: none;" alt="image" src="https://blog.atwork.at/image.axd?picture=image_thumb_3145.png" border="0"></a><p>Name it "secret" or similar, choose the expiration (as 1 year) and add it as here.<p><a href="https://blog.atwork.at/image.axd?picture=image_4189.png"><img width="600" height="344" title="image" style="border: 0px currentcolor; border-image: none; display: inline; background-image: none;" alt="image" src="https://blog.atwork.at/image.axd?picture=image_thumb_3146.png" border="0"></a><p>Now, copy the generated secret value – you won't get it again!<p><a href="https://blog.atwork.at/image.axd?picture=image_4190.png"><img width="600" height="365" title="image" style="border: 0px currentcolor; border-image: none; display: inline; background-image: none;" alt="image" src="https://blog.atwork.at/image.axd?picture=image_thumb_3147.png" border="0"></a><h2>Collect all required app data</h2><p>Go to the app "Overview" and copy the Application ID, the Directory ID and your secret to a text file. We need that data in our Azure functions later.<p><a href="https://blog.atwork.at/image.axd?picture=image_4191.png"><img width="600" height="330" title="image" style="border: 0px currentcolor; border-image: none; display: inline; background-image: none;" alt="image" src="https://blog.atwork.at/image.axd?picture=image_thumb_3148.png" border="0"></a><p>So, in our sample, our app data looks as here. <p><code>Application ID:
81164786…<br>
Secret:
-C}&amp;g#Q%BY9…<br>
Tenant ID:
f5209591…</code></p><p>Save your app data (AppID, Secret and TenantID) in a secure place. We need that in the next steps.<br>(Just to mention, this app data is just for this showcase and was deleted after the completion of that article series… <img class="wlEmoticon wlEmoticon-openmouthedsmile" alt="Open-mouthed smile" src="https://blog.atwork.at/image.axd?picture=wlEmoticon-openmouthedsmile_1.png">.)</p><h2>Continue with the function code</h2><p>After we have fulfilled the requirements, we continue to develop the provisioning function code in the next article.</p><h2>Office 365 Groups Governance Toolkit series</h2><ul><li><a href="https://blog.atwork.at/post/2018/11/25/Office-365-Groups-Governance-Toolkit-Part-1-Overview">Part 1 - Overview</a><li>Part 2 - Provisioning requirements<li><a href="https://blog.atwork.at/post/2018/12/02/Office-365-Groups-Governance-Toolkit-Part-3-Azure-Functions">Part 3 - Develop Azure Functions</a></li></ul>https://blog.atwork.at/post/2018/11/26/Office-365-Groups-Governance-Toolkit-Part-2-Provisioning-requirements
https://blog.atwork.at/post/2018/11/26/Office-365-Groups-Governance-Toolkit-Part-2-Provisioning-requirements#commenthttps://blog.atwork.at/post.aspx?id=c5c6a6ae-8a55-4f2f-acbd-41db922428f6Mon, 26 Nov 2018 18:00:00 +0000AzureCloudDeveloperEnglishMicrosoftMVPMicrosoft365Office365PowerShellToolsatworkFlowGitHubGovernanceGraphLogic appsMicrosoft TeamsSharePointYammermghttps://blog.atwork.at/pingback.axdhttps://blog.atwork.at/post.aspx?id=c5c6a6ae-8a55-4f2f-acbd-41db922428f63https://blog.atwork.at/trackback.axd?id=c5c6a6ae-8a55-4f2f-acbd-41db922428f6https://blog.atwork.at/post/2018/11/26/Office-365-Groups-Governance-Toolkit-Part-2-Provisioning-requirements#commenthttps://blog.atwork.at/syndication.axd?post=c5c6a6ae-8a55-4f2f-acbd-41db922428f6Office 365 Groups Governance Toolkit Part 1-Overview<p>IT-Governance is an important topic, especially in large organizations. In an agile and evergreen world, as it can be found with Microsoft 365 services, Governance becomes an integral part which needs to be monitored and updated on a regular basis. At <a href="https://myignite.techcommunity.microsoft.com/sessions/66487?source=sessions#ignite-html-anchor" target="_blank">Microsoft Ignite conference</a>, we showed the "Groups Governance Toolkit" with a bunch of useful tools to regulate and monitor for Office 365 Groups and Microsoft Teams. Everything we showed at Ignite is open source and built with out of the box tools within Microsoft 365 and Azure. </p><p>In this blog series, we will now show the step-by-step guidance how to implement that toolkit with Microsoft 365 and Microsoft Azure. Let's start with an overview what topics we cover in this blog article series.</p><h2>The background</h2><p>Our team for this toolkit at <a href="https://www.atwork-it.com/" target="_blank">atwork</a> consists of <a href="https://twitter.com/magrom" target="_blank">Martina Grom</a>, <a href="https://twitter.com/CWilfing" target="_blank">Christoph Wilfing</a> and <a href="https://twitter.com/atwork" target="_blank">Toni Pohl</a>. So, this article series is a joint effort. The idea for the "Groups Governance Toolkit" project came from consulting real-world enterprise customers. We see daily that there is a big need for governance for enterprise customers, to control the provisioning of new groups and teams and to monitor Office 365 Groups and Microsoft Teams in operations. Just to mention, when we write about "Groups", we mean Microsoft Office 365 Groups and Microsoft Teams – an Office 365 group is the base for other Office 365 services as Planner and Teams, see <a title="https://docs.microsoft.com/en-us/microsoftteams/office-365-groups" href="https://docs.microsoft.com/en-us/microsoftteams/office-365-groups" target="_blank">Office 365 Groups and Microsoft Teams</a> and <a title="https://support.office.com/en-us/article/learn-about-office-365-groups-b565caa1-5c40-40ef-9915-60fdb2d97fa2" href="https://support.office.com/en-us/article/learn-about-office-365-groups-b565caa1-5c40-40ef-9915-60fdb2d97fa2" target="_blank">Learn about Office 365 Groups</a>. Our approach is to stay with user self-service while bringing additional monitoring and governance into the process.</p><h2>Functionality</h2><p>Currently, the Groups Governance Toolkit covers these scenarios:</p><ol><li><strong>Provision a new Office 365 Group or Team</strong> with a manager approval workflow</li><li><strong>Show ownerless (orphaned) groups</strong> - Groups that do not comply with the organization's policies of having at least 2 owners (or one)</li><li><strong>Show groups with external users</strong> - Inform group owners about guest users to decide if their access is still required</li><li><strong>Groups statistics</strong> - An interactive Power-BI dashboard with group details at a glance for monitoring</li></ol><p>As a quick preview, the groups statistics delivers an overview about the existing Office 365 groups and Microsoft Teams as well as Yammer enabled groups in a tenant. You can filter that to get insights into the groups usage within your tenant.</p><p><a href="https://blog.atwork.at/image.axd?picture=image_4258.png"><img width="600" height="331" title="image" style="border: 0px currentcolor; border-image: none; display: inline; background-image: none;" alt="image" src="https://blog.atwork.at/image.axd?picture=image_thumb_3211.png" border="0"></a></p><p>We plan to extend the toolkit, stay tuned… <br>The Groups Governance Toolkit is also integrated in the next update of our Office 365 AddOn-solution <a href="https://www.delegate365.com/" target="_blank">Delegate365</a>.</p><h2>Requirements and tools</h2><p>To follow these steps, you need to have a Global Admin of an Office 365 tenant and an active Azure subscription. For the use of Power-BI, you need to have a Power-BI license and for sending emails, a user with a mailbox is required. We use SharePoint Online for the provisioning list, the email file templates and Microsoft Flow for implementing the workflow. In Azure, we are using Logic Apps and Azure Functions. To make the toolkit easy to adapt, we implemented the code parts with PowerShell. So, a basic understanding of PowerShell and how the Microsoft Graph API works helps, but it is not required to modify the code samples, they can be used as provided.</p><p>What we used out-of-the-box:</p><ul><li>Office 365 tenant with a Global Administrator</li><li>Azure subscription</li><li>Power BI</li><li>SharePoint Online</li><li>Microsoft Flow</li><li>Azure Logic Apps</li><li>Azure Functions</li><li>PowerShell (can be done with C# as well)</li><li>Microsoft Graph API</li></ul><p>All sources can be found at my <a href="https://github.com/martinagrom/" target="_blank">GitHub</a>.</p><p>Doing the work, accessing the groups, is done with <a href="https://aka.ms/graph" target="_blank">Microsoft Graph</a>, our key to access data in Office 365.</p><p><a href="https://aka.ms/graph" target="_blank"><img width="400" height="121" title="image" style="border: 0px currentcolor; border-image: none; display: inline; background-image: none;" alt="image" src="https://blog.atwork.at/image.axd?picture=image_4225.png" border="0"></a></p><p>Here, we are currently using the v1 endpoint and the Beta endpoint of Microsoft Graph. So, in future, some calls or the result of the Beta endpoint will be replaced by v1 methods and might change a little bit, but the functionality we are using for our samples will still be available.</p><h2>Articles</h2><p>To present the toolkit in a easy to consume format, we split the project in multiple small parts and we will provide the code samples in <a href="https://github.com/martinagrom/Ignite2018GroupsGovernanceToolkit" target="_blank">Martina's public GitHub repository</a>. The next article covers the first scenario: How to develop a self-service group provisioning solution with SharePoint, Flow and Azure Functions. Then, the statistics functions and with the use of Logic Apps, Azure Functions and Power BI will follow.</p><p>We hope you like this article series and the information provided here is useful for your organization. In case of questions, pls. <a href="https://www.atwork-it.com/contact/" target="_blank">contact</a> us.</p><h2>Office 365 Groups Governance Toolkit series</h2><ul><li>Part 1 - Overview<li><a href="https://blog.atwork.at/post/2018/11/26/Office-365-Groups-Governance-Toolkit-Part-2-Provisioning-requirements">Part 2 - Provisioning requirements</a><li><a href="https://blog.atwork.at/post/2018/12/02/Office-365-Groups-Governance-Toolkit-Part-3-Azure-Functions">Part 3 - Develop Azure Functions</a></li></ul>https://blog.atwork.at/post/2018/11/25/Office-365-Groups-Governance-Toolkit-Part-1-Overview
https://blog.atwork.at/post/2018/11/25/Office-365-Groups-Governance-Toolkit-Part-1-Overview#commenthttps://blog.atwork.at/post.aspx?id=ad4ed7a2-3c72-41d7-8ef8-3257035802deSun, 25 Nov 2018 18:00:00 +0000AzureCloudDeveloperEnglishMicrosoftMVPMicrosoft365Office365SharePointatworkToolsGovernanceMicrosoft TeamsPowerShellYammerLogic appsGraphmghttps://blog.atwork.at/pingback.axdhttps://blog.atwork.at/post.aspx?id=ad4ed7a2-3c72-41d7-8ef8-3257035802de1https://blog.atwork.at/trackback.axd?id=ad4ed7a2-3c72-41d7-8ef8-3257035802dehttps://blog.atwork.at/post/2018/11/25/Office-365-Groups-Governance-Toolkit-Part-1-Overview#commenthttps://blog.atwork.at/syndication.axd?post=ad4ed7a2-3c72-41d7-8ef8-3257035802de