private void ExecuteDataExport(ActionArgs args, ActionResult result) { if (!(string.IsNullOrEmpty(args.CommandArgument))) { var arguments = args.CommandArgument.Split(','); if (arguments.Length > 0) { var sameController = (args.Controller == arguments[0]); args.Controller = arguments[0]; if (arguments.Length == 1) { args.View = "grid1"; } else { args.View = arguments[1]; } if (sameController) { args.SortExpression = null; } SelectView(args.Controller, args.View); } } var request = new PageRequest(-1, -1, null, null); request.SortExpression = args.SortExpression; request.Filter = args.Filter; request.ContextKey = null; request.PageIndex = 0; request.PageSize = Int32.MaxValue; request.View = args.View; if (args.CommandName.EndsWith("Template")) { request.PageSize = 0; args.CommandName = "ExportCsv"; } // store export data to a temporary file var fileName = Path.GetTempFileName(); var writer = File.CreateText(fileName); try { var page = new ViewPage(request); page.ApplyDataFilter(_config.CreateDataFilter(), args.Controller, args.View, null, null, null); if (_serverRules == null) { _serverRules = _config.CreateBusinessRules(); if (_serverRules == null) { _serverRules = CreateBusinessRules(); } } _serverRules.Page = page; _serverRules.ExecuteServerRules(request, ActionPhase.Before); using (var connection = CreateConnection(this)) { var selectCommand = CreateCommand(connection); if ((selectCommand == null) && _serverRules.EnableResultSet) { PopulatePageFields(page); EnsurePageFields(page, null); } ConfigureCommand(selectCommand, page, CommandConfigurationType.Select, null); var reader = ExecuteResultSetReader(page); if (reader == null) { reader = selectCommand.ExecuteReader(); } if (args.CommandName.EndsWith("Csv")) { ExportDataAsCsv(page, reader, writer); } if (args.CommandName.EndsWith("Rss")) { ExportDataAsRss(page, reader, writer); } if (args.CommandName.EndsWith("Rowset")) { ExportDataAsRowset(page, reader, writer); } reader.Close(); } _serverRules.ExecuteServerRules(request, ActionPhase.After); } finally { writer.Close(); } result.Values.Add(new FieldValue("FileName", null, fileName)); }
private void ExecuteDataExport(ActionArgs args, ActionResult result) { if (!(String.IsNullOrEmpty(args.CommandArgument))) { string[] arguments = args.CommandArgument.Split(','); if (arguments.Length > 0) { bool sameController = (args.Controller == arguments[0]); args.Controller = arguments[0]; if (arguments.Length == 1) args.View = "grid1"; else args.View = arguments[1]; if (sameController) args.SortExpression = null; SelectView(args.Controller, args.View); } } PageRequest request = new PageRequest(-1, -1, null, null); request.SortExpression = args.SortExpression; request.Filter = args.Filter; request.ContextKey = null; request.PageIndex = 0; request.PageSize = Int32.MaxValue; request.View = args.View; if (args.CommandName.EndsWith("Template")) { request.PageSize = 0; args.CommandName = "ExportCsv"; } // store export data to a temporary file string fileName = Path.GetTempFileName(); StreamWriter writer = File.CreateText(fileName); try { ViewPage page = new ViewPage(request); page.ApplyDataFilter(_config.CreateDataFilter(), args.Controller, args.View, null, null, null); if (_serverRules == null) { _serverRules = _config.CreateBusinessRules(); if (_serverRules == null) _serverRules = CreateBusinessRules(); } _serverRules.Page = page; _serverRules.ExecuteServerRules(request, ActionPhase.Before); using (DbConnection connection = CreateConnection()) { DbCommand selectCommand = CreateCommand(connection); if ((selectCommand == null) && _serverRules.EnableResultSet) { PopulatePageFields(page); EnsurePageFields(page, null); } ConfigureCommand(selectCommand, page, CommandConfigurationType.Select, null); DbDataReader reader = ExecuteResultSetReader(page); if (reader == null) reader = selectCommand.ExecuteReader(); if (args.CommandName.EndsWith("Csv")) ExportDataAsCsv(page, reader, writer); if (args.CommandName.EndsWith("Rss")) ExportDataAsRss(page, reader, writer); if (args.CommandName.EndsWith("Rowset")) ExportDataAsRowset(page, reader, writer); reader.Close(); } _serverRules.ExecuteServerRules(request, ActionPhase.After); } finally { writer.Close(); } result.Values.Add(new FieldValue("FileName", null, fileName)); }
ViewPage IDataController.GetPage(string controller, string view, PageRequest request) { SelectView(controller, view); request.AssignContext(controller, this._viewId, _config); ViewPage page = new ViewPage(request); if (_config.PlugIn != null) _config.PlugIn.PreProcessPageRequest(request, page); _config.AssignDynamicExpressions(page); page.ApplyDataFilter(_config.CreateDataFilter(), request.Controller, request.View, request.LookupContextController, request.LookupContextView, request.LookupContextFieldName); BusinessRules rules = InitBusinessRules(request, page); using (DbConnection connection = CreateConnection()) { if (_serverRules.RequiresRowCount) { DbCommand countCommand = CreateCommand(connection); ConfigureCommand(countCommand, page, CommandConfigurationType.SelectCount, null); if (_serverRules.EnableResultSet) page.TotalRowCount = _serverRules.ResultSetSize; else if (YieldsSingleRow(countCommand)) page.TotalRowCount = 1; else page.TotalRowCount = Convert.ToInt32(countCommand.ExecuteScalar()); if (page.RequiresAggregates) { DbCommand aggregateCommand = CreateCommand(connection); ConfigureCommand(aggregateCommand, page, CommandConfigurationType.SelectAggregates, null); DbDataReader reader = aggregateCommand.ExecuteReader(); if (reader.Read()) { object[] aggregates = new object[page.Fields.Count]; for (int i = 0; (i < aggregates.Length); i++) { DataField field = page.Fields[i]; if (field.Aggregate != DataFieldAggregate.None) { object v = reader[field.Name]; if (!(DBNull.Value.Equals(v))) { if (!(field.FormatOnClient) && !(String.IsNullOrEmpty(field.DataFormatString))) v = String.Format(field.DataFormatString, v); aggregates[i] = v; } } } page.Aggregates = aggregates; } reader.Close(); } } DbCommand selectCommand = CreateCommand(connection); if ((selectCommand == null) && _serverRules.EnableResultSet) { PopulatePageFields(page); EnsurePageFields(page, null); } if (page.RequiresMetaData) PopulatePageCategories(page); SyncRequestedPage(request, page, connection); ConfigureCommand(selectCommand, page, CommandConfigurationType.Select, null); if ((page.PageSize > 0) && !((request.Inserting || request.DoesNotRequireData))) { EnsureSystemPageFields(request, page, selectCommand); DbDataReader reader = ExecuteResultSetReader(page); if (reader == null) if (selectCommand == null) reader = ExecuteVirtualReader(request, page); else reader = TransactionManager.ExecuteReader(request, page, selectCommand); while (page.SkipNext()) reader.Read(); while (page.ReadNext() && reader.Read()) { object[] values = new object[page.Fields.Count]; for (int i = 0; (i < values.Length); i++) { DataField field = page.Fields[i]; object v = reader[field.Name]; if (!(DBNull.Value.Equals(v))) { if (field.IsMirror) v = String.Format(field.DataFormatString, v); else if ((field.Type == "Guid") && (v.GetType() == typeof(byte[]))) v = new Guid(((byte[])(v))); else v = ConvertObjectToValue(v); values[i] = v; } if (!(String.IsNullOrEmpty(field.SourceFields))) values[i] = CreateValueFromSourceFields(field, reader); } if (page.RequiresPivot) page.AddPivotValues(values); else page.Rows.Add(values); } reader.Close(); } if (request.RequiresFirstLetters && this._viewType != "Form") if (!(page.RequiresRowCount)) page.FirstLetters = String.Empty; else { DbCommand firstLettersCommand = CreateCommand(connection); string[] oldFilter = page.Filter; ConfigureCommand(firstLettersCommand, page, CommandConfigurationType.SelectFirstLetters, null); page.Filter = oldFilter; if (!(String.IsNullOrEmpty(page.FirstLetters))) { DbDataReader reader = firstLettersCommand.ExecuteReader(); StringBuilder firstLetters = new StringBuilder(page.FirstLetters); while (reader.Read()) { firstLetters.Append(","); string letter = Convert.ToString(reader[0]); if (!(String.IsNullOrEmpty(letter))) firstLetters.Append(letter); } reader.Close(); page.FirstLetters = firstLetters.ToString(); } } } if (_config.PlugIn != null) _config.PlugIn.ProcessPageRequest(request, page); if (request.Inserting) page.NewRow = new object[page.Fields.Count]; if (request.Inserting) { if (_serverRules.SupportsCommand("Sql|Code", "New")) _serverRules.ExecuteServerRules(request, ActionPhase.Execute, "New", page.NewRow); } else if (_serverRules.SupportsCommand("Sql|Code", "Select")) foreach (object[] row in page.Rows) _serverRules.ExecuteServerRules(request, ActionPhase.Execute, "Select", row); if (rules != null) { IRowHandler rowHandler = rules; if (request.Inserting) { if (rowHandler.SupportsNewRow(request)) rowHandler.NewRow(request, page, page.NewRow); } else if (rowHandler.SupportsPrepareRow(request)) foreach (object[] row in page.Rows) rowHandler.PrepareRow(request, page, row); rules.ProcessPageRequest(request, page); if (rules.CompleteConfiguration()) ResetViewPage(page); } page = page.ToResult(_config, _view); if (rules != null) rules.AfterSelect(request); else _serverRules.ExecuteServerRules(request, ActionPhase.After); _serverRules.Result.Merge(page); return page; }
DbDataReader IDataEngine.ExecuteReader(PageRequest request) { _viewPage = new ViewPage(request); if (_config == null) { _config = CreateConfiguration(request.Controller); SelectView(request.Controller, request.View); } _viewPage.ApplyDataFilter(_config.CreateDataFilter(), request.Controller, request.View, null, null, null); InitBusinessRules(request, _viewPage); DbConnection connection = CreateConnection(); DbCommand selectCommand = CreateCommand(connection); ConfigureCommand(selectCommand, _viewPage, CommandConfigurationType.Select, null); return selectCommand.ExecuteReader(CommandBehavior.CloseConnection); }
object[] IDataController.GetListOfValues(string controller, string view, DistinctValueRequest request) { SelectView(controller, view); ViewPage page = new ViewPage(request); page.ApplyDataFilter(_config.CreateDataFilter(), controller, view, request.LookupContextController, request.LookupContextView, request.LookupContextFieldName); List<object> distinctValues = new List<object>(); BusinessRules rules = _config.CreateBusinessRules(); _serverRules = rules; if (_serverRules == null) _serverRules = CreateBusinessRules(); _serverRules.Page = page; if (rules != null) rules.BeforeSelect(request); else _serverRules.ExecuteServerRules(request, ActionPhase.Before); if (_serverRules.EnableResultSet) { IDataReader reader = ExecuteResultSetReader(page); SortedDictionary<object, object> uniqueValues = new SortedDictionary<object, object>(); bool hasNull = false; while (reader.Read()) { object v = reader[request.FieldName]; if (DBNull.Value.Equals(v)) hasNull = true; else uniqueValues[v] = v; } if (hasNull) distinctValues.Add(null); foreach (object v in uniqueValues.Keys) if (distinctValues.Count < page.PageSize) distinctValues.Add(ConvertObjectToValue(v)); else break; } else using (DbConnection connection = CreateConnection()) { DbCommand command = CreateCommand(connection); ConfigureCommand(command, page, CommandConfigurationType.SelectDistinct, null); DbDataReader reader = command.ExecuteReader(); while (reader.Read() && (distinctValues.Count < page.PageSize)) { object v = reader.GetValue(0); if (!(DBNull.Value.Equals(v))) v = ConvertObjectToValue(v); distinctValues.Add(v); } reader.Close(); } if (rules != null) rules.AfterSelect(request); else _serverRules.ExecuteServerRules(request, ActionPhase.After); object[] result = distinctValues.ToArray(); EnsureJsonCompatibility(result); return result; }