This commit is contained in:
2021-12-23 17:48:01 +00:00
parent 8753c41f6b
commit 04abe2adcb
34 changed files with 115 additions and 81 deletions

View File

@@ -175,13 +175,21 @@ namespace AyaNova.Api.Controllers
//cap the data returned //cap the data returned
selectedRequest.ReportDesignerSample = true; selectedRequest.ReportDesignerSample = true;
JArray reportData;
var reportData = await biz.GetReportData(selectedRequest); try
{
reportData = await biz.GetReportData(selectedRequest, DateTime.UtcNow.AddMinutes(ServerBootConfig.AYANOVA_REPORT_RENDERING_TIMEOUT));
if (reportData == null) if (reportData == null)
return BadRequest(new ApiErrorResponse(biz.Errors)); return BadRequest(new ApiErrorResponse(biz.Errors));
else else
return Ok(ApiOkResponse.Response(reportData)); return Ok(ApiOkResponse.Response(reportData));
} }
catch (ReportRenderTimeOutException)
{
log.LogInformation($"GetReportData timeout data list key: {selectedRequest.DataListKey}, record count:{selectedRequest.SelectedRowIds.LongLength}, user:{UserNameFromContext.Name(HttpContext.Items)} ");
return Ok(ApiOkResponse.Response(new { timeout = true, timeoutconfig = ServerBootConfig.AYANOVA_REPORT_RENDERING_TIMEOUT }));
}
}
/// <summary> /// <summary>
@@ -209,14 +217,17 @@ namespace AyaNova.Api.Controllers
var API_URL = $"http://127.0.0.1:{httpConnectionFeature.LocalPort}/api/v8/"; var API_URL = $"http://127.0.0.1:{httpConnectionFeature.LocalPort}/api/v8/";
try try
{ {
var result = await biz.RenderReport(reportRequest, DateTime.UtcNow.AddMinutes(ServerBootConfig.AYANOVA_REPORT_RENDERING_TIMEOUT), API_URL);
var result = await biz.RenderReport(reportRequest,DateTime.UtcNow.AddMinutes(ServerBootConfig.AYANOVA_REPORT_RENDERING_TIMEOUT), API_URL);
if (string.IsNullOrWhiteSpace(result)) if (string.IsNullOrWhiteSpace(result))
return BadRequest(new ApiErrorResponse(biz.Errors)); return BadRequest(new ApiErrorResponse(biz.Errors));
else else
return Ok(ApiOkResponse.Response(result)); return Ok(ApiOkResponse.Response(result));
} }
catch (ReportRenderTimeOutException)
{
log.LogInformation($"Report render timeout report id: {reportRequest.ReportId}, record count:{reportRequest.SelectedRowIds.LongLength}, user:{UserNameFromContext.Name(HttpContext.Items)} ");
return Ok(ApiOkResponse.Response(new { timeout = true, timeoutconfig = ServerBootConfig.AYANOVA_REPORT_RENDERING_TIMEOUT }));
}
catch (System.Exception ex) catch (System.Exception ex)
{ {
//The Javascript evaluation stack trace can be in the message making it long and internalized, //The Javascript evaluation stack trace can be in the message making it long and internalized,

View File

@@ -480,7 +480,7 @@ MULTIPLE discount / markup ITEMS
//////////////////////////////////////////////////////////////////////////////////////////////// ////////////////////////////////////////////////////////////////////////////////////////////////
//REPORTING //REPORTING
// //
public async Task<JArray> GetReportData(DataListSelectedRequest dataListSelectedRequest) public async Task<JArray> GetReportData(DataListSelectedRequest dataListSelectedRequest, DateTime renderTimeOutExpiry)
{ {
var idList = dataListSelectedRequest.SelectedRowIds; var idList = dataListSelectedRequest.SelectedRowIds;
JArray ReportData = new JArray(); JArray ReportData = new JArray();
@@ -557,7 +557,7 @@ MULTIPLE discount / markup ITEMS
// IMPORT EXPORT // IMPORT EXPORT
// //
public async Task<JArray> GetExportData(DataListSelectedRequest dataListSelectedRequest) public async Task<JArray> GetExportData(DataListSelectedRequest dataListSelectedRequest, DateTime renderTimeOutExpiry)
{ {
//for now just re-use the report data code //for now just re-use the report data code
//this may turn out to be the pattern for most biz object types but keeping it seperate allows for custom usage from time to time //this may turn out to be the pattern for most biz object types but keeping it seperate allows for custom usage from time to time

View File

@@ -329,7 +329,7 @@ namespace AyaNova.Biz
//////////////////////////////////////////////////////////////////////////////////////////////// ////////////////////////////////////////////////////////////////////////////////////////////////
//REPORTING //REPORTING
// //
public async Task<JArray> GetReportData(DataListSelectedRequest dataListSelectedRequest) public async Task<JArray> GetReportData(DataListSelectedRequest dataListSelectedRequest, DateTime renderTimeOutExpiry)
{ {
var idList = dataListSelectedRequest.SelectedRowIds; var idList = dataListSelectedRequest.SelectedRowIds;
JArray ReportData = new JArray(); JArray ReportData = new JArray();
@@ -400,7 +400,7 @@ namespace AyaNova.Biz
// IMPORT EXPORT // IMPORT EXPORT
// //
public async Task<JArray> GetExportData(DataListSelectedRequest dataListSelectedRequest) public async Task<JArray> GetExportData(DataListSelectedRequest dataListSelectedRequest, DateTime renderTimeOutExpiry)
{ {
//for now just re-use the report data code //for now just re-use the report data code
//this may turn out to be the pattern for most biz object types but keeping it seperate allows for custom usage from time to time //this may turn out to be the pattern for most biz object types but keeping it seperate allows for custom usage from time to time

View File

@@ -180,7 +180,7 @@ namespace AyaNova.Biz
//////////////////////////////////////////////////////////////////////////////////////////////// ////////////////////////////////////////////////////////////////////////////////////////////////
//REPORTING //REPORTING
// //
public async Task<JArray> GetReportData(DataListSelectedRequest dataListSelectedRequest) public async Task<JArray> GetReportData(DataListSelectedRequest dataListSelectedRequest, DateTime renderTimeOutExpiry)
{ {
var idList = dataListSelectedRequest.SelectedRowIds; var idList = dataListSelectedRequest.SelectedRowIds;
JArray ReportData = new JArray(); JArray ReportData = new JArray();
@@ -213,7 +213,7 @@ namespace AyaNova.Biz
//////////////////////////////////////////////////////////////////////////////////////////////// ////////////////////////////////////////////////////////////////////////////////////////////////
// IMPORT EXPORT // IMPORT EXPORT
// //
public async Task<JArray> GetExportData(DataListSelectedRequest dataListSelectedRequest) public async Task<JArray> GetExportData(DataListSelectedRequest dataListSelectedRequest, DateTime renderTimeOutExpiry)
{ {
//for now just re-use the report data code //for now just re-use the report data code
//this may turn out to be the pattern for most biz object types but keeping it seperate allows for custom usage from time to time //this may turn out to be the pattern for most biz object types but keeping it seperate allows for custom usage from time to time

View File

@@ -290,7 +290,7 @@ namespace AyaNova.Biz
//////////////////////////////////////////////////////////////////////////////////////////////// ////////////////////////////////////////////////////////////////////////////////////////////////
//REPORTING //REPORTING
// //
public async Task<JArray> GetReportData(DataListSelectedRequest dataListSelectedRequest) public async Task<JArray> GetReportData(DataListSelectedRequest dataListSelectedRequest, DateTime renderTimeOutExpiry)
{ {
var idList = dataListSelectedRequest.SelectedRowIds; var idList = dataListSelectedRequest.SelectedRowIds;
JArray ReportData = new JArray(); JArray ReportData = new JArray();
@@ -344,7 +344,7 @@ namespace AyaNova.Biz
// IMPORT EXPORT // IMPORT EXPORT
// //
public async Task<JArray> GetExportData(DataListSelectedRequest dataListSelectedRequest) public async Task<JArray> GetExportData(DataListSelectedRequest dataListSelectedRequest, DateTime renderTimeOutExpiry)
{ {
//for now just re-use the report data code //for now just re-use the report data code
//this may turn out to be the pattern for most biz object types but keeping it seperate allows for custom usage from time to time //this may turn out to be the pattern for most biz object types but keeping it seperate allows for custom usage from time to time

View File

@@ -286,7 +286,7 @@ namespace AyaNova.Biz
//////////////////////////////////////////////////////////////////////////////////////////////// ////////////////////////////////////////////////////////////////////////////////////////////////
//REPORTING //REPORTING
// //
public async Task<JArray> GetReportData(DataListSelectedRequest dataListSelectedRequest) public async Task<JArray> GetReportData(DataListSelectedRequest dataListSelectedRequest, DateTime renderTimeOutExpiry)
{ {
var idList = dataListSelectedRequest.SelectedRowIds; var idList = dataListSelectedRequest.SelectedRowIds;
JArray ReportData = new JArray(); JArray ReportData = new JArray();
@@ -321,7 +321,7 @@ namespace AyaNova.Biz
//////////////////////////////////////////////////////////////////////////////////////////////// ////////////////////////////////////////////////////////////////////////////////////////////////
// IMPORT EXPORT // IMPORT EXPORT
// //
public async Task<JArray> GetExportData(DataListSelectedRequest dataListSelectedRequest) public async Task<JArray> GetExportData(DataListSelectedRequest dataListSelectedRequest, DateTime renderTimeOutExpiry)
{ {
//for now just re-use the report data code //for now just re-use the report data code
//this may turn out to be the pattern for most biz object types but keeping it seperate allows for custom usage from time to time //this may turn out to be the pattern for most biz object types but keeping it seperate allows for custom usage from time to time

View File

@@ -1,6 +1,8 @@
using System.Threading.Tasks; using System.Threading.Tasks;
using Newtonsoft.Json.Linq; using Newtonsoft.Json.Linq;
using AyaNova.Models; using AyaNova.Models;
using System;
namespace AyaNova.Biz namespace AyaNova.Biz
{ {
/// <summary> /// <summary>
@@ -11,7 +13,7 @@ namespace AyaNova.Biz
//Get items indicated in id list in exportable format //Get items indicated in id list in exportable format
//called by ExportBiz rendering code //called by ExportBiz rendering code
Task<JArray> GetExportData(DataListSelectedRequest dataListSelectedRequest); Task<JArray> GetExportData(DataListSelectedRequest dataListSelectedRequest, DateTime renderTimeOutExpiry);
const int EXPORT_DATA_BATCH_SIZE = 100; const int EXPORT_DATA_BATCH_SIZE = 100;
} }

View File

@@ -273,7 +273,7 @@ namespace AyaNova.Biz
//////////////////////////////////////////////////////////////////////////////////////////////// ////////////////////////////////////////////////////////////////////////////////////////////////
//REPORTING //REPORTING
// //
public async Task<JArray> GetReportData(DataListSelectedRequest dataListSelectedRequest) public async Task<JArray> GetReportData(DataListSelectedRequest dataListSelectedRequest, DateTime renderTimeOutExpiry)
{ {
var idList = dataListSelectedRequest.SelectedRowIds; var idList = dataListSelectedRequest.SelectedRowIds;
JArray ReportData = new JArray(); JArray ReportData = new JArray();
@@ -308,7 +308,7 @@ namespace AyaNova.Biz
//////////////////////////////////////////////////////////////////////////////////////////////// ////////////////////////////////////////////////////////////////////////////////////////////////
// IMPORT EXPORT // IMPORT EXPORT
// //
public async Task<JArray> GetExportData(DataListSelectedRequest dataListSelectedRequest) public async Task<JArray> GetExportData(DataListSelectedRequest dataListSelectedRequest, DateTime renderTimeOutExpiry)
{ {
//for now just re-use the report data code //for now just re-use the report data code
//this may turn out to be the pattern for most biz object types but keeping it seperate allows for custom usage from time to time //this may turn out to be the pattern for most biz object types but keeping it seperate allows for custom usage from time to time

View File

@@ -278,7 +278,7 @@ namespace AyaNova.Biz
//////////////////////////////////////////////////////////////////////////////////////////////// ////////////////////////////////////////////////////////////////////////////////////////////////
//REPORTING //REPORTING
// //
public async Task<JArray> GetReportData(DataListSelectedRequest dataListSelectedRequest) public async Task<JArray> GetReportData(DataListSelectedRequest dataListSelectedRequest, DateTime renderTimeOutExpiry)
{ {
var idList = dataListSelectedRequest.SelectedRowIds; var idList = dataListSelectedRequest.SelectedRowIds;
JArray ReportData = new JArray(); JArray ReportData = new JArray();
@@ -316,7 +316,7 @@ namespace AyaNova.Biz
// IMPORT EXPORT // IMPORT EXPORT
// //
public async Task<JArray> GetExportData(DataListSelectedRequest dataListSelectedRequest) public async Task<JArray> GetExportData(DataListSelectedRequest dataListSelectedRequest, DateTime renderTimeOutExpiry)
{ {
//for now just re-use the report data code //for now just re-use the report data code
//this may turn out to be the pattern for most biz object types but keeping it seperate allows for custom usage from time to time //this may turn out to be the pattern for most biz object types but keeping it seperate allows for custom usage from time to time

View File

@@ -812,7 +812,7 @@ namespace AyaNova.Biz
//////////////////////////////////////////////////////////////////////////////////////////////// ////////////////////////////////////////////////////////////////////////////////////////////////
//REPORTING //REPORTING
// //
public async Task<JArray> GetReportData(DataListSelectedRequest dataListSelectedRequest) public async Task<JArray> GetReportData(DataListSelectedRequest dataListSelectedRequest, DateTime renderTimeOutExpiry)
{ {
//quote reports for entire quote or just sub parts all go through here //quote reports for entire quote or just sub parts all go through here
//if the ayatype is a descendant of the quote then only the portion of the quote from that descendant directly up to the header will be populated and returned //if the ayatype is a descendant of the quote then only the portion of the quote from that descendant directly up to the header will be populated and returned
@@ -920,7 +920,7 @@ namespace AyaNova.Biz
// IMPORT EXPORT // IMPORT EXPORT
// //
public async Task<JArray> GetExportData(DataListSelectedRequest dataListSelectedRequest) public async Task<JArray> GetExportData(DataListSelectedRequest dataListSelectedRequest, DateTime renderTimeOutExpiry)
{ {
//for now just re-use the report data code //for now just re-use the report data code
//this may turn out to be the pattern for most biz object types but keeping it seperate allows for custom usage from time to time //this may turn out to be the pattern for most biz object types but keeping it seperate allows for custom usage from time to time

View File

@@ -326,7 +326,7 @@ namespace AyaNova.Biz
//////////////////////////////////////////////////////////////////////////////////////////////// ////////////////////////////////////////////////////////////////////////////////////////////////
//REPORTING //REPORTING
// //
public async Task<JArray> GetReportData(DataListSelectedRequest dataListSelectedRequest) public async Task<JArray> GetReportData(DataListSelectedRequest dataListSelectedRequest, DateTime renderTimeOutExpiry)
{ {
var idList = dataListSelectedRequest.SelectedRowIds; var idList = dataListSelectedRequest.SelectedRowIds;
JArray ReportData = new JArray(); JArray ReportData = new JArray();
@@ -362,7 +362,7 @@ namespace AyaNova.Biz
// IMPORT EXPORT // IMPORT EXPORT
// //
public async Task<JArray> GetExportData(DataListSelectedRequest dataListSelectedRequest) public async Task<JArray> GetExportData(DataListSelectedRequest dataListSelectedRequest, DateTime renderTimeOutExpiry)
{ {
//for now just re-use the report data code //for now just re-use the report data code
//this may turn out to be the pattern for most biz object types but keeping it seperate allows for custom usage from time to time //this may turn out to be the pattern for most biz object types but keeping it seperate allows for custom usage from time to time

View File

@@ -500,7 +500,7 @@ namespace AyaNova.Biz
//////////////////////////////////////////////////////////////////////////////////////////////// ////////////////////////////////////////////////////////////////////////////////////////////////
//REPORTING //REPORTING
// //
public async Task<JArray> GetReportData(DataListSelectedRequest dataListSelectedRequest) public async Task<JArray> GetReportData(DataListSelectedRequest dataListSelectedRequest, DateTime renderTimeOutExpiry)
{ {
var idList = dataListSelectedRequest.SelectedRowIds; var idList = dataListSelectedRequest.SelectedRowIds;
JArray ReportData = new JArray(); JArray ReportData = new JArray();
@@ -543,7 +543,7 @@ namespace AyaNova.Biz
//////////////////////////////////////////////////////////////////////////////////////////////// ////////////////////////////////////////////////////////////////////////////////////////////////
// IMPORT EXPORT // IMPORT EXPORT
// //
public async Task<JArray> GetExportData(DataListSelectedRequest dataListSelectedRequest) public async Task<JArray> GetExportData(DataListSelectedRequest dataListSelectedRequest, DateTime renderTimeOutExpiry)
{ {
//for now just re-use the report data code //for now just re-use the report data code
//this may turn out to be the pattern for most biz object types but keeping it seperate allows for custom usage from time to time //this may turn out to be the pattern for most biz object types but keeping it seperate allows for custom usage from time to time

View File

@@ -255,7 +255,7 @@ namespace AyaNova.Biz
//////////////////////////////////////////////////////////////////////////////////////////////// ////////////////////////////////////////////////////////////////////////////////////////////////
//REPORTING //REPORTING
// //
public async Task<JArray> GetReportData(DataListSelectedRequest dataListSelectedRequest) public async Task<JArray> GetReportData(DataListSelectedRequest dataListSelectedRequest, DateTime renderTimeOutExpiry)
{ {
var idList = dataListSelectedRequest.SelectedRowIds; var idList = dataListSelectedRequest.SelectedRowIds;
JArray ReportData = new JArray(); JArray ReportData = new JArray();
@@ -309,7 +309,7 @@ namespace AyaNova.Biz
//////////////////////////////////////////////////////////////////////////////////////////////// ////////////////////////////////////////////////////////////////////////////////////////////////
// IMPORT EXPORT // IMPORT EXPORT
// //
public async Task<JArray> GetExportData(DataListSelectedRequest dataListSelectedRequest) public async Task<JArray> GetExportData(DataListSelectedRequest dataListSelectedRequest, DateTime renderTimeOutExpiry)
{ {
//for now just re-use the report data code //for now just re-use the report data code
//this may turn out to be the pattern for most biz object types but keeping it seperate allows for custom usage from time to time //this may turn out to be the pattern for most biz object types but keeping it seperate allows for custom usage from time to time

View File

@@ -35,7 +35,7 @@ namespace AyaNova.Biz
//////////////////////////////////////////////////////////////////////////////////////////////// ////////////////////////////////////////////////////////////////////////////////////////////////
//REPORTING //REPORTING
// //
public async Task<JArray> GetReportData(DataListSelectedRequest dataListSelectedRequest) public async Task<JArray> GetReportData(DataListSelectedRequest dataListSelectedRequest, DateTime renderTimeOutExpiry)
{ {
var idList = dataListSelectedRequest.SelectedRowIds; var idList = dataListSelectedRequest.SelectedRowIds;
JArray ReportData = new JArray(); JArray ReportData = new JArray();
@@ -73,7 +73,7 @@ namespace AyaNova.Biz
//////////////////////////////////////////////////////////////////////////////////////////////// ////////////////////////////////////////////////////////////////////////////////////////////////
// IMPORT EXPORT // IMPORT EXPORT
// //
public async Task<JArray> GetExportData(DataListSelectedRequest dataListSelectedRequest) public async Task<JArray> GetExportData(DataListSelectedRequest dataListSelectedRequest, DateTime renderTimeOutExpiry)
{ {
//for now just re-use the report data code //for now just re-use the report data code
//this may turn out to be the pattern for most biz object types but keeping it seperate allows for custom usage from time to time //this may turn out to be the pattern for most biz object types but keeping it seperate allows for custom usage from time to time

View File

@@ -35,7 +35,7 @@ namespace AyaNova.Biz
//////////////////////////////////////////////////////////////////////////////////////////////// ////////////////////////////////////////////////////////////////////////////////////////////////
//REPORTING //REPORTING
// //
public async Task<JArray> GetReportData(DataListSelectedRequest dataListSelectedRequest) public async Task<JArray> GetReportData(DataListSelectedRequest dataListSelectedRequest, DateTime renderTimeOutExpiry)
{ {
var idList = dataListSelectedRequest.SelectedRowIds; var idList = dataListSelectedRequest.SelectedRowIds;
JArray ReportData = new JArray(); JArray ReportData = new JArray();
@@ -73,7 +73,7 @@ namespace AyaNova.Biz
//////////////////////////////////////////////////////////////////////////////////////////////// ////////////////////////////////////////////////////////////////////////////////////////////////
// IMPORT EXPORT // IMPORT EXPORT
// //
public async Task<JArray> GetExportData(DataListSelectedRequest dataListSelectedRequest) public async Task<JArray> GetExportData(DataListSelectedRequest dataListSelectedRequest, DateTime renderTimeOutExpiry)
{ {
//for now just re-use the report data code //for now just re-use the report data code
//this may turn out to be the pattern for most biz object types but keeping it seperate allows for custom usage from time to time //this may turn out to be the pattern for most biz object types but keeping it seperate allows for custom usage from time to time

View File

@@ -285,7 +285,7 @@ namespace AyaNova.Biz
//////////////////////////////////////////////////////////////////////////////////////////////// ////////////////////////////////////////////////////////////////////////////////////////////////
//REPORTING //REPORTING
// //
public async Task<JArray> GetReportData(DataListSelectedRequest dataListSelectedRequest) public async Task<JArray> GetReportData(DataListSelectedRequest dataListSelectedRequest, DateTime renderTimeOutExpiry)
{ {
var idList = dataListSelectedRequest.SelectedRowIds; var idList = dataListSelectedRequest.SelectedRowIds;
JArray ReportData = new JArray(); JArray ReportData = new JArray();
@@ -314,7 +314,7 @@ namespace AyaNova.Biz
// //
public async Task<JArray> GetExportData(DataListSelectedRequest dataListSelectedRequest) public async Task<JArray> GetExportData(DataListSelectedRequest dataListSelectedRequest, DateTime renderTimeOutExpiry)
{ {
//for now just re-use the report data code //for now just re-use the report data code
//this may turn out to be the pattern for most biz object types but keeping it seperate allows for custom usage from time to time //this may turn out to be the pattern for most biz object types but keeping it seperate allows for custom usage from time to time

View File

@@ -274,7 +274,7 @@ namespace AyaNova.Biz
//////////////////////////////////////////////////////////////////////////////////////////////// ////////////////////////////////////////////////////////////////////////////////////////////////
//REPORTING //REPORTING
// //
public async Task<JArray> GetReportData(DataListSelectedRequest dataListSelectedRequest) public async Task<JArray> GetReportData(DataListSelectedRequest dataListSelectedRequest, DateTime renderTimeOutExpiry)
{ {
var idList = dataListSelectedRequest.SelectedRowIds; var idList = dataListSelectedRequest.SelectedRowIds;
JArray ReportData = new JArray(); JArray ReportData = new JArray();
@@ -311,7 +311,7 @@ namespace AyaNova.Biz
// IMPORT EXPORT // IMPORT EXPORT
// //
public async Task<JArray> GetExportData(DataListSelectedRequest dataListSelectedRequest) public async Task<JArray> GetExportData(DataListSelectedRequest dataListSelectedRequest, DateTime renderTimeOutExpiry)
{ {
//for now just re-use the report data code //for now just re-use the report data code
//this may turn out to be the pattern for most biz object types but keeping it seperate allows for custom usage from time to time //this may turn out to be the pattern for most biz object types but keeping it seperate allows for custom usage from time to time

View File

@@ -778,7 +778,7 @@ namespace AyaNova.Biz
//////////////////////////////////////////////////////////////////////////////////////////////// ////////////////////////////////////////////////////////////////////////////////////////////////
//REPORTING //REPORTING
// //
public async Task<JArray> GetReportData(DataListSelectedRequest dataListSelectedRequest) public async Task<JArray> GetReportData(DataListSelectedRequest dataListSelectedRequest, DateTime renderTimeOutExpiry)
{ {
var idList = dataListSelectedRequest.SelectedRowIds; var idList = dataListSelectedRequest.SelectedRowIds;
JArray ReportData = new JArray(); JArray ReportData = new JArray();
@@ -807,7 +807,7 @@ namespace AyaNova.Biz
//////////////////////////////////////////////////////////////////////////////////////////////// ////////////////////////////////////////////////////////////////////////////////////////////////
// IMPORT EXPORT // IMPORT EXPORT
// //
public async Task<JArray> GetExportData(DataListSelectedRequest dataListSelectedRequest) public async Task<JArray> GetExportData(DataListSelectedRequest dataListSelectedRequest, DateTime renderTimeOutExpiry)
{ {
//for now just re-use the report data code //for now just re-use the report data code
//this may turn out to be the pattern for most biz object types but keeping it seperate allows for custom usage from time to time //this may turn out to be the pattern for most biz object types but keeping it seperate allows for custom usage from time to time

View File

@@ -787,7 +787,7 @@ namespace AyaNova.Biz
//////////////////////////////////////////////////////////////////////////////////////////////// ////////////////////////////////////////////////////////////////////////////////////////////////
//REPORTING //REPORTING
// //
public async Task<JArray> GetReportData(DataListSelectedRequest dataListSelectedRequest) public async Task<JArray> GetReportData(DataListSelectedRequest dataListSelectedRequest, DateTime renderTimeOutExpiry)
{ {
//quote reports for entire quote or just sub parts all go through here //quote reports for entire quote or just sub parts all go through here
//if the ayatype is a descendant of the quote then only the portion of the quote from that descendant directly up to the header will be populated and returned //if the ayatype is a descendant of the quote then only the portion of the quote from that descendant directly up to the header will be populated and returned
@@ -901,7 +901,7 @@ namespace AyaNova.Biz
// IMPORT EXPORT // IMPORT EXPORT
// //
public async Task<JArray> GetExportData(DataListSelectedRequest dataListSelectedRequest) public async Task<JArray> GetExportData(DataListSelectedRequest dataListSelectedRequest, DateTime renderTimeOutExpiry)
{ {
//for now just re-use the report data code //for now just re-use the report data code
//this may turn out to be the pattern for most biz object types but keeping it seperate allows for custom usage from time to time //this may turn out to be the pattern for most biz object types but keeping it seperate allows for custom usage from time to time

View File

@@ -277,7 +277,7 @@ namespace AyaNova.Biz
//////////////////////////////////////////////////////////////////////////////////////////////// ////////////////////////////////////////////////////////////////////////////////////////////////
//REPORTING //REPORTING
// //
public async Task<JArray> GetReportData(DataListSelectedRequest dataListSelectedRequest) public async Task<JArray> GetReportData(DataListSelectedRequest dataListSelectedRequest, DateTime renderTimeOutExpiry)
{ {
var idList = dataListSelectedRequest.SelectedRowIds; var idList = dataListSelectedRequest.SelectedRowIds;
JArray ReportData = new JArray(); JArray ReportData = new JArray();
@@ -311,7 +311,7 @@ namespace AyaNova.Biz
// IMPORT EXPORT // IMPORT EXPORT
// //
public async Task<JArray> GetExportData(DataListSelectedRequest dataListSelectedRequest) public async Task<JArray> GetExportData(DataListSelectedRequest dataListSelectedRequest, DateTime renderTimeOutExpiry)
{ {
//for now just re-use the report data code //for now just re-use the report data code
//this may turn out to be the pattern for most biz object types but keeping it seperate allows for custom usage from time to time //this may turn out to be the pattern for most biz object types but keeping it seperate allows for custom usage from time to time

View File

@@ -367,6 +367,8 @@ namespace AyaNova.Biz
if (selectedRequest.SelectedRowIds.Length == 0) if (selectedRequest.SelectedRowIds.Length == 0)
selectedRequest.SelectedRowIds = await DataListSelectedProcessingOptions.RehydrateIdList(selectedRequest, ct, effectiveRoles, log, UserId, UserTranslationId); selectedRequest.SelectedRowIds = await DataListSelectedProcessingOptions.RehydrateIdList(selectedRequest, ct, effectiveRoles, log, UserId, UserTranslationId);
if (DateTime.UtcNow > renderTimeOutExpiry)
throw new ReportRenderTimeOutException();
log.LogDebug($"Instantiating biz object handler for {selectedRequest.AType}"); log.LogDebug($"Instantiating biz object handler for {selectedRequest.AType}");
var biz = BizObjectFactory.GetBizObject(selectedRequest.AType, ct, UserId, CurrentUserRoles, UserTranslationId); var biz = BizObjectFactory.GetBizObject(selectedRequest.AType, ct, UserId, CurrentUserRoles, UserTranslationId);
@@ -514,6 +516,9 @@ namespace AyaNova.Biz
} }
System.Text.StringBuilder PageLog = new System.Text.StringBuilder(); System.Text.StringBuilder PageLog = new System.Text.StringBuilder();
if (DateTime.UtcNow > renderTimeOutExpiry)
throw new ReportRenderTimeOutException();
//API DOCS http://www.puppeteersharp.com/api/index.html //API DOCS http://www.puppeteersharp.com/api/index.html
log.LogDebug($"Launching headless Browser now:"); log.LogDebug($"Launching headless Browser now:");
// #if (DEBUG) // #if (DEBUG)
@@ -523,7 +528,7 @@ namespace AyaNova.Biz
using (var page = await browser.NewPageAsync()) using (var page = await browser.NewPageAsync())
{ {
//track this process so it can be cancelled if it times out //track this process so it can be cancelled if it times out
ReportRenderManager.AddProcess(browser.Process.Id, log); ReportRenderManager.AddProcess(browser.Process.Id, renderTimeOutExpiry, log);
page.DefaultTimeout = 0;//infinite timeout as we are controlling how long the process can live for with the reportprocessmanager page.DefaultTimeout = 0;//infinite timeout as we are controlling how long the process can live for with the reportprocessmanager
try try
{ {
@@ -553,7 +558,8 @@ namespace AyaNova.Biz
}; };
log.LogDebug($"Preparing page: adding base reporting scripts to page"); log.LogDebug($"Preparing page: adding base reporting scripts to page");
if (DateTime.UtcNow > renderTimeOutExpiry)
throw new ReportRenderTimeOutException();
//Add Handlebars JS for compiling and presenting //Add Handlebars JS for compiling and presenting
//https://handlebarsjs.com/ //https://handlebarsjs.com/
@@ -577,7 +583,8 @@ namespace AyaNova.Biz
//execute to add to handlebars //execute to add to handlebars
await page.EvaluateExpressionAsync("ayRegisterHelpers();"); await page.EvaluateExpressionAsync("ayRegisterHelpers();");
if (DateTime.UtcNow > renderTimeOutExpiry)
throw new ReportRenderTimeOutException();
log.LogDebug($"Preparing page: adding this report's scripts, style and templates to page"); log.LogDebug($"Preparing page: adding this report's scripts, style and templates to page");
//add report pre-render, helpers and style //add report pre-render, helpers and style
@@ -632,7 +639,8 @@ namespace AyaNova.Biz
//duplicate meta data in report page wide variable for use by our internal functions //duplicate meta data in report page wide variable for use by our internal functions
await page.AddScriptTagAsync(new AddTagOptions() { Content = $"var AYMETA={{ ayReportMetaData:{reportMeta}, ayClientMetaData:{clientMeta}, ayServerMetaData:{serverMeta} }}" }); await page.AddScriptTagAsync(new AddTagOptions() { Content = $"var AYMETA={{ ayReportMetaData:{reportMeta}, ayClientMetaData:{clientMeta}, ayServerMetaData:{serverMeta} }}" });
if (DateTime.UtcNow > renderTimeOutExpiry)
throw new ReportRenderTimeOutException();
// #if (DEBUG) // #if (DEBUG)
// //view page contents // //view page contents
@@ -647,15 +655,19 @@ namespace AyaNova.Biz
// #endif // #endif
//PRE_RENDER (WITH TIMEOUT???) //PRE_RENDER (WITH TIMEOUT???)
await page.WaitForExpressionAsync($"ayPreRender({ReportDataObject})"); await page.WaitForExpressionAsync($"ayPreRender({ReportDataObject})");
if (DateTime.UtcNow > renderTimeOutExpiry)
throw new ReportRenderTimeOutException();
//compile the template //compile the template
log.LogDebug($"Calling Handlebars.compile..."); log.LogDebug($"Calling Handlebars.compile...");
// #if (DEBUG) // #if (DEBUG)
// log.LogInformation($"DBG: ReportBiz::RenderReport - compiling handlebars template"); // log.LogInformation($"DBG: ReportBiz::RenderReport - compiling handlebars template");
// #endif // #endif
var compileScript = $"Handlebars.compile(`{report.Template}`)(PreParedReportDataObject);"; var compileScript = $"Handlebars.compile(`{report.Template}`)(PreParedReportDataObject);";
if (DateTime.UtcNow > renderTimeOutExpiry)
throw new ReportRenderTimeOutException();
var compiledHTML = await page.EvaluateExpressionAsync<string>(compileScript); var compiledHTML = await page.EvaluateExpressionAsync<string>(compileScript);
if (DateTime.UtcNow > renderTimeOutExpiry)
throw new ReportRenderTimeOutException();
//render report as HTML //render report as HTML
log.LogDebug($"Setting page content to compiled HTML"); log.LogDebug($"Setting page content to compiled HTML");
// #if (DEBUG) // #if (DEBUG)
@@ -753,7 +765,8 @@ namespace AyaNova.Biz
PdfOptions.PrintBackground = report.PrintBackground; PdfOptions.PrintBackground = report.PrintBackground;
//Defaults to 1. Scale amount must be between 0.1 and 2. //Defaults to 1. Scale amount must be between 0.1 and 2.
PdfOptions.Scale = report.Scale; PdfOptions.Scale = report.Scale;
if (DateTime.UtcNow > renderTimeOutExpiry)
throw new ReportRenderTimeOutException();
//render to pdf and return //render to pdf and return
log.LogDebug($"Calling render page contents to PDF"); log.LogDebug($"Calling render page contents to PDF");
// #if (DEBUG) // #if (DEBUG)
@@ -764,6 +777,10 @@ namespace AyaNova.Biz
log.LogDebug($"Completed, returning results"); log.LogDebug($"Completed, returning results");
return outputFileName; return outputFileName;
} }
catch (ReportRenderTimeOutException)
{
throw;
}
catch catch
{ {
//This is the error when a helper is used on the template but doesn't exist: //This is the error when a helper is used on the template but doesn't exist:

View File

@@ -335,7 +335,7 @@ namespace AyaNova.Biz
//////////////////////////////////////////////////////////////////////////////////////////////// ////////////////////////////////////////////////////////////////////////////////////////////////
//REPORTING //REPORTING
// //
public async Task<JArray> GetReportData(DataListSelectedRequest dataListSelectedRequest) public async Task<JArray> GetReportData(DataListSelectedRequest dataListSelectedRequest, DateTime renderTimeOutExpiry)
{ {
var idList = dataListSelectedRequest.SelectedRowIds; var idList = dataListSelectedRequest.SelectedRowIds;
JArray ReportData = new JArray(); JArray ReportData = new JArray();
@@ -378,7 +378,7 @@ namespace AyaNova.Biz
// IMPORT EXPORT // IMPORT EXPORT
// //
public async Task<JArray> GetExportData(DataListSelectedRequest dataListSelectedRequest) public async Task<JArray> GetExportData(DataListSelectedRequest dataListSelectedRequest, DateTime renderTimeOutExpiry)
{ {
//for now just re-use the report data code //for now just re-use the report data code
//this may turn out to be the pattern for most biz object types but keeping it seperate allows for custom usage from time to time //this may turn out to be the pattern for most biz object types but keeping it seperate allows for custom usage from time to time

View File

@@ -264,7 +264,7 @@
// //////////////////////////////////////////////////////////////////////////////////////////////// // ////////////////////////////////////////////////////////////////////////////////////////////////
// //REPORTING // //REPORTING
// // // //
// public async Task<JArray> GetReportData(DataListSelectedRequest dataListSelectedRequest) // public async Task<JArray> GetReportData(DataListSelectedRequest dataListSelectedRequest, DateTime renderTimeOutExpiry)
// { // {
// JArray ReportData = new JArray(); // JArray ReportData = new JArray();
// while (idList.Any()) // while (idList.Any())
@@ -291,7 +291,7 @@
// // IMPORT EXPORT // // IMPORT EXPORT
// // // //
// public async Task<JArray> GetExportData(DataListSelectedRequest dataListSelectedRequest) // public async Task<JArray> GetExportData(DataListSelectedRequest dataListSelectedRequest, DateTime renderTimeOutExpiry)
// { // {
// //for now just re-use the report data code // //for now just re-use the report data code
// //this may turn out to be the pattern for most biz object types but keeping it seperate allows for custom usage from time to time // //this may turn out to be the pattern for most biz object types but keeping it seperate allows for custom usage from time to time

View File

@@ -302,7 +302,7 @@ namespace AyaNova.Biz
//////////////////////////////////////////////////////////////////////////////////////////////// ////////////////////////////////////////////////////////////////////////////////////////////////
//REPORTING //REPORTING
// //
public async Task<JArray> GetReportData(DataListSelectedRequest dataListSelectedRequest) public async Task<JArray> GetReportData(DataListSelectedRequest dataListSelectedRequest, DateTime renderTimeOutExpiry)
{ {
var idList = dataListSelectedRequest.SelectedRowIds; var idList = dataListSelectedRequest.SelectedRowIds;
JArray ReportData = new JArray(); JArray ReportData = new JArray();
@@ -331,7 +331,7 @@ namespace AyaNova.Biz
// //
public async Task<JArray> GetExportData(DataListSelectedRequest dataListSelectedRequest) public async Task<JArray> GetExportData(DataListSelectedRequest dataListSelectedRequest, DateTime renderTimeOutExpiry)
{ {
//for now just re-use the report data code //for now just re-use the report data code
//this may turn out to be the pattern for most biz object types but keeping it seperate allows for custom usage from time to time //this may turn out to be the pattern for most biz object types but keeping it seperate allows for custom usage from time to time

View File

@@ -286,7 +286,7 @@ namespace AyaNova.Biz
//////////////////////////////////////////////////////////////////////////////////////////////// ////////////////////////////////////////////////////////////////////////////////////////////////
//REPORTING //REPORTING
// //
public async Task<JArray> GetReportData(DataListSelectedRequest dataListSelectedRequest) public async Task<JArray> GetReportData(DataListSelectedRequest dataListSelectedRequest, DateTime renderTimeOutExpiry)
{ {
var idList = dataListSelectedRequest.SelectedRowIds; var idList = dataListSelectedRequest.SelectedRowIds;
JArray ReportData = new JArray(); JArray ReportData = new JArray();
@@ -316,7 +316,7 @@ namespace AyaNova.Biz
// IMPORT EXPORT // IMPORT EXPORT
// //
public async Task<JArray> GetExportData(DataListSelectedRequest dataListSelectedRequest) public async Task<JArray> GetExportData(DataListSelectedRequest dataListSelectedRequest, DateTime renderTimeOutExpiry)
{ {
//for now just re-use the report data code //for now just re-use the report data code
//this may turn out to be the pattern for most biz object types but keeping it seperate allows for custom usage from time to time //this may turn out to be the pattern for most biz object types but keeping it seperate allows for custom usage from time to time

View File

@@ -331,7 +331,7 @@ namespace AyaNova.Biz
//////////////////////////////////////////////////////////////////////////////////////////////// ////////////////////////////////////////////////////////////////////////////////////////////////
//REPORTING //REPORTING
// //
public async Task<JArray> GetReportData(DataListSelectedRequest dataListSelectedRequest) public async Task<JArray> GetReportData(DataListSelectedRequest dataListSelectedRequest, DateTime renderTimeOutExpiry)
{ {
var idList = dataListSelectedRequest.SelectedRowIds; var idList = dataListSelectedRequest.SelectedRowIds;
JArray ReportData = new JArray(); JArray ReportData = new JArray();
@@ -360,7 +360,7 @@ namespace AyaNova.Biz
// //
public async Task<JArray> GetExportData(DataListSelectedRequest dataListSelectedRequest) public async Task<JArray> GetExportData(DataListSelectedRequest dataListSelectedRequest, DateTime renderTimeOutExpiry)
{ {
//for now just re-use the report data code //for now just re-use the report data code
//this may turn out to be the pattern for most biz object types but keeping it seperate allows for custom usage from time to time //this may turn out to be the pattern for most biz object types but keeping it seperate allows for custom usage from time to time

View File

@@ -298,7 +298,7 @@ namespace AyaNova.Biz
//////////////////////////////////////////////////////////////////////////////////////////////// ////////////////////////////////////////////////////////////////////////////////////////////////
//REPORTING //REPORTING
// //
public async Task<JArray> GetReportData(DataListSelectedRequest dataListSelectedRequest) public async Task<JArray> GetReportData(DataListSelectedRequest dataListSelectedRequest, DateTime renderTimeOutExpiry)
{ {
var idList = dataListSelectedRequest.SelectedRowIds; var idList = dataListSelectedRequest.SelectedRowIds;
JArray ReportData = new JArray(); JArray ReportData = new JArray();
@@ -327,7 +327,7 @@ namespace AyaNova.Biz
// //
public async Task<JArray> GetExportData(DataListSelectedRequest dataListSelectedRequest) public async Task<JArray> GetExportData(DataListSelectedRequest dataListSelectedRequest, DateTime renderTimeOutExpiry)
{ {
//for now just re-use the report data code //for now just re-use the report data code
//this may turn out to be the pattern for most biz object types but keeping it seperate allows for custom usage from time to time //this may turn out to be the pattern for most biz object types but keeping it seperate allows for custom usage from time to time

View File

@@ -293,7 +293,7 @@ namespace AyaNova.Biz
//////////////////////////////////////////////////////////////////////////////////////////////// ////////////////////////////////////////////////////////////////////////////////////////////////
//REPORTING //REPORTING
// //
public async Task<JArray> GetReportData(DataListSelectedRequest dataListSelectedRequest) public async Task<JArray> GetReportData(DataListSelectedRequest dataListSelectedRequest, DateTime renderTimeOutExpiry)
{ {
var idList = dataListSelectedRequest.SelectedRowIds; var idList = dataListSelectedRequest.SelectedRowIds;
JArray ReportData = new JArray(); JArray ReportData = new JArray();
@@ -379,7 +379,7 @@ namespace AyaNova.Biz
// IMPORT EXPORT // IMPORT EXPORT
// //
public async Task<JArray> GetExportData(DataListSelectedRequest dataListSelectedRequest) public async Task<JArray> GetExportData(DataListSelectedRequest dataListSelectedRequest, DateTime renderTimeOutExpiry)
{ {
//for now just re-use the report data code //for now just re-use the report data code
//this may turn out to be the pattern for most biz object types but keeping it seperate allows for custom usage from time to time //this may turn out to be the pattern for most biz object types but keeping it seperate allows for custom usage from time to time

View File

@@ -142,7 +142,7 @@ namespace AyaNova.Biz
//////////////////////////////////////////////////////////////////////////////////////////////// ////////////////////////////////////////////////////////////////////////////////////////////////
//REPORTING //REPORTING
// //
public async Task<JArray> GetReportData(DataListSelectedRequest dataListSelectedRequest) public async Task<JArray> GetReportData(DataListSelectedRequest dataListSelectedRequest, DateTime renderTimeOutExpiry)
{ {
var idList = dataListSelectedRequest.SelectedRowIds; var idList = dataListSelectedRequest.SelectedRowIds;
JArray ReportData = new JArray(); JArray ReportData = new JArray();
@@ -178,7 +178,7 @@ namespace AyaNova.Biz
// IMPORT EXPORT // IMPORT EXPORT
// //
public async Task<JArray> GetExportData(DataListSelectedRequest dataListSelectedRequest) public async Task<JArray> GetExportData(DataListSelectedRequest dataListSelectedRequest, DateTime renderTimeOutExpiry)
{ {
//for now just re-use the report data code //for now just re-use the report data code
//this may turn out to be the pattern for most biz object types but keeping it seperate allows for custom usage from time to time //this may turn out to be the pattern for most biz object types but keeping it seperate allows for custom usage from time to time

View File

@@ -276,7 +276,7 @@ namespace AyaNova.Biz
//////////////////////////////////////////////////////////////////////////////////////////////// ////////////////////////////////////////////////////////////////////////////////////////////////
//REPORTING //REPORTING
// //
public async Task<JArray> GetReportData(DataListSelectedRequest dataListSelectedRequest) public async Task<JArray> GetReportData(DataListSelectedRequest dataListSelectedRequest, DateTime renderTimeOutExpiry)
{ {
var idList = dataListSelectedRequest.SelectedRowIds; var idList = dataListSelectedRequest.SelectedRowIds;
JArray ReportData = new JArray(); JArray ReportData = new JArray();
@@ -311,7 +311,7 @@ namespace AyaNova.Biz
// IMPORT EXPORT // IMPORT EXPORT
// //
public async Task<JArray> GetExportData(DataListSelectedRequest dataListSelectedRequest) public async Task<JArray> GetExportData(DataListSelectedRequest dataListSelectedRequest, DateTime renderTimeOutExpiry)
{ {
//for now just re-use the report data code //for now just re-use the report data code
//this may turn out to be the pattern for most biz object types but keeping it seperate allows for custom usage from time to time //this may turn out to be the pattern for most biz object types but keeping it seperate allows for custom usage from time to time

View File

@@ -1022,7 +1022,7 @@ namespace AyaNova.Biz
//////////////////////////////////////////////////////////////////////////////////////////////// ////////////////////////////////////////////////////////////////////////////////////////////////
//REPORTING //REPORTING
// //
public async Task<JArray> GetReportData(DataListSelectedRequest dataListSelectedRequest) public async Task<JArray> GetReportData(DataListSelectedRequest dataListSelectedRequest, DateTime renderTimeOutExpiry)
{ {
var idList = dataListSelectedRequest.SelectedRowIds; var idList = dataListSelectedRequest.SelectedRowIds;
JArray ReportData = new JArray(); JArray ReportData = new JArray();
@@ -1079,7 +1079,7 @@ namespace AyaNova.Biz
// //
public async Task<JArray> GetExportData(DataListSelectedRequest dataListSelectedRequest) public async Task<JArray> GetExportData(DataListSelectedRequest dataListSelectedRequest, DateTime renderTimeOutExpiry)
{ {
//for now just re-use the report data code //for now just re-use the report data code
//this may turn out to be the pattern for most biz object types but keeping it seperate allows for custom usage from time to time //this may turn out to be the pattern for most biz object types but keeping it seperate allows for custom usage from time to time

View File

@@ -315,7 +315,7 @@ namespace AyaNova.Biz
//////////////////////////////////////////////////////////////////////////////////////////////// ////////////////////////////////////////////////////////////////////////////////////////////////
//REPORTING //REPORTING
// //
public async Task<JArray> GetReportData(DataListSelectedRequest dataListSelectedRequest) public async Task<JArray> GetReportData(DataListSelectedRequest dataListSelectedRequest, DateTime renderTimeOutExpiry)
{ {
var idList = dataListSelectedRequest.SelectedRowIds; var idList = dataListSelectedRequest.SelectedRowIds;
JArray ReportData = new JArray(); JArray ReportData = new JArray();
@@ -344,7 +344,7 @@ namespace AyaNova.Biz
// //
public async Task<JArray> GetExportData(DataListSelectedRequest dataListSelectedRequest) public async Task<JArray> GetExportData(DataListSelectedRequest dataListSelectedRequest, DateTime renderTimeOutExpiry)
{ {
//for now just re-use the report data code //for now just re-use the report data code
//this may turn out to be the pattern for most biz object types but keeping it seperate allows for custom usage from time to time //this may turn out to be the pattern for most biz object types but keeping it seperate allows for custom usage from time to time

View File

@@ -938,7 +938,7 @@ namespace AyaNova.Biz
//////////////////////////////////////////////////////////////////////////////////////////////// ////////////////////////////////////////////////////////////////////////////////////////////////
//REPORTING //REPORTING
// //
public async Task<JArray> GetReportData(DataListSelectedRequest dataListSelectedRequest) public async Task<JArray> GetReportData(DataListSelectedRequest dataListSelectedRequest, DateTime renderTimeOutExpiry)
{ {
// #if (DEBUG) // #if (DEBUG)
// var watch = System.Diagnostics.Stopwatch.StartNew(); // var watch = System.Diagnostics.Stopwatch.StartNew();
@@ -952,6 +952,8 @@ namespace AyaNova.Biz
while (idList.Any()) while (idList.Any())
{ {
if (DateTime.UtcNow > renderTimeOutExpiry)
throw new ReportRenderTimeOutException();
var batch = idList.Take(IReportAbleObject.REPORT_DATA_BATCH_SIZE); var batch = idList.Take(IReportAbleObject.REPORT_DATA_BATCH_SIZE);
idList = idList.Skip(IReportAbleObject.REPORT_DATA_BATCH_SIZE).ToArray(); idList = idList.Skip(IReportAbleObject.REPORT_DATA_BATCH_SIZE).ToArray();
List<WorkOrder> batchResults = new List<WorkOrder>(); List<WorkOrder> batchResults = new List<WorkOrder>();
@@ -960,6 +962,8 @@ namespace AyaNova.Biz
foreach (WorkOrder w in batchResults) foreach (WorkOrder w in batchResults)
{ {
if (DateTime.UtcNow > renderTimeOutExpiry)
throw new ReportRenderTimeOutException();
var jo = JObject.FromObject(w); var jo = JObject.FromObject(w);
//WorkOrder header custom fields //WorkOrder header custom fields
@@ -1108,11 +1112,11 @@ namespace AyaNova.Biz
// IMPORT EXPORT // IMPORT EXPORT
// //
public async Task<JArray> GetExportData(DataListSelectedRequest dataListSelectedRequest) public async Task<JArray> GetExportData(DataListSelectedRequest dataListSelectedRequest, DateTime renderTimeOutExpiry)
{ {
//for now just re-use the report data code //for now just re-use the report data code
//this may turn out to be the pattern for most biz object types but keeping it seperate allows for custom usage from time to time //this may turn out to be the pattern for most biz object types but keeping it seperate allows for custom usage from time to time
return await GetReportData(dataListSelectedRequest); return await GetReportData(dataListSelectedRequest, renderTimeOutExpiry);
} }
//////////////////////////////////////////////////////////////////////////////////////////////// ////////////////////////////////////////////////////////////////////////////////////////////////

View File

@@ -34,7 +34,7 @@ namespace AyaNova.Util
internal static void KillExpiredRenders(ILogger log) internal static void KillExpiredRenders(ILogger log)
{ {
log.LogTrace("Clear expired render check"); log.LogDebug("Clear potential expired render jobs check");
//check for expired and remove //check for expired and remove
var Instances = _baginstances.ToArray(); var Instances = _baginstances.ToArray();
var dtNow = DateTime.UtcNow; var dtNow = DateTime.UtcNow;
@@ -52,7 +52,7 @@ namespace AyaNova.Util
internal static bool ForceCloseProcess(ReportRenderInstanceInfo instance, ILogger log) internal static bool ForceCloseProcess(ReportRenderInstanceInfo instance, ILogger log)
{ {
log.LogTrace($"ForceCloseProcess on report render instance id {instance.ReporterProcessId} exired {instance.Expires.ToString()} utc"); log.LogDebug($"ForceCloseProcess on report render instance id {instance.ReporterProcessId} exired {instance.Expires.ToString()} utc");
try try
{ {
var p = Process.GetProcessById(instance.ReporterProcessId); var p = Process.GetProcessById(instance.ReporterProcessId);