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); }
public void TestGenerateReport(DbEngine dbEngine, string host, string database, bool useIntegratedSecurity, string userName, string password, string dbCreateScriptFile, string insertDataScriptFile, string executionConfigFile) { database = dbEngine == DbEngine.SqlServer ? database + "_" + DateTime.Now.Millisecond : database; IList <string> scripts = new List <string>() { dbCreateScriptFile, insertDataScriptFile }; object[] executionParameters = ExcelReportGeneratorHelper.CreateParameters(1, 2, 3); TestGenerateReportImplAndCheck(dbEngine, host, database, useIntegratedSecurity, userName, password, scripts, TestExcelTemplate, executionConfigFile, ReportFile, executionParameters); }