/// <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(); }
/// <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(); }