public async Task CreateCustomOfferReport(CrudAPI api, GiftProject giftProject) { var reportName = "Offerte 3"; var report = await LoadReport(api, reportName); var order = ConvertProjectToOrder(giftProject); report.DataSource = new List() { new UnicontaMasterDetail() { Master = order, Details = order.OfferLines.ToArray() } }; var stream = new MemoryStream(); var pdfOptions = new PdfExportOptions(); await report.ExportToPdfAsync(stream, pdfOptions); stream.Position = 0; var data = stream.ToArray(); var fileName = "Offerte 123"; var attachment = new UserDocsClient() { _Data = data, _Text = fileName, _DocumentType = FileextensionsTypes.PDF }; return attachment; } private static async Task LoadReport(CrudAPI api, string reportName) { var apiWrapper = new ApiWrapper(api); var reports = await apiWrapper.Filter() .WhereEqual(x => x.Name, reportName) .Run(); var reportRow = reports.FirstOrDefault(); if (reportRow == null) throw new Exception($"Kon rapport '{reportName}' niet vinden!"); // Load Layout bytes in repord _ = await api.Read(reportRow); var reportLayout = reportRow.Layout; if (reportLayout == null) throw new Exception($"Kon rapport '{reportName}' layout niet laden!"); XtraReport report; try { report = ReportUtil.GetXtraReportFromLayout(reportLayout); } catch (Exception) { report = null; } if (report == null) throw new Exception($"Kon rapport '{reportName}' niet laden! (error while loading layout)"); return report; }