This commit is contained in:
@@ -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,
|
||||||
|
|||||||
@@ -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
|
||||||
|
|||||||
@@ -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
|
||||||
|
|||||||
@@ -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
|
||||||
|
|||||||
@@ -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
|
||||||
|
|||||||
@@ -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
|
||||||
|
|||||||
@@ -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;
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -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
|
||||||
|
|||||||
@@ -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
|
||||||
|
|||||||
@@ -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
|
||||||
|
|||||||
@@ -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
|
||||||
|
|||||||
@@ -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
|
||||||
|
|||||||
@@ -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
|
||||||
|
|||||||
@@ -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
|
||||||
|
|||||||
@@ -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
|
||||||
|
|||||||
@@ -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
|
||||||
|
|||||||
@@ -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
|
||||||
|
|||||||
@@ -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
|
||||||
|
|||||||
@@ -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
|
||||||
|
|||||||
@@ -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
|
||||||
|
|||||||
@@ -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:
|
||||||
|
|||||||
@@ -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
|
||||||
|
|||||||
@@ -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
|
||||||
|
|||||||
@@ -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
|
||||||
|
|||||||
@@ -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
|
||||||
|
|||||||
@@ -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
|
||||||
|
|||||||
@@ -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
|
||||||
|
|||||||
@@ -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
|
||||||
|
|||||||
@@ -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
|
||||||
|
|||||||
@@ -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
|
||||||
|
|||||||
@@ -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
|
||||||
|
|||||||
@@ -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
|
||||||
|
|||||||
@@ -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);
|
||||||
}
|
}
|
||||||
|
|
||||||
////////////////////////////////////////////////////////////////////////////////////////////////
|
////////////////////////////////////////////////////////////////////////////////////////////////
|
||||||
|
|||||||
@@ -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);
|
||||||
|
|||||||
Reference in New Issue
Block a user