Пример #1
0
        /// <summary>
        /// Creates audit logs and/or triggers workflows for items that were changed
        /// </summary>
        /// <param name="updatedItems">The updated items.</param>
        /// <param name="personAlias">The person alias.</param>
        /// <param name="enableAuditing">if set to <c>true</c> [enable auditing].</param>
        protected virtual void RockPostSave(List <ContextItem> updatedItems, PersonAlias personAlias, bool enableAuditing = false)
        {
            if (enableAuditing)
            {
                try
                {
                    var audits = updatedItems.Select(i => i.Audit).ToList();
                    if (audits.Any(a => a.Details.Any()))
                    {
                        var transaction = new Rock.Transactions.AuditTransaction();
                        transaction.Audits = audits;
                        Rock.Transactions.RockQueue.TransactionQueue.Enqueue(transaction);
                    }
                }
                catch (SystemException ex)
                {
                    ExceptionLogService.LogException(ex, null);
                }
            }

            foreach (var item in updatedItems)
            {
                if (item.State == EntityState.Detached || item.State == EntityState.Deleted)
                {
                    TriggerWorkflows(item, WorkflowTriggerType.PostDelete, personAlias);
                }
                else
                {
                    TriggerWorkflows(item, WorkflowTriggerType.ImmediatePostSave, personAlias);
                    TriggerWorkflows(item, WorkflowTriggerType.PostSave, personAlias);
                }
            }
        }
Пример #2
0
        /// <summary>
        /// Saves the specified item.
        /// </summary>
        /// <param name="item">The item.</param>
        /// <param name="personId">The person id.</param>
        /// <returns></returns>
        public virtual bool Save(T item, int?personId)
        {
            ErrorMessages = new List <string>();

            if (!TriggerWorkflows(item, WorkflowTriggerType.PreSave, personId))
            {
                return(false);
            }

            if (item != null && item.Guid == Guid.Empty)
            {
                item.Guid = Guid.NewGuid();
            }

            List <EntityChange> changes;
            List <AuditDto>     audits;
            List <string>       errorMessages;

            if (_repository.Save(personId, out changes, out audits, out errorMessages))
            {
                if (changes != null && changes.Count > 0)
                {
                    var transaction = new Rock.Transactions.EntityChangeTransaction();
                    transaction.Changes  = changes;
                    transaction.PersonId = personId;
                    Rock.Transactions.RockQueue.TransactionQueue.Enqueue(transaction);
                }

                if (audits != null && audits.Count > 0)
                {
                    var transaction = new Rock.Transactions.AuditTransaction();
                    transaction.Audits = audits;
                    Rock.Transactions.RockQueue.TransactionQueue.Enqueue(transaction);
                }

                TriggerWorkflows(item, WorkflowTriggerType.PostSave, personId);

                return(true);
            }
            else
            {
                ErrorMessages = errorMessages;
                return(false);
            }
        }
Пример #3
0
        /// <summary>
        /// Creates audit logs and/or triggers workflows for items that were changed
        /// </summary>
        /// <param name="updatedItems">The updated items.</param>
        /// <param name="personAlias">The person alias.</param>
        /// <param name="enableAuditing">if set to <c>true</c> [enable auditing].</param>
        protected virtual void RockPostSave( List<ContextItem> updatedItems, PersonAlias personAlias, bool enableAuditing = false )
        {
            if ( enableAuditing )
            {
                try
                {
                    var audits = updatedItems.Select( i => i.Audit ).ToList();
                    if ( audits.Any( a => a.Details.Any() ) )
                    {
                        var transaction = new Rock.Transactions.AuditTransaction();
                        transaction.Audits = audits;
                        Rock.Transactions.RockQueue.TransactionQueue.Enqueue( transaction );
                    }
                }
                catch ( SystemException ex )
                {
                    ExceptionLogService.LogException( ex, null );
                }
            }

            foreach ( var item in updatedItems )
            {
                if ( item.State == EntityState.Detached || item.State == EntityState.Deleted )
                {
                    TriggerWorkflows( item, WorkflowTriggerType.PostDelete, personAlias );
                }
                else
                {
                    TriggerWorkflows( item, WorkflowTriggerType.ImmediatePostSave, personAlias );
                    TriggerWorkflows( item, WorkflowTriggerType.PostSave, personAlias );
                }
            }
        }