/// <summary> /// This method will execute an operation returning a result. This method is also used in bulk operations. /// </summary> /// <param name="input"></param> /// <returns></returns> public OperationResult ExecuteOperation(OperationInput input) { OperationResult operationResult; // Use LogMethodExecution to add entry and exit tracing to a method. // When wrapped in a using statement, the exit point // is written during garbage collection. using (new LogMethodExecution (Globals.ConnectorName, "Execute Operation")) { //Construct a new instance of the operation handler //passing along the current instance of the data access object OperationHandler operationHandler = new OperationHandler(_dataAccess); try { // Use the name stored in the operation // input to determine the correct operation to execute switch (input.Name.ToLower()) { case "delete": operationResult = operationHandler.DeleteOperation(input); break; case "create": operationResult = operationHandler.CreateOperation(input); break; case "update": operationResult = operationHandler.UpdateOperation(input); break; default: // Throw an exception when an operation // that does not exist is requested throw new InvalidExecuteOperationException( ErrorCodes.UnknownOperation.Number, ErrorCodes.UnknownOperation.Description); } LogOperationResult(operationResult); } //Here we throw the Fatal Error Exception which is //used to notify upper layers that an error has occured //in the Connector and will be unable to recover from it catch (FatalErrorException) { throw; } catch (Exception exception) { //Log any other exceptions that occur in method execution and //throw the Invalid Execute Operation Exception string msg = string.Format("{0} {1}", Globals.ConnectorName, exception.Message); Logger.Write(Logger.Severity.Error, Globals.ConnectorName, msg); throw new InvalidExecuteOperationException(msg); } } return operationResult; }