This commit is contained in:
2020-09-17 15:25:06 +00:00
parent cc897b9869
commit 352208e555
2 changed files with 30 additions and 3 deletions

View File

@@ -10,6 +10,7 @@ using AyaNova.Models;
using EnumsNET;
using PuppeteerSharp;
using Newtonsoft.Json.Linq;
using System.Threading;
namespace AyaNova.Biz
{
@@ -374,6 +375,7 @@ namespace AyaNova.Biz
await new BrowserFetcher().DownloadAsync(BrowserFetcher.DefaultRevision);
}
//https://stackoverflow.com/questions/53367966/puppeteer-sharp-still-appear-many-chromium-instance-in-process-task-manager-when
log.LogDebug($"Launching headless Chrome now:");
using (var browser = await Puppeteer.LaunchAsync(lo))
@@ -381,6 +383,8 @@ namespace AyaNova.Biz
{
try
{
log.LogDebug($"Preparing page: adding base reporting scripts to page");
//Add Handlebars JS for compiling and presenting
@@ -470,11 +474,21 @@ namespace AyaNova.Biz
//prePareData / preRender
var ReportDataObject = $"{{ ayReportData:{ReportData}, ayReportMetaData:{reportMeta}, ayClientMetaData:{clientMeta}, ayServerMetaData:{serverMeta} }}";
log.LogDebug($"Calling ayPreRender...");
var PreParedReportDataObject = await page.EvaluateExpressionAsync<dynamic>($"ayPreRender({ReportDataObject});");//note ayPreRender is async but dont' use await to call it as the EvaluateExpressionAsync function knows how to handle that already
//PRE-RENDER ORIGINAL WAY
// var PreParedReportDataObject = await page.EvaluateExpressionAsync<dynamic>($"ayPreRender({ReportDataObject});");//note ayPreRender is async but dont' use await to call it as the EvaluateExpressionAsync function knows how to handle that already
//PRE_RENDER WITH TIMEOUT
var w = new WaitForFunctionOptions() { Timeout = 10000 };
//var test = await page.WaitForExpressionAsync($"aytest()==true", w);
// var PreParedReportDataObject = await page.WaitForExpressionAsync($"ayPreRender({ReportDataObject})!=null", w);
//new style, nothing to return, keeps data on page
await page.WaitForExpressionAsync($"ayPreRenderEx({ReportDataObject})", w);
//compile the template
log.LogDebug($"Calling Handlebars.compile...");
var compileScript = $"Handlebars.compile(`{report.Template}`)({PreParedReportDataObject});";
var compileScript = $"Handlebars.compile(`{report.Template}`)(PreParedReportDataObject);";
var compiledHTML = await page.EvaluateExpressionAsync<string>(compileScript);
//render report as HTML