我正在使用此代码段创建日历并将其放入用户的原生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,我应该在哪里找到它?
答案 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.