Esempio n. 1
0
        /// <summary>
        /// Fills element in the remote storage from the element synchronization
        /// in the local storage.<paramref name="localItem"/>.
        /// </summary>
        /// <param name="localItem">The element synchronization in the local storage.</param>
        /// <param name="context">Synchronization context.</param>
        public override void FillRemoteItem(SyncContext context, LocalItem localItem)
        {
            var        exchangeContact = (Exchange.Contact)Item;
            SyncEntity localEntity     = localItem.Entities["Contact"][0];

            if (localEntity == null)
            {
                return;
            }
            if (localEntity.State == SyncState.Deleted)
            {
                return;
            }
            if (Action == SyncAction.None)
            {
                return;
            }
            var localContact = localEntity.Entity;

            if (localContact == null || GetEntityLockedForSync(localContact.PrimaryColumnValue, context))
            {
                Action = SyncAction.None;
                return;
            }
            if (Action == SyncAction.Update)
            {
                InitIdProperty(context);
            }
            exchangeContact.DisplayName = localContact.GetTypedColumnValue <string>("Name");
            exchangeContact.Surname     = localContact.GetTypedColumnValue <string>("Surname");
            exchangeContact.GivenName   = localContact.GetTypedColumnValue <string>("GivenName");
            exchangeContact.MiddleName  = localContact.GetTypedColumnValue <string>("MiddleName");
            exchangeContact.CompanyName = localContact.GetTypedColumnValue <string>("AccountName");
            exchangeContact.JobTitle    = localContact.GetTypedColumnValue <string>("JobTitle");
            exchangeContact.Department  = localContact.GetTypedColumnValue <string>("DepartmentName");
            var birthDate = localContact.GetTypedColumnValue <DateTime>("BirthDate");

            if (birthDate != DateTime.MinValue)
            {
                exchangeContact.Birthday = birthDate;
            }
            if (Action == SyncAction.Create)
            {
                exchangeContact.FileAsMapping = Exchange.FileAsMapping.DisplayName;
                exchangeContact.SetExtendedProperty(ExchangeUtilityImpl.LocalIdProperty, localContact.PrimaryColumnValue.ToString());
            }
            exchangeContact.BusinessHomePage = GetWebPageForRemoteItem(localItem, context.UserConnection,
                                                                       localContact.PrimaryColumnValue);
            SetContactTitle(exchangeContact, localContact.GetTypedColumnValue <string>("SalutationTypeName"));
            SetContactGender(exchangeContact, localContact.GetTypedColumnValue <Guid>("GenderId"));
            var emailAddressesSynchronizer =
                new ExchangeEmailAddressDetailsSynchronizer(context, localItem, exchangeContact);
            var addressesSynchronizer =
                new ExchangeAddressDetailsSynchronizer(context, localItem, exchangeContact);
            var phoneNumbersSynchronizer =
                new ExchangePhoneNumbersDetailsSynchronizer(context, localItem, exchangeContact);

            emailAddressesSynchronizer.SyncRemoteDetails();
            addressesSynchronizer.SyncRemoteDetails();
            phoneNumbersSynchronizer.SyncRemoteDetails();
        }
Esempio n. 2
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();
        }