示例#1
0
        /// <summary>
        /// Starts <paramref name="entity"/> synchronization action for users that has synchronization.
        /// </summary>
        /// <param name="entity"><see cref="Entity"/> instance.</param>
        /// <param name="e"><paramref name="entity"/> event arguments instance.</param>
        /// <param name="action">Synchronization action.</param>
        protected void SyncEntity(Entity entity, EntityAfterEventArgs e, SyncAction action)
        {
            var userConnection = entity.UserConnection;

            if (!userConnection.GetIsFeatureEnabled("ExchangeCalendarWithoutMetadata") ||
                !ClassFactory.HasBinding(typeof(ISynchronizationUCManager)))
            {
                return;
            }
            var asyncExecutor = ClassFactory.Get <IEntityEventAsyncExecutor>(new ConstructorArgument("userConnection", userConnection));

            foreach (var user in GetUsers(entity, action, entity.UserConnection))
            {
                var controllerNames = user.Value;
                if (e.ModifiedColumnValues == null)
                {
                    e.ModifiedColumnValues = new EntityColumnValueCollection(userConnection);
                }
                var operationArgs = new SyncEntityEventAsyncOperationArgs(entity, e);
                operationArgs.Controllers   = controllerNames;
                operationArgs.UserContactId = user.Key;
                operationArgs.Action        = action;
                asyncExecutor.ExecuteAsync <SynchronizationControllerManager>(operationArgs);
            }
        }
        /// <summary>
        /// Returns related entity ModifiedOn column value. Returns <c>DateTime.UtcNow</c> if ModifiedOn column value not avaliable.
        /// </summary>
        /// <param name="userConnection"><see cref="UserConnection"/> instance.</param>
        /// <param name="arguments">Changed entity synchronization events.</param>
        /// <returns>ModifiedOn column value.</returns>
        protected DateTime GetModifiedOnColumnValue(UserConnection userConnection, SyncEntityEventAsyncOperationArgs arguments)
        {
            if (!arguments.EntityColumnValues.ContainsKey("ModifiedOn"))
            {
                return(DateTime.UtcNow);
            }
            var modifiedOn = (DateTime)arguments.EntityColumnValues["ModifiedOn"];

            return(modifiedOn.Kind == DateTimeKind.Utc ? modifiedOn : TimeZoneInfo.ConvertTimeToUtc(modifiedOn, userConnection.CurrentUser.TimeZone));
        }
 /// <summary>
 /// Creates parameters collection for synchronization controllers execution.
 /// </summary>
 /// <param name="userConnection"><see cref="UserConnection"/> instance.</param>
 /// <param name="arguments">Changed entity synchronization events.</param>
 /// <returns>Parameters collection for synchronization controllers execution.</returns>
 protected virtual Dictionary <string, object> GetSynchronizationParams(UserConnection userConnection, SyncEntityEventAsyncOperationArgs arguments)
 {
     return(new Dictionary <string, object> {
         { "EntityId", arguments.EntityId },
         { "EntitySchemaName", arguments.EntitySchemaName },
         { "ModifiedOn", GetModifiedOnColumnValue(userConnection, arguments) },
         { "SyncAction", (int)arguments.Action },
         { "UserContactId", arguments.UserContactId },
         { "ColumnValues", arguments.EntityColumnValues }
     });
 }