/// <summary>
        /// Performs input validation and gets activities by searching with some params
        /// </summary>
        /// <param name="request">Request that specifies the search parameters</param>
        /// <returns>Response that contains a list of activities.</returns>
        public static ActivitySearchReplyDC SearchActivities(ActivitySearchRequestDC request)
        {
            var reply = new ActivitySearchReplyDC();

            try
            {
                // Validates the input and throws ValidationException for any issues found.
                request.ValidateRequest();

                reply = ActivityRepositoryService.SearchActivities(request);
            }
            catch (ValidationException e)
            {
                e.HandleException();
            }
            catch (DataAccessException e)
            {
                e.HandleException();
            }

            return reply;
        }
        /// <summary>
        /// Search the activities for a criteria and do paging to return only a certain amount of
        /// results.
        /// </summary>
        /// <param name="request">ActivitySearchRequestDC</param>
        /// <returns>List of activities.</returns>
        public static ActivitySearchReplyDC SearchActivities(ActivitySearchRequestDC request)
        {
            ActivitySearchReplyDC result = new ActivitySearchReplyDC();
            var resultCollection = new List<StoreActivitiesDC>();
            Database database = null;
            DbCommand command = null;
            StoreActivitiesDC sab = null;

            try
            {
                database = DatabaseFactory.CreateDatabase();
                command = database.GetStoredProcCommand(StoredProcNames.ActivitySearch);
                database.AddParameter(command, "@SearchText", DbType.String, ParameterDirection.Input, null, DataRowVersion.Default, request.SearchText);
                database.AddParameter(command, "@SortColumn", DbType.String, ParameterDirection.Input, null, DataRowVersion.Default, request.SortColumn);
                database.AddParameter(command, "@SortAscending", DbType.Boolean, ParameterDirection.Input, null, DataRowVersion.Default, request.SortAscending);
                database.AddParameter(command, "@PageSize", DbType.Int32, ParameterDirection.Input, null, DataRowVersion.Default, request.PageSize);
                database.AddParameter(command, "@PageNumber", DbType.Int32, ParameterDirection.Input, null, DataRowVersion.Default, request.PageNumber);
                database.AddParameter(command, "@FilterOlder", DbType.Boolean, ParameterDirection.Input, null, DataRowVersion.Default, request.FilterOlder);
                database.AddParameter(command, "@FilterByName", DbType.Boolean, ParameterDirection.Input, null, DataRowVersion.Default, request.FilterByName);
                database.AddParameter(command, "@FilterByDescription", DbType.Boolean, ParameterDirection.Input, null, DataRowVersion.Default, request.FilterByDescription);
                database.AddParameter(command, "@FilterByTags", DbType.Boolean, ParameterDirection.Input, null, DataRowVersion.Default, request.FilterByTags);
                database.AddParameter(command, "@FilterByType", DbType.Boolean, ParameterDirection.Input, null, DataRowVersion.Default, request.FilterByType);
                database.AddParameter(command, "@FilterByVersion", DbType.Boolean, ParameterDirection.Input, null, DataRowVersion.Default, request.FilterByVersion);
                database.AddParameter(command, "@FilterByCreator", DbType.Boolean, ParameterDirection.Input, null, DataRowVersion.Default, request.FilterByCreator);

                using (IDataReader reader = database.ExecuteReader(command))
                {
                    while (reader.Read())
                    {
                        sab = new StoreActivitiesDC();
                        sab.Name = Convert.ToString(reader["Name"]);
                        sab.Description = Convert.ToString(reader["Description"]);
                        sab.Id = Convert.ToInt32(reader["Id"]);
                        sab.InsertedByUserAlias = Convert.ToString(reader["InsertedByUserAlias"]);
                        sab.MetaTags = Convert.ToString(reader["MetaTags"]);
                        sab.Guid = new Guid(Convert.ToString(reader["Guid"]));
                        sab.Version = Convert.ToString(reader["Version"]);
                        sab.WorkflowTypeName = Convert.ToString(reader["WorkFlowTypeName"]);
                        if (reader["InsertedDateTime"] != DBNull.Value)
                        {
                            sab.InsertedDateTime = Convert.ToDateTime(reader["InsertedDateTime"]);
                        }
                        resultCollection.Add(sab);
                    }

                    result.SearchResults = resultCollection;
                    reader.NextResult();

                    if (reader.Read())
                    {
                        result.ServerResultsLength = Convert.ToInt32(reader["Total"]);
                    }

                }
            }
            catch (SqlException ex)
            {
                ex.HandleException();
            }

            return result;
        }