ScopeToTimeZone method
DateTime
ScopeToTimeZone(
- ExchangeServiceBase service,
- DateTime dateTime,
- PropertyBag propertyBag,
- bool isUpdateOperation,
override
Implementation
@override
DateTime ScopeToTimeZone(ExchangeServiceBase service, DateTime dateTime,
PropertyBag propertyBag, bool isUpdateOperation) {
if (!propertyBag.Owner!.GetIsCustomDateTimeScopingRequired()) {
// Most item types do not require a custom scoping mechanism. For those item types,
// use the default scoping mechanism.
return super
.ScopeToTimeZone(service, dateTime, propertyBag, isUpdateOperation);
} else {
// Appointment, however, requires a custom scoping mechanism which is based on an
// associated time zone property.
PropertyDefinition timeZoneProperty =
this.GetTimeZoneProperty(service.RequestedServerVersion);
Object? timeZonePropertyValue = null;
// todo : uncomment
// bool timeZonePropertyIsSet = propertyBag.TryGetProperty(timeZoneProperty, out timeZonePropertyValue);
if (timeZonePropertyValue != null &&
propertyBag.IsPropertyUpdated(timeZoneProperty)) {
// If we have the associated time zone property handy and if it has been updated locally,
// then we scope the date time to that time zone.
try {
// todo : fix time zone converting
DateTime convertedDateTime =
EwsUtilities.ConvertTime(dateTime, TimeZone.UTC, TimeZone.UTC);
return convertedDateTime;
// DateTime convertedDateTime = EwsUtilities.ConvertTime(
// dateTime,
// (TimeZoneInfo)timeZonePropertyValue,
// TimeZoneInfo.Utc);
//
// // This is necessary to stamp the date/time with the Local kind.
// return new DateTime(convertedDateTime.Ticks, DateTimeKind.Utc);
} on TimeZoneConversionException catch (ex, stacktrace) {
throw new PropertyException(
"InvalidDateTime($dateTime)", Name, ex, stacktrace);
}
} else {
if (isUpdateOperation) {
// In an update operation, what we do depends on what version of EWS
// we are targeting.
if (service.RequestedServerVersion ==
ExchangeVersion.Exchange2007_SP1) {
// For Exchange 2007 SP1, we still need to scope to the service's time zone.
return super.ScopeToTimeZone(
service, dateTime, propertyBag, isUpdateOperation);
} else {
// Otherwise, we let the server scope to the appropriate time zone.
return dateTime;
}
} else {
// In a Create operation, always scope to the service's time zone.
return super.ScopeToTimeZone(
service, dateTime, propertyBag, isUpdateOperation);
}
}
}
}