private static async Task BuildUserLookupDictionary() { try { userLookupIds = new Dictionary <string, string>(); // Get the root site var rootSite = await appClient.Sites["root"].Request().GetAsync(); // Get the flight admin site var adminSite = await appClient .Sites[$"{rootSite.SiteCollection.Hostname}:/sites/{flightAdminSite}"] .Request().GetAsync(); // Get all lists including the "system" lists // This is needed to see the User Information List var lists = await appClient.Sites[adminSite.Id].Lists.Request() .Select(x => new { x.System, x.DisplayName, x.Id }).GetAsync(); // Find the User Information List Microsoft.Graph.List userList = null; foreach (var list in lists.CurrentPage) { if (string.Compare(list.DisplayName, "User Information List", true) == 0) { userList = list; break; } } if (userList == null) { return; } var users = await appClient.Sites[adminSite.Id].Lists[userList.Id].Items.Request() .Expand(x => new { x.Fields }).GetAsync(); foreach (var user in users) { object email = null; if (user.Fields.AdditionalData.TryGetValue("EMail", out email)) { if (!userLookupIds.TryAdd((email as string).ToLower(), user.Id)) { Console.WriteLine($"Duplicate entry for {email}, ignored."); } } } } catch (Exception ex) { Console.WriteLine(ex.Message); userLookupIds = null; } }
//private async Task CopyFlightLogToTeamFilesAsync(GraphService graphClient, string groupId) //{ // // Upload flight log to team files // // Get root site to determine SP host name // var rootSite = await HttpGet<Site>($"/sites/root"); // // Get flight admin site // var adminSite = await HttpGet<Site>($"{rootSite.SiteCollection.Hostname}:/sites/{flightAdminSite}"); // // Get the flight log document // var flightLog = await HttpGet<DriveItem>($"/sites/{adminSite.Id}/drive/root:/{flightLogFile}"); // // Get the files folder in the team OneDrive // var teamDrive = await HttpGet<DriveItem>($"/groups/{groupId}/drive/root:/General", retries: 4); // // Retry this call if it fails // // There seems to be a delay between creating a Team and the drives being // // fully created/enabled // // Copy the file from SharePoint to team drive // var teamDriveReference = new ItemReference // { // DriveId = teamDrive.ParentReference.DriveId, // Id = teamDrive.Id // }; // await graphClient.CopySharePointFileAsync(adminSite.Id, flightLog.Id, teamDriveReference); //} //public async Task CopySharePointFileAsync(string siteId, string itemId, ItemReference target) //{ // var copyPayload = new DriveItem // { // ParentReference = target // }; // var response = await HttpPost($"/sites/{siteId}/drive/items/{itemId}/copy", // copyPayload); //} // Posting messages is supported in beta but will not GA in 2018. // Post a message to that channel //await HttpPost($"/teams/{teamId}/channels/{channel.Id}/chatThreads", // new PostMessage() //{ // rootMessage = new RootMessage() // { // body = new MessageBody() // { // content = $"Welcome to Flight {flight.number}!" // } // } // }); public async Task <Microsoft.Graph.List> CreateSharePointListAsync(string siteId, Microsoft.Graph.List list) { var response = await HttpPost($"/sites/{siteId}/lists", list); return(JsonConvert.DeserializeObject <Microsoft.Graph.List>(response)); }