You can do it entirely with the Business Objects if you’d like.
byte[] reportPDF = null;
string taskNote = Guid.NewGuid().ToString(); //Magic
CallService<Erp.Contracts.SalesOrderAckSvcContract>(soa =>
{
Erp.Tablesets.SalesOrderAckTableset salesOrderAckTS = soa.GetNewParameters();
Erp.Tablesets.SalesOrderAckParamRow paramRow = salesOrderAckTS.SalesOrderAckParam.First();
paramRow.OrderNum = soNum;
paramRow.AgentID = "SystemTaskAgent";
paramRow.AutoAction = "SSRSGENERATE";
paramRow.ReportStyleNum = reportStyleNum;
paramRow.TaskNote = taskNote;
soa.RunDirect(salesOrderAckTS);
});
long sysTaskNum = 0;
CallService<Ice.Contracts.SysTaskSvcContract>( st =>
{
sysTaskNum = st.GetList( $"TaskNote = '{taskNote}'", 0, 0, out _ ).SysTaskList.FirstOrDefault().SysTaskNum;
});
CallService<Ice.Contracts.ReportMonitorSvcContract>( rm =>
{
var rptSysRowID = rm.GetList( $"SysTaskNum = {sysTaskNum}", 0, 0, out _ ).SysRptLstList.FirstOrDefault().SysRowID;
reportPDF = rm.GetReportBytes(rptSysRowID);
});
if(reportPDF != null)
{
//pdfB64 = Convert.ToBase64String(reportPDF).Substring(0, 50); //Debug only (return 50 characters)
pdfB64 = Convert.ToBase64String(reportPDF);
}