public async Task Run()

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});
            }
        }