in Hands-on lab/lab-files/src-invoicing-functions/FunctionApp/GeneratePdf.cs [30:67]
public async Task Run([QueueTrigger("orders")] string myQueueItem, ILogger log)
{
log.LogInformation($"Browser path: {appInfo.BrowserExecutablePath}");
int orderId = int.Parse(myQueueItem);
var browser = await Puppeteer.LaunchAsync(new LaunchOptions
{
Headless = true,
ExecutablePath = appInfo.BrowserExecutablePath
});
var page = await browser.NewPageAsync();
await page.GoToAsync($"http://localhost:{appInfo.RazorPagesServerPort}/");
string orderDetailsData = GetOrderDetailsData(orderId);
string orderData = GetOrderData(orderId);
await page.TypeAsync("#items-box", orderDetailsData);
await page.TypeAsync("#customerInfo-box", orderData);
await Task.WhenAll(
page.WaitForNavigationAsync(),
page.ClickAsync("#submit-button"));
var stream = await page.PdfStreamAsync();
await browser.CloseAsync();
string storageConnectionString = Environment.GetEnvironmentVariable("AzureWebJobsStorage");
BlobContainerClient container = new BlobContainerClient(storageConnectionString, "invoices");
container.CreateIfNotExists(Azure.Storage.Blobs.Models.PublicAccessType.None);
var blockBlobClient = container.GetBlobClient(orderId.ToString() + ".pdf");
blockBlobClient.Upload(stream, new BlobHttpHeaders { ContentType = "application/pdf" });
string sasUri = blockBlobClient.GenerateSasUri(permissions: Azure.Storage.Sas.BlobSasPermissions.Read, expiresOn: DateTime.Now.AddYears(1)).AbsoluteUri;
var sqlConnectionString = Environment.GetEnvironmentVariable("DefaultConnection");
using (var connection = new SqlConnection(sqlConnectionString))
{
string sql = "Update Orders Set Processed = -1, InvoiceURL = @InvoiceURL where OrderId = @OrderId";
var affectedRows = connection.Execute(sql,new {OrderId = orderId, InvoiceURL = sasUri});
}
}