Revision: 39683
                            
                                                            
                                    
                                        
Initial Code
                                    
                                    
                                                            
                                    
                                        
Initial URL
                                    
                                    
                                
                                                            
                                    
                                        
Initial Description
                                    
                                    
                                
                                                            
                                    
                                        
Initial Title
                                    
                                    
                                                            
                                    
                                        
Initial Tags
                                    
                                    
                                
                                                            
                                    
                                        
Initial Language
                                    
                                    
                                                    
                        at January 19, 2011 22:19 by RichardCustance
                            
                            Initial Code
/// <summary>
    /// An Extender to extend the behavior of deleting an Expense Record
    /// </summary>
    public class DeleteExtension : IOperationBehaviorExtender
    {
        #region IOperationBehaviorExtender Members
        /// <summary>
        /// The name of the action being extended
        /// </summary>
        public string Action
        {
            get { return "Expense/Delete"; }
        }
        /// <summary>
        /// Executed before the 'core' implemenation of the method is executed.
        /// </summary>
        /// <param name="action"></param>
        /// <param name="inputs"></param>
        /// <param name="faultMessage"></param>
        /// <returns>returning False will cancel the execution of the Invoke method, otherwise return true</returns>
        public bool BeforeInvoke(string action, object[] inputs, out string faultMessage)
        {
            faultMessage = string.Empty;
            return true;
        }
        /// <summary>
        /// Executed after the 'core' implementation of the method has been executed
        /// </summary>
        /// <param name="action"></param>
        /// <param name="inputs"></param>
        /// <param name="outputs"></param>
        /// <param name="returnValue"></param>
        /// <remarks>
        /// If a fault occurs within this method ensure an Exception is thrown to rollback (if possible) the Invoke and BeforeInvoke implementations
        /// </remarks>
        public void AfterInvoke(string action, object[] inputs, ref object[] outputs, ref object returnValue)
        {
            
        }
        /// <summary>
        /// Very simple validation...don't let an expense be deleted if the id is an odd number
        /// </summary>
        /// <param name="action"></param>
        /// <param name="inputs"></param>
        /// <param name="message"></param>
        /// <returns>bool (false will cancel the method being invoked)</returns>
        /// <remarks>
        /// If a fault occurs within this method ensure an Exception is thrown to rollback (if possible) the Invoke and BeforeInvoke implementations
        /// </remarks>
        public bool ValidateBeforeCall(string action, object[] inputs, out string message)
        {
            bool result = true;
            message = string.Empty;
            // cast the input to the correct type of object
            if (inputs[0] is int)
            {
                int? id = (int?)inputs[0];
                if ((id % 2) > 0)
                {
                    result = false;
                    message = "This Expense is still being processed and cannot be deleted";
                }
            }
            return result;
        }
        /// <summary>
        /// Allows extra processing to occur after the method has been fully processed
        /// </summary>
        /// <param name="action"></param>
        /// <param name="outputs"></param>
        /// <param name="returnValue"></param>
        /// <param name="correlationState"></param>
        public void AfterCall(string action, object[] outputs, object returnValue, object correlationState)
        {
            
        }
        #endregion
    }
                                Initial URL
Initial Description
Initial Title
Web Extensibility Download Part 2 - Extending Server-side code behavior
Initial Tags
Initial Language
C#