public async Task <Event> CreateEvent(string subject, DateTimeTimeZone startTime, DateTimeTimeZone endTime, string htmlContent, IEnumerable <Attendee> attendees, Meeting meeting, string bucketId)
        {
            //Extension
            var evExtCollPage = new EventExtensionsCollectionPage();
            var dict          = new Dictionary <string, object>();

            dict.Add("teamId", meeting.TeamId);
            dict.Add("channelId", meeting.ChannelId);
            dict.Add("meetingId", meeting.Id);
            dict.Add("bucketId", bucketId);
            var openExtension = new OpenTypeExtension
            {
                ODataType      = "microsoft.graph.openTypeExtension",
                ExtensionName  = EXTENSION_NAME,
                AdditionalData = dict
            };

            evExtCollPage.Add(openExtension);

            var groupEvent = new Event()
            {
                Subject = subject,
                Start   = startTime,
                End     = endTime,
                Body    = new ItemBody
                {
                    ContentType = BodyType.Html,
                    Content     = htmlContent
                },
                Attendees  = attendees,
                Extensions = evExtCollPage
            };

            return(await GraphClient.Groups[meeting.TeamId].Events.Request().AddAsync(groupEvent));
        }
Example #2
0
        private static async Task UpdateFlightInCalendars(List <string> crewMembers, int flightNumber, string departureGate, DateTime?newDepartureTime = null)
        {
            foreach (var userId in crewMembers)
            {
                // Get the event
                var matchingEvents = await graphClient.GetEventsInUserCalendar(userId,
                                                                               $"categories/any(a:a eq 'Assigned Flight') and subject eq 'Flight {flightNumber}'");

                var flightEvent = matchingEvents.CurrentPage.FirstOrDefault();
                if (flightEvent != null)
                {
                    if (newDepartureTime != null)
                    {
                        flightEvent.Start.DateTime = newDepartureTime?.ToString("s");
                        flightEvent.End.DateTime   = newDepartureTime?.AddHours(4).ToString("s");
                        await graphClient.UpdateEventInUserCalendar(userId, flightEvent);
                    }

                    var flightExtension = new OpenTypeExtension
                    {
                        ODataType      = "microsoft.graph.openTypeExtension",
                        ExtensionName  = "com.contoso.flightData",
                        AdditionalData = new Dictionary <string, object>()
                    };

                    flightExtension.AdditionalData.Add("departureGate", departureGate);
                    flightExtension.AdditionalData.Add("crewMembers", crewMembers);

                    await graphClient.UpdateFlightExtension(userId, flightEvent.Id, flightExtension);
                }
            }
        }
Example #3
0
        public async Async.Task GroupCreateExtension()
        {
            // Get a groups collection. We'll use the first entry to add the extension. Results in a call to the service.
            IGraphServiceGroupsCollectionPage groupPage = await graphClient.Groups.Request().GetAsync();

            // Create the extension property.
            OpenTypeExtension newExtension = new OpenTypeExtension();

            newExtension.ExtensionName  = "com.contoso.trackingKey";
            newExtension.AdditionalData = new Dictionary <string, object>();
            newExtension.AdditionalData.Add("trackingKeyMajor", "ABC");
            newExtension.AdditionalData.Add("trackingKeyMinor", "123");

            try
            {
                // Add an extension to the group. Results in a call to the service.
                var extension = await graphClient.Groups[groupPage[0].Id].Extensions.Request().AddAsync(newExtension);

                // Delete the extension. Results in a call to the service.
                await graphClient.Groups[groupPage[0].Id].Extensions["com.contoso.trackingKey"].Request().DeleteAsync();
            }
            catch (ServiceException e)
            {
                Assert.True(false, e.Error.ToString());
            }
        }
        public async Task UpdateOpenExtensionForMe(GraphServiceClient graphClient, string extensionName,
                                                   Dictionary <string, object> data)
        {
            var openExtension = new OpenTypeExtension
            {
                ExtensionName  = extensionName,
                AdditionalData = data
            };

            // Note: Client SDK returns Extension, whereas REST API only return 204 with No content
            // Thus result is *always* null (Client SDK is generated, some UpdateAsync calls do return results, this doesn't)
            var result = await graphClient.Me.Extensions[extensionName].Request().UpdateAsync(openExtension);
        }
Example #5
0
        private static async Task AddFlightToCalendars(FlightTeam flightTeam, List <string> usersToAdd = null)
        {
            // Get all flight members
            var allCrewIds = await graphClient.GetUserIds(flightTeam.Pilots, flightTeam.FlightAttendants);

            // Initialize flight event
            var flightEvent = new Event
            {
                Subject  = $"Flight {flightTeam.FlightNumber}",
                Location = new Location
                {
                    DisplayName = flightTeam.Description
                },
                Start = new DateTimeTimeZone
                {
                    DateTime = flightTeam.DepartureTime.ToString("s"),
                    TimeZone = "UTC"
                },
                End = new DateTimeTimeZone
                {
                    DateTime = flightTeam.DepartureTime.AddHours(4).ToString("s"),
                    TimeZone = "UTC"
                },
                Categories = new string[] { "Assigned Flight" },
                Extensions = new EventExtensionsCollectionPage()
            };

            var flightExtension = new OpenTypeExtension
            {
                ODataType      = "microsoft.graph.openTypeExtension",
                ExtensionName  = "com.contoso.flightData",
                AdditionalData = new Dictionary <string, object>()
            };

            flightExtension.AdditionalData.Add("departureGate", flightTeam.DepartureGate);
            flightExtension.AdditionalData.Add("crewMembers", allCrewIds);

            flightEvent.Extensions.Add(flightExtension);

            if (usersToAdd == null)
            {
                usersToAdd = allCrewIds;
            }

            foreach (var userId in usersToAdd)
            {
                //var user = await graphClient.GetUserByUpn(userId);

                await graphClient.CreateEventInUserCalendar(userId, flightEvent);
            }
        }
Example #6
0
        private static async Task SaveScore(GraphServiceClient client, notificationItem item, double?score)
        {
            var extension = new OpenTypeExtension
            {
                ODataType     = "Microsoft.Graph.OpenTypeExtension",
                ExtensionName = "com.baywet.happy",
            };

            extension.AdditionalData = new Dictionary <string, object>
            {
                { "score", score.Value.ToString() }
            };
            await client.Users[item.UserId].Messages[item.MessageId].Extensions.Request().AddAsync(extension);
        }
Example #7
0
        public async Task AddExtensionToUser(string principalName, string extensionName, string key, string value)
        {
            var extension = new OpenTypeExtension
            {
                ExtensionName  = extensionName,
                AdditionalData = new Dictionary <string, object>()
                {
                    { key, value }
                }
            };

            var finalExtension = await AppHelper.GetGraphServiceClient().Users[principalName].Extensions.Request().AddAsync(extension);

            ForegroundColor = ConsoleColor.Green;
            WriteLine($"Successfully added extension {key}.");
            ResetColor();
            WriteObject(finalExtension);
        }
        public async Task <List <ResultsItem> > AddOpenExtensionToMe(GraphServiceClient graphClient, string extensionName,
                                                                     Dictionary <string, object> data)
        {
            var openExtension = new OpenTypeExtension
            {
                ExtensionName  = extensionName,
                AdditionalData = data
            };

            var result = await graphClient.Me.Extensions.Request().AddAsync(openExtension);

            return(new List <ResultsItem>()
            {
                new ResultsItem()
                {
                    Display = result.Id,
                    Properties = (Dictionary <string, object>)result.AdditionalData
                }
            });
        }
Example #9
0
        public async Task ExtensionAddRoamingProfile()
        {
            try
            {
                var openTypeExtension = new OpenTypeExtension();
                openTypeExtension.ExtensionName  = "com.contoso.mysettings2";
                openTypeExtension.AdditionalData = new Dictionary <string, object>();
                openTypeExtension.AdditionalData.Add("theme", "dark");

                var e = await graphClient.Me.Extensions.Request().AddAsync(openTypeExtension);

                Assert.NotNull(e);
                Assert.Equal(openTypeExtension.ExtensionName, e.Id); // The extension name and identifier should match.
            }
            catch (ServiceException e)
            {
                if (e.Error.Message == "An extension already exists with given id.")
                {
                    Assert.True(false, "The extension already exists. Delete the extension step missing.");
                }
            }
        }
        public async Task <List <ResultsItem> > AddOpenExtensionToMe(string extensionName,
                                                                     Dictionary <string, object> data)
        {
            var openExtension = new OpenTypeExtension
            {
                ExtensionName  = extensionName,
                AdditionalData = data
            };

            var result = await graphClient.Me.Extensions.Request(requestOptions)
                         .WithUserAccount(ClaimsPrincipal.Current.ToGraphUserAccount())
                         .AddAsync(openExtension);

            return(new List <ResultsItem>()
            {
                new ResultsItem()
                {
                    Display = result.Id,
                    Properties = (Dictionary <string, object>)result.AdditionalData
                }
            });
        }
Example #11
0
 public async Task UpdateFlightExtension(string userId, string eventId, OpenTypeExtension flightExtension)
 {
     await graphClient.Users[userId].Events[eventId].Extensions["com.contoso.flightData"].Request().UpdateAsync(flightExtension);
 }