Exemple #1
0
        /// <summary>
        /// Returns the external data repository synchronization object by a unique foreign key from synchronization metadata.
        /// </summary>
        /// <param name="schema">Schema.</param>
        /// <param name="itemMetadata">Synchronization metadata.</param>
        /// <returns>Created instance of <see cref="IRemoteItem"/>.</returns>
        public override IRemoteItem LoadSyncItem(SyncItemSchema schema, ItemMetadata itemMetadata)
        {
            SysSyncMetaData syncItemMetadata = itemMetadata.FirstOrDefault(item => item.SyncSchemaName == "Activity");

            if (syncItemMetadata == null)
            {
                var notChangedAppointment = CreateExchangeAppointment(schema, null, string.Empty, TimeZone);
                notChangedAppointment.State = SyncState.None;
                return(notChangedAppointment);
            }
            string       itemId = GetRemoteId(syncItemMetadata);
            ExchangeBase remoteItem;
            var          appointment = SafeBindItem <Exchange.Appointment>(Service, new Exchange.ItemId(itemId));

            if (appointment == null && _userConnection.GetIsFeatureEnabled("SyncDeletedAppointments"))
            {
                appointment = GetAppointmentByLocalIdProperty(syncItemMetadata);
            }
            if (appointment != null)
            {
                remoteItem        = CreateExchangeAppointment(schema, appointment, TimeZone);
                remoteItem.Action = SyncAction.Update;
            }
            else
            {
                string itemRemoteId = syncItemMetadata.RemoteId;
                appointment       = new Exchange.Appointment(Service);
                remoteItem        = CreateExchangeAppointment(schema, appointment, itemRemoteId, TimeZone);
                remoteItem.State  = SyncState.Deleted;
                remoteItem.Action = SyncAction.Delete;
            }
            return(remoteItem);
        }
Exemple #2
0
        /// <summary>
        /// Loads exchange appointment from exchange, filtered by related <paramref name="activityMetadata"/> to
        /// activity unique identifier.
        /// </summary>
        /// <param name="activityMetadata">Activity instance synchronization metadata.</param>
        /// <returns>If appointment with activity id found, returns <see cref="Exchange.Appointment"/> instance.
        /// Otherwise returns null.</returns>
        private Exchange.Appointment GetAppointmentByLocalIdProperty(SysSyncMetaData activityMetadata)
        {
            var localId             = activityMetadata.LocalId;
            var filters             = new Exchange.SearchFilter.SearchFilterCollection(Exchange.LogicalOperator.And);
            var customPropSetFilter = new Exchange.SearchFilter.IsEqualTo(ExchangeUtilityImpl.LocalIdProperty, localId.ToString());

            filters.Add(customPropSetFilter);
            foreach (var noteFolder in Folders)
            {
                Exchange.PropertySet idOnlyPropertySet = new Exchange.PropertySet(Exchange.BasePropertySet.IdOnly);
                var itemView = new Exchange.ItemView(1)
                {
                    PropertySet = idOnlyPropertySet
                };
                IEnumerable <Exchange.Item> itemCollection = GetCalendarItemsByFilter(noteFolder, filters, itemView);
                if (itemCollection == null)
                {
                    continue;
                }
                foreach (Exchange.Item item in itemCollection)
                {
                    Exchange.Appointment appointment = SafeBindItem <Exchange.Appointment>(Service, item.Id);
                    if (appointment != null)
                    {
                        return(appointment);
                    }
                }
            }
            return(null);
        }
Exemple #3
0
 /// <summary>Gets remote Id from extend property.</summary>
 /// <param name="syncItemMetadata">Synchronization metadata.</param>
 /// <returns>Unique identifier item in remote storage.</returns>
 public string GetRemoteId(SysSyncMetaData syncItemMetadata)
 {
     if (!(syncItemMetadata.ExtraParameters).IsNullOrEmpty())
     {
         JObject activityExtendProperty = JObject.Parse(syncItemMetadata.ExtraParameters);
         return((string)activityExtendProperty["RemoteId"]);
     }
     else
     {
         throw new ItemNotFoundException("Extra parameters is empty");
     }
 }
Exemple #4
0
        /// <summary>
        /// Returns activity hash stored in activity synchronization metadata.
        /// </summary>
        /// <param name="itemMetadata"><see cref="ItemMetadata"/> instance.</param>
        /// <returns>Stored activity hash.</returns>
        protected virtual string GetActivityHashFromMetadata(ItemMetadata itemMetadata)
        {
            string result = string.Empty;

            if (itemMetadata != null)
            {
                SysSyncMetaData activityMetaData = itemMetadata.FirstOrDefault(item => item.SyncSchemaName == "Activity");
                if (activityMetaData != null)
                {
                    string extraParameters = activityMetaData.ExtraParameters;
                    if (!extraParameters.IsNullOrEmpty())
                    {
                        JObject activityExtendProperty = JObject.Parse(activityMetaData.ExtraParameters);
                        result = (string)activityExtendProperty["ActivityHash"];
                    }
                }
            }
            return(result);
        }