This commit is contained in:
2
.vscode/launch.json
vendored
2
.vscode/launch.json
vendored
@@ -52,7 +52,7 @@
|
||||
"AYANOVA_FOLDER_USER_FILES": "c:\\temp\\RavenTestData\\userfiles",
|
||||
"AYANOVA_FOLDER_BACKUP_FILES": "c:\\temp\\RavenTestData\\backupfiles",
|
||||
"AYANOVA_FOLDER_TEMPORARY_SERVER_FILES": "c:\\temp\\RavenTestData\\tempfiles",
|
||||
"AYANOVA_SERVER_TEST_MODE": "false",
|
||||
"AYANOVA_SERVER_TEST_MODE": "true",
|
||||
"AYANOVA_SERVER_TEST_MODE_SEEDLEVEL": "small",
|
||||
"AYANOVA_SERVER_TEST_MODE_TZ_OFFSET": "-7",
|
||||
"AYANOVA_BACKUP_PG_DUMP_PATH": "C:\\data\\code\\PostgreSQLPortable_12.0\\App\\PgSQL\\bin\\"
|
||||
|
||||
@@ -233,14 +233,9 @@ namespace AyaNova.Api.Controllers
|
||||
}
|
||||
catch (System.Exception ex)
|
||||
{
|
||||
//Don't send the full stack trace, just the initial error message from the javascript eval
|
||||
// "Evaluation failed: ReferenceError: reportdata is not defined\n at ayPrepareData (<anonymous>:5:17)\n at ayPreRender (C:\\data\\code\\raven\\server\\AyaNova\\resource\\rpt\\ay-report.js:13:12)\n at __puppeteer_evaluation_script__:10:25"
|
||||
var v = ex.Message;
|
||||
// int positionOfNewLine = v.IndexOf("\n at");
|
||||
// if (positionOfNewLine >= 0)
|
||||
// v = v.Substring(0, positionOfNewLine);
|
||||
|
||||
return BadRequest(new ApiErrorResponse(ApiErrorCode.INVALID_OPERATION, null, v));
|
||||
//The Javascript evaluation stack trace can be in the message making it long and internalized,
|
||||
//however the info is useful as it can indicate exactly which function failed etc so sending it all back is best
|
||||
return BadRequest(new ApiErrorResponse(ApiErrorCode.INVALID_OPERATION, null, ex.Message));
|
||||
}
|
||||
}
|
||||
|
||||
@@ -355,7 +350,7 @@ namespace AyaNova.Api.Controllers
|
||||
|
||||
//fileData in JSON stringify format
|
||||
FileData = Newtonsoft.Json.JsonConvert.DeserializeObject<List<UploadFileData>>(uploadFormData.FormFieldData["FileData"].ToString());
|
||||
|
||||
|
||||
//Instantiate the business object handler
|
||||
ReportBiz biz = ReportBiz.GetBiz(ct, HttpContext);
|
||||
|
||||
|
||||
@@ -382,13 +382,6 @@ namespace AyaNova.Biz
|
||||
//add Marked for markdown processing
|
||||
await page.AddScriptTagAsync(new AddTagOptions() { Path = Path.Combine(ReportJSFolderPath, "ay-md.js") });
|
||||
|
||||
//Wait, might not need luxon, it appears I only use that for relative date calculations
|
||||
//Luxon https://moment.github.io/luxon/
|
||||
// await page.AddScriptTagAsync(new AddTagOptions() { Path = Path.Combine(ReportJSFolderPath, "ay-lux.js") });
|
||||
|
||||
|
||||
//VueCurrencyInput - base currency handling lib whatever that is
|
||||
|
||||
//add stock helpers
|
||||
await page.AddScriptTagAsync(new AddTagOptions() { Path = Path.Combine(ReportJSFolderPath, "ay-report.js") });
|
||||
|
||||
@@ -470,104 +463,10 @@ namespace AyaNova.Biz
|
||||
// var v=await page.GetContentAsync();
|
||||
throw ex;
|
||||
}
|
||||
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
// public async Task<RenderedReport> RenderReport(RenderReportParameter reportParam, string apiUrl, AuthorizationRoles overrideRoles = AuthorizationRoles.NoRole)
|
||||
// {
|
||||
// var log = AyaNova.Util.ApplicationLogging.CreateLogger("ReportBiz::RenderReport");
|
||||
|
||||
// //get report, vet security, see what we need before init in case of issue
|
||||
// var report = await ct.Report.FirstOrDefaultAsync(z => z.Id == reportParam.ReportId);
|
||||
// if (report == null)
|
||||
// {
|
||||
// AddError(ApiErrorCode.NOT_FOUND, "id");
|
||||
// return null;
|
||||
// }
|
||||
|
||||
// AuthorizationRoles effectiveRoles = CurrentUserRoles;
|
||||
// if (overrideRoles != AuthorizationRoles.NoRole)
|
||||
// effectiveRoles = overrideRoles;
|
||||
|
||||
|
||||
// if (!AyaNova.Api.ControllerHelpers.Authorized.HasReadFullRole(effectiveRoles, report.ObjectType))
|
||||
// {
|
||||
// AddError(ApiErrorCode.NOT_AUTHORIZED, null, $"User not authorized for {report.ObjectType} type object");
|
||||
// return null;
|
||||
// }
|
||||
|
||||
|
||||
// //Get data
|
||||
// var ReportData = await GetReportData(new ObjectReportDataParameter() { ObjectType = report.ObjectType, SelectedRowIds = reportParam.SelectedRowIds, DataListKey = reportParam.DataListKey, ListView = reportParam.ListView });
|
||||
|
||||
// //initialization
|
||||
// log.LogDebug("Initializing report system");
|
||||
// var ReportJSFolderPath = Path.Combine(ServerBootConfig.AYANOVA_CONTENT_ROOT_PATH, "resource", "rpt");
|
||||
// var lo = new LaunchOptions { Headless = true };
|
||||
// bool isWindows = System.Runtime.InteropServices.RuntimeInformation.IsOSPlatform(System.Runtime.InteropServices.OSPlatform.Windows);
|
||||
// if (!isWindows)
|
||||
// {
|
||||
// log.LogDebug($"Not Windows: setting executable path for chrome to expected '/usr/bin/chromium-browser'");
|
||||
// lo.ExecutablePath = "/usr/bin/chromium-browser";//this is the default path for docker based alpine dist, but maybe not others, need to make a config setting likely
|
||||
// lo.Args = new string[] { "--no-sandbox" };
|
||||
// }
|
||||
// else
|
||||
// {
|
||||
// log.LogDebug($"Windows: Calling browserFetcher download async now:");
|
||||
// await new BrowserFetcher().DownloadAsync(BrowserFetcher.DefaultRevision);
|
||||
// }
|
||||
|
||||
|
||||
// log.LogDebug($"Launching headless Chrome now:");
|
||||
// using (var browser = await Puppeteer.LaunchAsync(lo))
|
||||
// using (var page = await browser.NewPageAsync())
|
||||
// {
|
||||
// log.LogDebug($"Preparing page: adding base reporting scripts to page");
|
||||
|
||||
// //Add Handlebars JS for compiling and presenting
|
||||
// await page.AddScriptTagAsync(new AddTagOptions() { Path = Path.Combine(ReportJSFolderPath, "ay-hb.js") });
|
||||
|
||||
// //add Marked for markdown processing
|
||||
// await page.AddScriptTagAsync(new AddTagOptions() { Path = Path.Combine(ReportJSFolderPath, "ay-md.js") });
|
||||
|
||||
// //add stock helpers
|
||||
// await page.AddScriptTagAsync(new AddTagOptions() { Path = Path.Combine(ReportJSFolderPath, "ay-report.js") });
|
||||
|
||||
// //execute to add to handlebars
|
||||
// await page.EvaluateExpressionAsync("ayRegisterHelpers();");
|
||||
|
||||
// log.LogDebug($"Preparing page: adding this report's scripts, style and templates to page");
|
||||
|
||||
// //TODO: CUSTOM HELPERS
|
||||
|
||||
// //compile and run handlebars template
|
||||
// var compileScript = $"let reportData=ayPreRender({ReportData});Handlebars.compile({report.Template})(reportData);";
|
||||
// var resultHTML = await page.EvaluateExpressionAsync<string>(compileScript);
|
||||
|
||||
// //render report as HTML
|
||||
// await page.SetContentAsync(resultHTML);
|
||||
|
||||
// //add style (after page or it won't work)
|
||||
// if (!string.IsNullOrWhiteSpace(report.Style))
|
||||
// {
|
||||
// await page.AddStyleTagAsync(new AddTagOptions { Content = report.Style });
|
||||
// }
|
||||
|
||||
// //If need the generated page content
|
||||
// //var pagecontent = await page.GetContentAsync();
|
||||
|
||||
// //render to pdf and return
|
||||
// var pdfBuffer = await page.PdfDataAsync();
|
||||
// log.LogDebug($"returning results now:");
|
||||
// return new RenderedReport() { MimeType = "application/pdf", RenderedOutput = pdfBuffer };
|
||||
|
||||
// }
|
||||
// }
|
||||
|
||||
|
||||
|
||||
////////////////////////////////////////////////////////////////////////////////////////////////
|
||||
//JOB / OPERATIONS
|
||||
//
|
||||
|
||||
Reference in New Issue
Block a user