/// <summary> /// ####### <see cref="Exchange.EmailAddressEntry"/> # ##### <see cref="Exchange.EmailAddressKey"/> /// ## ####### ############# ######## #########. /// </summary> /// <param name="syncContext">######## #############.</param> /// <param name="contactRemoteId">########## ####### ####.</param> /// <param name="key">### ###### ######### #####, ## ######## ######## ######### /// <see cref="Exchange.EmailAddressEntry"/>.</param> public void DeleteContactEmailAddress(SyncContext syncContext, string contactRemoteId, Exchange.EmailAddressKey key) { Exchange.ExtendedPropertyDefinition[] emailAddressProperties = _emailAddressPropertiesMap.GetExtendedPropertiesByKey(key); var propertyGroup = new List <Exchange.ExtendedPropertyDefinition>(emailAddressProperties); var propertySet = new Exchange.PropertySet(Exchange.BasePropertySet.IdOnly, propertyGroup); Exchange.Item contact; try { contact = Exchange.Item.Bind(Service, contactRemoteId, propertySet); } catch (Exception ex) { syncContext.LogError(SyncAction.Create, SyncDirection.Download, "[ExchangeContactSyncProviderImpl.DeleteContactEmailAddress]: Error loading contact with Id: {0}", ex, contactRemoteId); return; } foreach (Exchange.ExtendedPropertyDefinition prop in emailAddressProperties) { contact.RemoveExtendedProperty(prop); } try { contact.Update(Exchange.ConflictResolutionMode.AlwaysOverwrite); } catch (Exception ex) { syncContext.LogError(SyncAction.Update, SyncDirection.Upload, string.Format( "[ExchangeContactSyncProviderImpl.DeleteContactEmailAddress] Error while updating contact with Id:" + "{0} Error details: {1}", contactRemoteId, ex.Message)); } }
/// <summary> /// Saves <paramref name="localItem"/> to database. /// </summary> /// <param name="context"><see cref="SyncContext"/> instance.</param> /// <param name="localItem"><see cref="LocalItem"/> instance.</param> /// <param name="itemId">External item identifier.</param> protected virtual void ApplyChanges(SyncContext context, LocalItem localItem, string itemId) { try { context.LocalProvider.ApplyChanges(context, localItem); } catch (Exception e) { context.LogError(SyncAction.Create, SyncDirection.DownloadAndUpload, "Error on item {0} processing", e, itemId); } }
/// <summary> /// Writes log message. /// </summary> /// <param name="context"><see cref="SyncContext"/> instance.</param> /// <param name="action"><see cref="SyncAction"/> enumeration.</param> /// <param name="syncDirection"><see cref="SyncDirection"/> enumeration.</param> /// <param name="format">String a composite format.</param> /// <param name="ex">Exception.</param> /// <param name="args">An array of additional parameters.</param> public virtual void LogMessage(SyncContext context, SyncAction action, SyncDirection syncDirection, string format, Exception ex, params object[] args) { if (ex == null) { context.LogInfo(action, syncDirection, format, args); } else { context.LogError(action, syncDirection, format, ex, args); } }
/// <summary> /// Check value of name fields of <paramref name="exchangeContact"/>. /// </summary> /// <param name="exchangeContact"><see cref="Exchange.Contact"/> instance.</param> /// <param name="context">Sync context.</param> /// <returns> /// True if all name fields empty. /// </returns> protected bool GetIsContactNameEmpty(Exchange.Contact exchangeContact, SyncContext context) { string surname = exchangeContact.Surname; string givenName = exchangeContact.GivenName; string middleName = exchangeContact.MiddleName; bool result = (string.IsNullOrEmpty(surname) && string.IsNullOrEmpty(givenName) && string.IsNullOrEmpty(middleName)); if (result) { context.LogError(Action, SyncDirection.Upload, GetLocalizableString(context.UserConnection, "NameFieldsEmptyTpl"), GetItemSimpleId()); } return(result); }
/// <summary> /// Sets contact extend property. /// </summary> /// <param name="exchangeContact">Exchange contact item in external storage.</param> /// <param name="contact">Contact item.</param> /// <param name="context">Synchronization context.</param> /// <returns>Status flag setting an extend property.</returns> public virtual bool SetContactExtendProperty(SyncContext context, Exchange.Contact exchangeContact, Guid contactId) { try { Object localId; if (!exchangeContact.TryGetProperty(ExchangeUtilityImpl.LocalIdProperty, out localId)) { exchangeContact.SetExtendedProperty(ExchangeUtilityImpl.LocalIdProperty, contactId.ToString()); exchangeContact.Update(Exchange.ConflictResolutionMode.AlwaysOverwrite); } return(true); } catch (Exception ex) { context.LogError(Action, SyncDirection.Upload, GetLocalizableString(context.UserConnection, "SetExtendedPropertyErrorTpl"), ex.Message); return(false); } }
private void LogError(SyncContext context, string message, string propertyName) { context.LogError(Action, SyncDirection.Upload, message, Item.Id.UniqueId, propertyName); }
/// <summary> /// Fills element synchronization in the local storage <paramref name="localItem"/> /// the value of the element in the external storage. /// </summary> /// <param name="localItem">Local storage synchronization element.</param> /// <param name="context">Synchronization context.</param> public override void FillLocalItem(SyncContext context, ref LocalItem localItem) { if (IsDeletedProcessed("Contact", ref localItem) || IsLocalItemDeleted(ref localItem)) { return; } var contactRemoteProvider = context.RemoteProvider as ExchangeContactSyncProviderImpl; var exchangeContact = Item as Exchange.Contact; if (exchangeContact == null) { context.LogError(Action, SyncDirection.Upload, GetLocalizableString(context.UserConnection, "InvalidItemTypeTpl"), GetItemSimpleId(), Item.Subject); Action = SyncAction.None; return; } string surname = exchangeContact.Surname; string givenName = exchangeContact.GivenName; string middleName = exchangeContact.MiddleName; if (GetIsContactNameEmpty(exchangeContact, context) || GetRemoteItemLockedForSync(context)) { Action = SyncAction.None; return; } LoadItemProperties(exchangeContact); var contact = GetContactInstance(context, localItem, exchangeContact); if (contact == null || !SetContactExtendProperty(context, exchangeContact, contact.PrimaryColumnValue)) { Action = SyncAction.None; return; } contact.SetColumnValue("Surname", surname); contact.SetColumnValue("GivenName", givenName); contact.SetColumnValue("MiddleName", middleName); contact.SetColumnValue("OwnerId", context.UserConnection.CurrentUser.ContactId); contact.SetColumnValue("JobTitle", exchangeContact.JobTitle); var birthdate = exchangeContact.SafeGetValue <DateTime>(Exchange.ContactSchema.Birthday); if (birthdate != DateTime.MinValue) { contact.SetColumnValue("BirthDate", birthdate); } Dictionary <string, Guid> accountsMap = contactRemoteProvider.AccountsMap; if (accountsMap != null) { string companyName = exchangeContact.CompanyName; if (string.IsNullOrEmpty(companyName)) { contact.SetColumnValue("AccountId", null); } else if (accountsMap.ContainsKey(companyName)) { contact.SetColumnValue("AccountId", accountsMap[companyName]); } } AddOrReplaceWebPageInLocalItem(context.UserConnection, localItem, contact.PrimaryColumnValue, exchangeContact.BusinessHomePage); var emailAddressesSynchronizer = new ExchangeEmailAddressDetailsSynchronizer(context, localItem, exchangeContact); var addressesSynchronizer = new ExchangeAddressDetailsSynchronizer(context, localItem, exchangeContact); var phoneNumbersSynchronizer = new ExchangePhoneNumbersDetailsSynchronizer(context, localItem, exchangeContact); emailAddressesSynchronizer.SyncLocalDetails(); addressesSynchronizer.SyncLocalDetails(); phoneNumbersSynchronizer.SyncLocalDetails(); }