Update SSRS report dataset from a function

I have a series of complex rules that categorize each invoice into three different groups. I have been able to apply all these rules using a function that processes the BAQ rows. I am wondering, is there any way to create a new dataset in an SSRS report and populate it using a function?

this is my code where I execute the report.


var context = Ice.Services.ContextFactory.CreateContext < ErpContext > ();
var erpContext = new Erp.Internal.Lib.CCredChk(context);
var Db = erpContext.Db;

Guid myGuid = Guid.NewGuid();
string taskNote = myGuid.ToString().ToUpper();

//var db05Set = (from ttUD05 in erpContext.Db.UD05 where ttUD05.Character01 == this.GroupID select ttUD05).FirstOrDefault();


using (Ice.Contracts.DynamicReportSvcContract dynamicReport = Ice.Assemblies.ServiceRenderer.GetService<Ice.Contracts.DynamicReportSvcContract>(erpContext.Db))
{
    using( Ice.Contracts.BAQReportSvcContract baqReport = Ice.Assemblies.ServiceRenderer.GetService<Ice.Contracts.BAQReportSvcContract>(erpContext.Db) )
    {
    
        var rptTs = dynamicReport.GetByID("udCXC_Summary");
        var baqRptDS = baqReport.GetNewBAQReportParam("udCXC_Summary");
        baqRptDS.BAQReportParam[0].BAQRptID = "udCXC_Summary";
        baqRptDS.BAQReportParam[0].BAQID = "udCXC_Summary";
        baqRptDS.BAQReportParam[0].ReportID = "udCXC_Summary";
        baqRptDS.BAQReportParam[0].ReportStyleNum = 1;
        //baqRptDS.BAQReportParam[0].Character02 = "";

        //baqRptDS.BAQReportParam[0].Check01 = this.Preliminary;
        baqRptDS.BAQReportParam[0].AutoAction ="SSRSPREVIEW";
        //baqRptDS.BAQReportParam[0].PrinterName = printer;
        baqRptDS.BAQReportParam[0].WorkstationID = "web_DevTeam02";
        baqRptDS.BAQReportParam[0].SSRSRenderFormat = "PDF";
        baqRptDS.BAQReportParam[0].AttachmentType = "PDF";
        baqRptDS.BAQReportParam[0].Summary = false;
        baqRptDS.BAQReportParam[0].RecurringTask = false;
        baqRptDS.BAQReportParam[0].SSRSEnableRouting = false;
        baqRptDS.BAQReportParam[0].ArchiveCode = 0;
        baqRptDS.BAQReportParam[0].AgentSchedNum = 0;
        baqRptDS.BAQReportParam[0].AgentID = "Main";
        baqRptDS.BAQReportParam[0].AgentTaskNum = 0;
        baqRptDS.BAQReportParam[0].RowMod = "A";
        test = baqRptDS.ExtensionTables.Count.ToString();
        //test = baqRptDS.BAQReportParam.Count.ToString();
        //baqRptDS.BAQReportParam[0].RptPageSettings = pageSettings;
        DynamicReportDataSet rptDs = new DynamicReportDataSet();
        //test = rptTs.BAQReport[0].;
        //test = rptDs.BAQReport[0] != null ? rptDs.BAQReport[0].ReportID : "nothing";
        //rptTs.BAQRptOptionFld[0].FieldValue = this.GroupID;
        
        DatasetAdapter.CopyTSTableToDataTable<BAQReportRow, DynamicReportDataSet.BAQReportDataTable>(rptTs.BAQReport, rptDs.BAQReport);
        DatasetAdapter.CopyTSTableToDataTable<BAQRptFilterRow, DynamicReportDataSet.BAQRptFilterDataTable>(rptTs.BAQRptFilter, rptDs.BAQRptFilter);
        DatasetAdapter.CopyTSTableToDataTable<BAQRptOptionFldRow, DynamicReportDataSet.BAQRptOptionFldDataTable>(rptTs.BAQRptOptionFld, rptDs.BAQRptOptionFld);
        DatasetAdapter.CopyTSTableToDataTable<BAQRptSortRow, DynamicReportDataSet.BAQRptSortDataTable>(rptTs.BAQRptSort, rptDs.BAQRptSort);
        DatasetAdapter.CopyTSTableToDataTable<BAQRptSortFldRow, DynamicReportDataSet.BAQRptSortFldDataTable>(rptTs.BAQRptSortFld, rptDs.BAQRptSortFld);
        DatasetAdapter.CopyTSTableToDataTable<BAQRptSortFldRow, DynamicReportDataSet.BAQRptSortFldDataTable>(rptTs.BAQRptSortFld, rptDs.BAQRptSortFld);
        rptDs.AcceptChanges();
        StringWriter writer = new StringWriter();
        rptDs.WriteXml(writer);
        baqRptDS.BAQReportParam[0].Filter1 = writer.ToString();
        // = writer.ToString();
        baqReport.SubmitToAgent(baqRptDS, "SystemTaskAgent", 0, 0, "Ice.UIRpt.udCXC_Summary");
    }
  
}

Yes, I’m not sure I finished that code, but let me check.

What I would do however, is process your rows in the BAQ by turning it into a uBAQ and do it in post-processing on getlist.

1 Like

I currently work on the UbAQ get list. Let’s see what I can get done.

If you want to keep your function, you certainly can.

Either keep it in the baq so it’s self contained, or call your function from it to do the processing.
(in case it’s useful elsewhere?) - Anyway, personal preference issue mostly.