Questo post è interessante perchè mostra come salvare un file nel print archive:
https://www.linkedin.com/pulse/excel-reports-d365-finance-operations-sohan-prasad-kanti/
Possiamo usare questa logica per scrivere una classe (anche batch) per generare un file excel ed effettuare il salvataggio nel print archive:
private void LIL_GenerateFileAndSaveToPrintArchive()
{
SalesTable salesTable;
System.IO.Stream workbookStream = new System.IO.MemoryStream();
System.IO.MemoryStream memoryStream = new System.IO.MemoryStream();
using(var package = new OfficeOpenXml.ExcelPackage(memoryStream))
{
var worksheets = package.get_Workbook().get_Worksheets();
var worksheet = worksheets.Add("Sheet1");
var cells = worksheet.get_Cells();
var currentRow=1 ;
var cell = cells.get_Item(currentRow,1);
cell.set_Value("SalesId");
while select firstonly10 salesTable
{
currentRow++;
cell= cells.get_Item(currentRow, 1);
cell.set_Value(salesTable.SalesId);
}
package.Save();
}
memoryStream.Seek(0,System.IO.SeekOrigin::Begin);
//salvataggio nel print archive
SRSPrintArchiveContract printArchiveContract;
printArchiveContract = SRSPrintArchiveContract::construct();
printArchiveContract.parmExecutionDate(DateTimeUtil::getSystemDate(DateTimeUtil::getUserPreferredTimeZone()));
printArchiveContract.parmExecutionTime(DateTimeUtil::getTimeNow(DateTimeUtil::getUserPreferredTimeZone()));
printArchiveContract.parmFileName("test.xlsx");
printArchiveContract.parmJobDescription("test 01");
printArchiveContract.savePrintArchiveDetails(Binary::constructFromMemoryStream(memoryStream).getContainer());
}