Example #1
0
        /// <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);
     }
 }
Example #4
0
        /// <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);
        }
Example #5
0
 /// <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);
     }
 }
Example #6
0
 private void LogError(SyncContext context, string message, string propertyName)
 {
     context.LogError(Action, SyncDirection.Upload, message, Item.Id.UniqueId, propertyName);
 }
Example #7
0
        /// <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();
        }