4

Я использую EWS 1.2 для отправки встреч. При создании новых Назначений TimeZone корректно отображается на почте уведомления, но при обновлении того же назначения, это TimeZone reset для UTC.Изменение TimeZone в UTC при обновлении Назначение

Может ли кто-нибудь помочь мне исправить эту проблему?

Вот пример кода, чтобы повторить вопрос:

ExchangeService service = new ExchangeService(ExchangeVersion.Exchange2010_SP1, TimeZoneInfo.FindSystemTimeZoneById("Eastern Standard Time")); 
service.Credentials = new WebCredentials("ews_calendar", PASSWORD, "acme"); 
service.Url = new Uri("https://acme.com/EWS/Exchange.asmx"); 

Appointment newAppointment = new Appointment(service); 
newAppointment.Subject = "Test Subject"; 
newAppointment.Body = "Test Body"; 
newAppointment.Start = new DateTime(2012, 03, 27, 17, 00, 0); 
newAppointment.End = newAppointment.Start.AddMinutes(30); 
newAppointment.RequiredAttendees.Add("[email protected]"); 

//Attendees get notification mail for this appointment using (UTC-05:00) Eastern Time (US & Canada) timezone 
//Here is the notification content received by attendees: 
//When: Tuesday, March 27, 2012 5:00 PM-5:30 PM. (UTC-05:00) Eastern Time (US & Canada) 
newAppointment.Save(SendInvitationsMode.SendToAllAndSaveCopy); 

// Pull existing appointment 
string itemId = newAppointment.Id.ToString(); 

Appointment existingAppointment = Appointment.Bind(service, new ItemId(itemId)); 

//Attendees get notification mail for this appointment using UTC timezone 
//Here is the notification content received by attendees: 
//When: Tuesday, March 27, 2012 11:00 PM-11:30 PM. UTC 
existingAppointment.Update(ConflictResolutionMode.AlwaysOverwrite, SendInvitationsOrCancellationsMode.SendToAllAndSaveCopy); 

ответ

1

Вы хотите установить AppointmentSchema.StartTimeZone и связать его как часть свойств объекта при связывании existingAppointment как illustrated here:

// Get an existing calendar item, requesting the Id, Start, and 
// StartTimeZone properties. 
PropertySet props = new PropertySet(
     AppointmentSchema.Id, 
     AppointmentSchema.Start, 
     AppointmentSchema.StartTimeZone); 
Appointment appt = Appointment.Bind(service, new ItemId("AQMkA="), props); 

Кажется, что часовой пояс по умолчанию - UTC.

+0

Я установил НазначениеSchema.StartTimeZone, как вы предложили, но все же EWS отправляет письмо с уведомлением в часовой пояс UTC. –

+0

@FirozAnsari Понял. Аналогично, что происходит, когда вы привязываете его для «newAppointment» в вашем коде выше? [Связанная статья] (http://msdn.microsoft.com/en-us/library/ee332363 (v = exchangeg.140) .aspx), по-видимому, охватывает многие случаи этой точной проблемы и функции в EWS для Exchange 2010. Если вы не сможете собрать больше информации о свойствах вашего сервера, я считаю, что вызывать связь с четко определенным часовым поясом - это наиболее подходящий курс действий. – MrGomez

+0

Спасибо MrGomez. С помощью newAppointment часовой пояс уведомления правильный. Моя единственная проблема заключается в обновлении существующих назначений. Я просмотрел эту статью, и в этой статье объясняется, как преобразовать дату начала и окончания в определенный часовой пояс. Я не уверен, как я могу преобразовать даты при вызове existingAppointment.Update. Еще раз спасибо за вашу помощь. –

1

Попробуйте использовать другую перегрузку Bind(), которая позволяет явно указывать, какие свойства необходимо загрузить. В основном указать все TimeZone конкретное определение свойства в третьем параметре из Bind(), относительно бумаги MSDN по To change the time zone for an appointment without changing the start time:

Привязать к существующему назначению, используя свой уникальный идентификатор. следующий код показывает, как привязываться к существующей встрече, предоставить с информацией о конфигурации соединения с помощью объекта ExchangeService с именем service и запросить определенное подмножество свойств , включая свойства DateTime и временные зоны . ItemId был сокращен, чтобы сохранить читаемость. Для в этом примере предположим, что служебный объект имеет область в часовой пояс Тихоокеанского времени (PST).

var appt = Appointment.Bind(
      service, 
      new ItemId(itemId), 
      new PropertySet(
        BasePropertySet.IdOnly, 
        AppointmentSchema.Start, 
        AppointmentSchema.ReminderDueBy, 
        AppointmentSchema.End, 
        AppointmentSchema.StartTimeZone, 
        AppointmentSchema.EndTimeZone, 
        AppointmentSchema.TimeZone)); 

appt.StartTimeZone = TimeZoneInfo.FindSystemTimeZoneById("Coordinated Universal Time"); 
appt.EndTimeZone = TimeZoneInfo.FindSystemTimeZoneById("Coordinated Universal Time"); 

appt.Update(
     ConflictResolutionMode.AlwaysOverwrite, 
     SendInvitationsOrCancellationsMode.SendToAllAndSaveCopy); 

appt.Load(new PropertySet(
        BasePropertySet.IdOnly, 
        AppointmentSchema.Start,    
        AppointmentSchema.ReminderDueBy, 
        AppointmentSchema.End, 
        AppointmentSchema.StartTimeZone, 
        AppointmentSchema.EndTimeZone, 
        AppointmentSchema.TimeZone)); 

Также ниже вы можете найти полезные MSDN как-тос:

 Смежные вопросы

  • Нет связанных вопросов^_^