2017-02-25 1 views
0

J'ai un programme UWP qui récupère essentiellement une liste de rendez-vous, puis les filtre pour produire un rapport.C# UWP AppointmentStore.FindAppointmentsAsync ne fonctionne pas sur PC

J'utilise le AppointmentManager.RequestStoreAsync et AppointmentStore.FindAppointmentsAsync selon How to retrieve appointments in UWP from a Windows 10 calendar using C#

Le problème que je l'ai rencontré est que cela fonctionne très bien sur Windows 10 appareil mobile, mais pas sur le PC de Windows 10. Ils se synchronisent tous les deux sur les mêmes calendriers.

Mon code:

AppointmentStore appointmentStore = await AppointmentManager.RequestStoreAsync(AppointmentStoreAccessType.AllCalendarsReadOnly); 

      DayOfWeek weekStart = DayOfWeek.Monday; 
      DateTimeOffset startingDate = DateTimeOffset.Now; 

      while (startingDate.DayOfWeek != weekStart) 
       startingDate = startingDate.AddDays(-1); 

      DateTimeOffset currentPayStart = startingDate.AddDays(-14); 

      var date = currentPayStart; 
      var timeZoneOffset = TimeZoneInfo.Local.GetUtcOffset(DateTime.Now); 
      var startTime = new DateTimeOffset(date.Year, date.Month, date.Day, 0, 0, 0, timeZoneOffset); 

      TimeSpan duration = TimeSpan.FromDays(7); 

      FindAppointmentsOptions options = new FindAppointmentsOptions(); 
      options.MaxCount = 100; 
      options.FetchProperties.Add(AppointmentProperties.Subject); 
      options.FetchProperties.Add(AppointmentProperties.Location); 
      options.FetchProperties.Add(AppointmentProperties.AllDay); 
      options.FetchProperties.Add(AppointmentProperties.StartTime); 
      options.FetchProperties.Add(AppointmentProperties.Duration); 
      options.FetchProperties.Add(AppointmentProperties.Details); 
      options.FetchProperties.Add(AppointmentProperties.DetailsKind); 

      IReadOnlyList<Appointment> appointments = await appointmentStore.FindAppointmentsAsync(startTime, duration, options); 

Je ancien code WPF qui fonctionne toujours très bien sur le PC. (Mais il n'a jamais été mis en œuvre sur le mobile)

Le code:

var outlookApp = new Outlook.Application(); 
      var calFolder = outlookApp.Session.GetDefaultFolder(Outlook.OlDefaultFolders.olFolderCalendar) as Outlook.Folder; 

      DayOfWeek weekStart = DayOfWeek.Monday; 
      DateTime startingDate = DateTime.Today; 

      while (startingDate.DayOfWeek != weekStart) 
       startingDate = startingDate.AddDays(-1); 

      DateTime previousWeekStart = startingDate.AddDays(-7); 
      DateTime previousWeekEnd = startingDate.AddDays(0); 

      Outlook.Items rangeAppts = GetAppointmentsInRange(calFolder, previousWeekStart, previousWeekEnd); 

Il semble que le IReadOnlyList est toujours vide lorsqu'il est déployé sur le PC, alors que mon Outlook.Items existantes (code WPF) fonctionne très bien .

Comme ci-dessus, le code fonctionne bien sur le mobile, ce qui explique pourquoi je voulais essentiellement mettre à niveau vers UWP, mais maintenant pas sur le bureau.

Je sens que je manque quelque chose très basique ...

+0

utilisez-vous Outlook ou l'application de calendrier sur votre PC? –

+0

Le PC utilise Outlook, le mobile utilise l'application de calendrier standard. Les deux se synchronisent sur le même compte d'échange de perspectives. Mon application UWP fonctionne sur les deux, c'est juste sur le PC qu'il ne lit aucun rendez-vous dans la liste IReadOnlyList . J'ai vérifié ceci en faisant un var ct = new MessageDialog (rendez-vous.Count.ToString()); attendez ct.ShowAsync(); – Geo

+0

Le AppointmentStore n'est pas une API qui communique avec l'échange, mais avec les données sur le système. Je ne pense pas que Outlook utilise cette API pour mettre les données de l'échange dans le système comme le fait l'application de calendrier. Donc, deux solutions: configurer l'application de calendrier pour obtenir les données sur votre PC ou utiliser des API d'échange pour obtenir les données –

Répondre

0

Le AppointmentStore isnt un api qui communique avec l'échange, mais avec les données du système. Je ne pense pas que Outlook utilise cette API pour mettre les données de l'échange dans le système comme le fait l'application de calendrier. Donc, deux solutions: configurer l'application de calendrier pour obtenir les données sur votre PC ou utiliser des API d'échange pour obtenir les données

+0

Ça aiderait certainement si vous avez expliqué _how_ pour configurer l'application de calendrier pour obtenir les données. La suggestion est inutile sans un. –