使用UWA创建约会的自定义日历

时间:2016-11-21 11:21:51

标签: c# xaml windows-phone uwp windows-10

我正在使用此代码段创建日历并将其放入用户的原生Outlook日历应用中:

async private Task CreateCalenderEntry()
    {
        // 1. get access to appointmentstore 
        var appointmentStore = await AppointmentManager.RequestStoreAsync(AppointmentStoreAccessType.AppCalendarsReadWrite);

        // 2. get calendar 
        var appCustomApptCalendar = await appointmentStore.CreateAppointmentCalendarAsync("MyCalendar1");

        // 3. create new Appointment 
        var appo = new Appointment();

        // appointment properties 
        appo.AllDay = true;
        appo.Subject = "Sample Subject";
        appo.StartTime = DateTime.Now;

        //  4. add 
        await appCustomApptCalendar.SaveAppointmentAsync(appo);
    }

问题是,当我调用此代码时,它会在Outlook日历中创建一个新的日历部分,其中包含一个名为“MyCalendar1”的日历,但我想要的是在用户帐户的日历中创建它。我能看到的是那个

CreateAppointmentCalendarAsync

实际上有1次重载,这是

public IAsyncOperation<AppointmentCalendar> CreateAppointmentCalendarAsync(System.String name, System.String userDataAccountId);

我认为这是我想要解决用户日历的问题,但请记住这个“userDataAccountId”参数是用户的ID,我应该在哪里找到它?

1 个答案:

答案 0 :(得分:1)

  

但我想要的是在用户帐户的日历中创建

我不确定你真正想要创建什么。如果你想在一个现有的邮件帐户中创建一个新的日历,通过我自己的测试,目前是不允许的。如果要在属于邮件帐户的现有日历中创建新约会,则需要为@ appK Naidu说明为应用程序指定受限制的功能。 This picture可以更好地解释我所说的内容。

有关如何将新约会添加到现有日历中,您可以按如下方式使用代码:

IReadOnlyList<AppointmentCalendar> appointmentCalendars = await appointmentStore.FindAppointmentCalendarsAsync();
foreach (AppointmentCalendar calendar in appointmentCalendars)
{
   if(calendar.DisplayName=="Calendar")
    {
        AppointmentCalendar appointmentcalendar = await appointmentStore.GetAppointmentCalendarAsync(calendar.LocalId);
        await appointmentcalendar.SaveAppointmentAsync(appointment);
    }
}

有关如何设置appointmentsSystem功能的详细信息如下:

<Package  
...
xmlns:rescap="http://schemas.microsoft.com/appx/manifest/foundation/windows10/restrictedcapabilities" 
IgnorableNamespaces="uap mp rescap">
...
<Capabilities> 
  <Capability Name="internetClient" /> 
  <uap:Capability Name="appointments" />
  <uap:Capability Name="contacts" /> 
  <rescap:Capability Name="appointmentsSystem"/>
</Capabilities>  
</Package>

请注意,使用此功能,您需要在将应用程序提交到商店之前请求访问受限制的功能。

  

我认为这是我想要解决用户日历的问题,但请记住这个&#34; userDataAccountId&#34;参数是用户的ID,我应该在哪里找到它?

userDataAccoundId可以来自已知的AppointmentCalendar。这是真的,你可以通过这个属性识别用户帐户数据。但即使您从属于一个用户帐户的日历中获取此属性,也不允许为该用户帐户创建新日历。您只能使用此属性将新日历添加到当前帐户。代码如下:

  var appCustomApptCalendarone  = await appointmentStore.CreateAppointmentCalendarAsync("currentacount-one");
  var userdataaccountid  = appCustomApptCalendarone.UserDataAccountId;
  var appCustomApptCalendartwo = await appointmentStore.CreateAppointmentCalendarAsync("currentacount-two", userdataaccountid);

更多详情请参阅official sample.