public async Task <IActionResult> Generate([FromQuery] string dataSourceType, [FromQuery] string dataSourceConnStr, [FromQuery] string parametersFile, [FromQuery] string templateFile, [FromQuery] int worksheet, [FromQuery] int row, [FromQuery] int column, [FromBody] ParameterInfoModel[] parameters) { ReportsAutoDiscoveryConfigModel pathSearchConfig = GetAutoDiscoveryConfig(); KeyValuePair <DbEngine, string> dataSourceDbEngine = _availableDataSources.First(item => string.Equals(item.Value.Trim().ToLower(), dataSourceType.Trim().ToLower())); IReportGeneratorManager manager = new ExcelReportGeneratorManager(_loggerFactory, dataSourceDbEngine.Key, dataSourceConnStr); string reportFile = GetExcelFilePath("Report", Guid.NewGuid()); ExecutionConfig config = ExecutionConfigManager.Read(Path.Combine(pathSearchConfig.ParametersFilesDirectory, parametersFile)); if (parameters != null && parameters.Length > 0) { if (config.DataSource == ReportDataSource.StoredProcedure) { foreach (ParameterInfoModel parameter in parameters) { StoredProcedureParameter existingStoreProcParam = config.StoredProcedureParameters.FirstOrDefault(p => string.Equals(p.ParameterName.ToLower(), parameter.Key.ToLower())); if (existingStoreProcParam != null) { existingStoreProcParam.ParameterValue = parameter.Value; } } } else { foreach (ParameterInfoModel parameter in parameters) { DbQueryParameter sqlStatementPrameter = null; if (parameter.Type == ParameterType.Where) { sqlStatementPrameter = config.ViewParameters.WhereParameters.FirstOrDefault(p => string.Equals(p.ParameterName.ToLower(), parameter.Key.ToLower())); } if (parameter.Type == ParameterType.Order) { sqlStatementPrameter = config.ViewParameters.OrderByParameters.FirstOrDefault(p => string.Equals(p.ParameterName.ToLower(), parameter.Key.ToLower())); } if (parameter.Type == ParameterType.Group) { sqlStatementPrameter = config.ViewParameters.GroupByParameters.FirstOrDefault(p => string.Equals(p.ParameterName.ToLower(), parameter.Key.ToLower())); } if (sqlStatementPrameter != null) { sqlStatementPrameter.ParameterValue = parameter.Value.ToString(); } } } } bool result = await manager.GenerateAsync(Path.Combine(pathSearchConfig.TemplatesFilesDirectory, templateFile), config, reportFile, ExcelReportGeneratorHelper.CreateParameters(worksheet, row, column)); if (result) { byte[] bytes = System.IO.File.ReadAllBytes(reportFile); return(File(bytes, _expectedMimeTypes[MsExcelExtension], "Report.xlsx")); } return(null); }
private void TestGenerateReportImplAndCheck(DbEngine dbEngine, string host, string database, bool integratedSecurity, string userName, string password, IList <string> scripts, string excelTemplateFile, string executionConfigFile, string outputReportFile, object[] executionParameters) { _dbManager = new CommonDbManager(dbEngine, _loggerFactory.CreateLogger <CommonDbManager>()); _connectionString = _dbManager.Create(dbEngine, host, database, integratedSecurity, userName, password, scripts); ILoggerFactory loggerFactory = new LoggerFactory(); IReportGeneratorManager manager = new ExcelReportGeneratorManager(loggerFactory, dbEngine, _connectionString); Task <int> result = manager.GenerateAsync(excelTemplateFile, executionConfigFile, outputReportFile, executionParameters); result.Wait(); Assert.True(result.Result > 0); _dbManager.DropDatabase(_connectionString); }