#c# #xaml #windows-runtime #windows-store-apps #appointment
#c# #xaml #windows-среда выполнения #windows-магазин-приложения #назначение
Вопрос:
Я экспериментирую с новым WinRT Appointments API в Windows 8.1 на основе образца, предоставленного на веб-сайте MSDN Microsoft: http://code.msdn.microsoft.com/windowsapps/Appointments-API-sample-2b55c76e
Это отлично работает, и я могу добавлять встречи без проблем, но при использовании метода из пространства имен всегда есть подтверждение от пользователя, который использует метод ShowAddAppointmentAsync
из Windows.ApplicationModel.Appointments.AppointmentManager
пространства имен, который показывает пользовательский интерфейс добавления назначений.
Я ищу решение для добавления большей коллекции встреч в календарь Windows 8 по умолчанию БЕЗ подтверждения для каждой отдельной встречи в коллекции. Есть ли способ обойти это и массово вставлять назначения? Может быть, Windows Live SDK?
Комментарии:
1. Может быть, это поможет msdn.microsoft.com/en-us/library/hh826523.aspx
Ответ №1:
Это правда, что API запрашивает пользователя перед сохранением, но для этого есть условие.
var appointment = new Windows.ApplicationModel.Appointments.Appointment();
appointment.details = "This is a dummy appointment";
appointment.reminder = 15000;
appointment.subject = "TEST APPPOINTMENT";
var x = new Windows.ApplicationModel.Appointments.AppointmentManager.requestStoreAsync(Windows.ApplicationModel.Appointments.AppointmentStoreAccessType.appCalendarsReadWrite).done(function (apppointmentStore) {
apppointmentStore.createAppointmentCalendarAsync("TEST CALENDAR").done(function (calendar) {
calendar.saveAppointmentAsync(appointment);
});
})
Ответ №2:
Вот пример, как это сделать с помощью C#
private AppointmentCalendar currentAppCalendar;
private AsyncLazy<AppointmentStore> lazyAppointmentStore = new AsyncLazy<AppointmentStore>(async () =>
{
var appStore = await AppointmentManager.RequestStoreAsync(AppointmentStoreAccessType.AppCalendarsReadWrite);
return appStore;
});
private AppointmentStore AppStore { get { return lazyAppointmentStore.Value.Resu< } }
public AppointmentService()
{
}
public async Task CreateCalendar()
{
IReadOnlyList<AppointmentCalendar> appCalendars =
await AppStore.FindAppointmentCalendarsAsync(FindAppointmentCalendarsOptions.IncludeHidden);
AppointmentCalendar appCalendar = null;
// Apps can create multiple calendars. Here app creates only one.
if (appCalendars.Count == 0)
{
appCalendar = await AppStore.CreateAppointmentCalendarAsync(Constants.CalendarName);
}
else
{
appCalendar = appCalendars[0];
}
appCalendar.OtherAppReadAccess = AppointmentCalendarOtherAppReadAccess.Full;
appCalendar.OtherAppWriteAccess = AppointmentCalendarOtherAppWriteAccess.SystemOnly;
// This app will show the details for the appointment. Use System to let the system show the details.
appCalendar.SummaryCardView = AppointmentSummaryCardView.App;
await appCalendar.SaveAsync();
currentAppCalendar = appCalendar;
}
public async Task<bool> CreateNewAppointment(Data.Schemas.Task task)
{
if (null == task)
throw new ArgumentNullException("task");
Appointment newAppointment = new Appointment();
this.SaveAppointmentData(task, newAppointment);
try
{
// Show system calendar to the user to be edited
string appointmentId = await AppointmentManager.ShowAddAppointmentAsync(newAppointment, Windows.Foundation.Rect.Empty);
return ! string.IsNullOrWhiteSpace(appointmentId);
// Just save the appointment
// await currentAppCalendar.SaveAppointmentAsync(newAppointment);
// return true;
}
catch
{
return false;
}
}
Проверьте мой пост, чтобы узнать больше об AsyncLazy.
Я надеюсь, что это поможет вам. С уважением. Juanlu
Комментарии:
1. Большое вам спасибо! Я повсюду искал функциональность календаря для Windows. Чтобы уточнить, нужно ли создавать новый календарь каждый раз, когда вы хотите назначить новую встречу?
Ответ №3:
Это невозможно при использовании WinRT appointments API. Всегда требуется взаимодействие с пользователем. MS приняла дизайнерское решение о том, что некоторые действия требуют взаимодействия с пользователем, и это одно из них.
Как указано @Ken Tucker, вы можете использовать Windows live api для создания встреч, но для этого требуется, чтобы пользователь вашего приложения подключился к Windows Live и предоставил ему необходимые разрешения.