Calling TransformAndSubmit from function (BAQReportSvc)

Hi There,

I am attempting to call TransformAndSubmit with a custom ds created inside my function - I am receiving the following error:

"Ice.Common.ServiceArgumentException: Invalid dataset.\r\n   at Ice.Services.Rpt.BAQReportSvc.TransformAndSubmit(Object ds, String agentID, Int64 agentSchedNum, Int32 agentTaskNum, String maintProgram)

My call to this is the following:

  string agentID = "";
  int agentSchedNum = 0;
  int agentTaskNum = 0;
  string maintProgram = "Ice.UIRpt.LCI_Agd_Rcv_01";
  
  this.CallService<Ice.Contracts.BAQReportSvcContract>(reportService =>
  {
    reportService.TransformAndSubmit(
      myds,
      agentID,
      agentSchedNum,
      agentTaskNum,
      maintProgram
    );
  });

Additionally, my ds is built with the following syntax etc…

myds = new System.Data.DataSet();
    
    // --------------------
    // BAQReportParam table
    // --------------------
    var baqParamTable = new System.Data.DataTable("BAQReportParam");
    baqParamTable.Columns.Add("AgentCompareString", typeof(string));
    baqParamTable.Columns.Add("AgentID", typeof(string));
    baqParamTable.Columns.Add("AgentSchedNum", typeof(int));
    baqParamTable.Columns.Add("AgentTaskNum", typeof(int));

    //ALL fields entered, here is how we initialize them and then add the datatable:
    var paramRow = baqParamTable.NewRow();

    // Set values for all columns
    paramRow["AgentCompareString"] = "";
    paramRow["AgentID"] = "";
    paramRow["AgentSchedNum"] = 0;
    paramRow["AgentTaskNum"] = 0;
    //etc etc

    baqParamTable.Rows.Add(paramRow);
    myds.Tables.Add(baqParamTable);

This creates a full ds but I cannot seem to have this properly accepted:

{
    "BAQReportParam": [
        {
            "AgentCompareString": "",
            "AgentID": "",
            "AgentSchedNum": 0,
            "AgentTaskNum": 0,
            "ArchiveCode": 0,
            "AttachmentType": "Excel",
            "AutoAction": "SSRSPrint",
            "BAQID": "",
            "BAQRptID": "",
            "Character01": "",
            "Character02": "",
            "Character03": "",
            "Character04": "",
            "Character05": "",
            "Check01": false,
            "Check02": false,
            "Check03": false,
            "Check04": false,
            "Check05": false,
            "Check06": false,
            "Check07": false,
            "Check08": false,
            "Check09": false,
            "Check10": false,
            "Date01": null,
            "Date01Token": "",
            "Date02": null,
            "Date02Token": "",
            "Date03": null,
            "Date03Token": "",
            "Date04": null,
            "Date04Token": "",
            "Date05": null,
            "Date05Token": "",
            "DateFormat": "m/d/yyyy",
            "DecimalsCost": 0,
            "DecimalsGeneral": 0,
            "DecimalsPrice": 0,
            "DesignMode": false,
            "EMailBCC": "",
            "EMailBody": "Test - see attached",
            "EMailCC": "",
            "EMailTo": "(redacted, full email address)",
            "FaxNumber": "",
            "FaxSubject": "Aged Receivables - test",
            "FaxTo": "",
            "Filter1": "",
            "Filter2": "",
            "Filter3": "",
            "Filter4": "",
            "Filter5": "",
            "Filter6": "",
            "Filter7": "",
            "Filter8": "",
            "Filter9": "",
            "Filter10": "",
            "GlbDecimalsCost": 0,
            "GlbDecimalsGeneral": 0,
            "GlbDecimalsPrice": 0,
            "Number01": 0,
            "Number02": 0,
            "Number03": 0,
            "Number04": 0,
            "Number05": 0,
            "NumericFormat": ",.",
            "Option01": "Heath Croydon",
            "Option02": "",
            "Option03": "",
            "Option04": "",
            "Option05": "",
            "Option06": "",
            "Option07": "",
            "Option08": "",
            "Option09": "",
            "Option10": "",
            "PrintReportParameters": false,
            "PrinterName": "",
            "ProcessCompany": "",
            "ProcessID": "",
            "ProcessSystemCode": "",
            "ProcessTaskNum": 0,
            "RecurringTask": false,
            "ReportCultureCode": "en-US",
            "ReportCurrencyCode": "USD",
            "ReportID": "LCI_Agd_Rcv_01",
            "ReportStyleNum": 1,
            "ReportTitle": "",
            "RowMod": "A",
            "RptPageSettings": "",
            "RptPrinterSettings": "",
            "RptVersion": "",
            "SSRSEnableRouting": false,
            "SSRSRenderFormat": "PDF",
            "SortBy": "",
            "SortFields": "",
            "Summary": false,
            "SysRowID": "00000000-0000-0000-0000-000000000000",
            "TaskNote": "",
            "UIXml": "",
            "UserID": "",
            "WorkstationID": "web_cstlouis"
        }
    ],
    "ReportStyle": [
        {
            "AllowGenerateEDI": false,
            "AllowResetAfterSubmit": false,
            "BitFlag": 0,
            "CGCCode": "",
            "CertExpiration": null,
            "CertificateID": null,
            "CertificateIsAllComp": false,
            "CertificateIsSystem": false,
            "Company": "****** (redacted)",
            "CompanyList": "****** (redacted)",
            "FormatCulture": "",
            "HasBAQOrEI": false,
            "IsBAQReport": false,
            "LangNameID": "",
            "LangNameIDDescription": "",
            "OutputEDI": "",
            "OutputLocation": "Database",
            "PrintProgram": "reports/CustomReports/LCI_Agd_Rcvable",
            "PrintProgramOptions": "",
            "ReportID": "LCI_Agd_Rcv_01",
            "ReportRptDescription": "",
            "RequireSubmissionID": false,
            "RoutingRuleEnabled": false,
            "RowMod": "",
            "RptCriteriaSetID": null,
            "RptDefID": "LCI_Agd_Rcv_01",
            "RptDefRptDescription": "",
            "RptDefSystemFlag": false,
            "RptStructuredOutputDefID": null,
            "RptTypeID": "SSRS",
            "RptTypeRptTypeDescription": "",
            "SSRSRenderFormat": "PDF",
            "ServerNum": 0,
            "Status": 0,
            "StatusCode": 0,
            "StatusDesc": "",
            "StatusMessage": "",
            "StructuredOutputAlgorithm": null,
            "StructuredOutputCertificateExpirationDate": null,
            "StructuredOutputCertificateID": null,
            "StructuredOutputCertificateIsAllComp": false,
            "StructuredOutputCertificateIsSystem": false,
            "StructuredOutputEnabled": false,
            "StyleDescription": "Standard - SSRS",
            "StyleNum": 1,
            "SysRevID": 212513422,
            "SysRowID": "ebfabee5-70a2-477e-b6b2-b40a31bdaa09",
            "SystemFlag": false
        }
    ],
    "extensionTables": []
}

This produces the ā€˜invalid dataset’ error.
Here is a valid dataset which is passed in the payload when using Epicor’s actual printing application for this and fully works. (this is what I am trying to emulate):

{
    "extensionTables": [],
    "BAQReportParam": [
        {
            "BAQID": "",
            "SortBy": "",
            "SortFields": "",
            "ReportTitle": "",
            "Summary": false,
            "Filter1": "",
            "Filter2": "",
            "Filter3": "",
            "Filter4": "",
            "Filter5": "",
            "Filter6": "",
            "Filter7": "",
            "Filter8": "",
            "Filter9": "",
            "Filter10": "",
            "UserID": "",
            "Character01": "",
            "Character02": "",
            "Character03": "",
            "Character04": "",
            "Character05": "",
            "Check01": false,
            "Check02": false,
            "Check03": false,
            "Check04": false,
            "Check05": false,
            "Number01": 0,
            "Number02": 0,
            "Number03": 0,
            "Number04": 0,
            "Number05": 0,
            "BAQRptID": "",
            "ReportID": "LCI_Agd_Rcv_01",
            "Option01": "Heath Croydon",
            "Option02": "",
            "Option03": "",
            "Option04": "",
            "Option05": "",
            "Option06": "",
            "Option07": "",
            "Option08": "",
            "Option09": "",
            "Option10": "",
            "Check06": false,
            "Check07": false,
            "Check08": false,
            "Check09": false,
            "Check10": false,
            "Date01": null,
            "Date02": null,
            "Date03": null,
            "Date04": null,
            "Date05": null,
            "Date01Token": "",
            "Date02Token": "",
            "Date03Token": "",
            "Date04Token": "",
            "Date05Token": "",
            "SysRowID": "00000000-0000-0000-0000-000000000000",
            "AutoAction": "SSRSPrint",
            "PrinterName": "",
            "AgentSchedNum": 0,
            "AgentID": "",
            "AgentTaskNum": 0,
            "RecurringTask": false,
            "RptPageSettings": "",
            "RptPrinterSettings": "",
            "RptVersion": "",
            "ReportStyleNum": 1,
            "WorkstationID": "web_cstlouis",
            "TaskNote": "",
            "ArchiveCode": 0,
            "DateFormat": "m/d/yyyy",
            "NumericFormat": ",.",
            "AgentCompareString": "",
            "ProcessID": "",
            "ProcessCompany": "",
            "ProcessSystemCode": "",
            "ProcessTaskNum": 0,
            "DecimalsGeneral": 0,
            "DecimalsCost": 0,
            "DecimalsPrice": 0,
            "GlbDecimalsGeneral": 0,
            "GlbDecimalsCost": 0,
            "GlbDecimalsPrice": 0,
            "FaxSubject": "Aged Receivables - test",
            "FaxTo": "",
            "FaxNumber": "",
            "EMailTo": "(full email)",
            "EMailCC": "",
            "EMailBCC": "",
            "EMailBody": "Test - see attached",
            "AttachmentType": "Excel",
            "ReportCurrencyCode": "USD",
            "ReportCultureCode": "en-US",
            "SSRSRenderFormat": "PDF",
            "UIXml": "",
            "PrintReportParameters": false,
            "SSRSEnableRouting": false,
            "DesignMode": false,
            "RowMod": "A"
        }
    ],
    "ReportStyle": [
        {
            "Company": "(redacted)",
            "ReportID": "LCI_Agd_Rcv_01",
            "StyleNum": 1,
            "StyleDescription": "Standard - SSRS",
            "RptTypeID": "SSRS",
            "PrintProgram": "reports/CustomReports/LCI_Agd_Rcvable",
            "PrintProgramOptions": "",
            "RptDefID": "LCI_Agd_Rcv_01",
            "CompanyList": "(redacted)",
            "ServerNum": 0,
            "OutputLocation": "Database",
            "OutputEDI": "",
            "SystemFlag": false,
            "CGCCode": "",
            "SysRevID": 212513422,
            "SysRowID": "ebfabee5-70a2-477e-b6b2-b40a31bdaa09",
            "RptCriteriaSetID": null,
            "RptStructuredOutputDefID": null,
            "StructuredOutputEnabled": false,
            "RequireSubmissionID": false,
            "AllowResetAfterSubmit": false,
            "CertificateID": null,
            "LangNameID": "",
            "FormatCulture": "",
            "StructuredOutputCertificateID": null,
            "StructuredOutputAlgorithm": null,
            "StatusCode": 0,
            "StatusDesc": "",
            "HasBAQOrEI": false,
            "RoutingRuleEnabled": false,
            "CertificateIsAllComp": false,
            "CertificateIsSystem": false,
            "CertExpiration": null,
            "Status": 0,
            "StatusMessage": "",
            "RptDefSystemFlag": false,
            "LangNameIDDescription": "",
            "IsBAQReport": false,
            "StructuredOutputCertificateIsAllComp": false,
            "StructuredOutputCertificateIsSystem": false,
            "StructuredOutputCertificateExpirationDate": null,
            "AllowGenerateEDI": false,
            "BitFlag": 0,
            "ReportRptDescription": "",
            "RptDefRptDescription": "",
            "RptTypeRptTypeDescription": "",
            "RowMod": "",
            "SSRSRenderFormat": "PDF"
        }
    ]
}

Does anyone notice any difference between these? I have been having a headache today trying to find the difference or a reason my ds would not be accepted.

Full current code:

try {
    // Initialize myds as a new System.Data.DataSet
    myds = new System.Data.DataSet();
    
    // --------------------
    // BAQReportParam table
    // --------------------
    var baqParamTable = new System.Data.DataTable("BAQReportParam");
    baqParamTable.Columns.Add("AgentCompareString", typeof(string));
    baqParamTable.Columns.Add("AgentID", typeof(string));
    baqParamTable.Columns.Add("AgentSchedNum", typeof(int));
    baqParamTable.Columns.Add("AgentTaskNum", typeof(int));
    baqParamTable.Columns.Add("ArchiveCode", typeof(int));
    baqParamTable.Columns.Add("AttachmentType", typeof(string));
    baqParamTable.Columns.Add("AutoAction", typeof(string));
    baqParamTable.Columns.Add("BAQID", typeof(string));
    baqParamTable.Columns.Add("BAQRptID", typeof(string));
    baqParamTable.Columns.Add("Character01", typeof(string));
    baqParamTable.Columns.Add("Character02", typeof(string));
    baqParamTable.Columns.Add("Character03", typeof(string));
    baqParamTable.Columns.Add("Character04", typeof(string));
    baqParamTable.Columns.Add("Character05", typeof(string));
    baqParamTable.Columns.Add("Check01", typeof(bool));
    baqParamTable.Columns.Add("Check02", typeof(bool));
    baqParamTable.Columns.Add("Check03", typeof(bool));
    baqParamTable.Columns.Add("Check04", typeof(bool));
    baqParamTable.Columns.Add("Check05", typeof(bool));
    baqParamTable.Columns.Add("Check06", typeof(bool));
    baqParamTable.Columns.Add("Check07", typeof(bool));
    baqParamTable.Columns.Add("Check08", typeof(bool));
    baqParamTable.Columns.Add("Check09", typeof(bool));
    baqParamTable.Columns.Add("Check10", typeof(bool));
    baqParamTable.Columns.Add("Date01", typeof(DateTime));
    baqParamTable.Columns.Add("Date01Token", typeof(string));
    baqParamTable.Columns.Add("Date02", typeof(DateTime));
    baqParamTable.Columns.Add("Date02Token", typeof(string));
    baqParamTable.Columns.Add("Date03", typeof(DateTime));
    baqParamTable.Columns.Add("Date03Token", typeof(string));
    baqParamTable.Columns.Add("Date04", typeof(DateTime));
    baqParamTable.Columns.Add("Date04Token", typeof(string));
    baqParamTable.Columns.Add("Date05", typeof(DateTime));
    baqParamTable.Columns.Add("Date05Token", typeof(string));
    baqParamTable.Columns.Add("DateFormat", typeof(string));
    baqParamTable.Columns.Add("DecimalsCost", typeof(int));
    baqParamTable.Columns.Add("DecimalsGeneral", typeof(int));
    baqParamTable.Columns.Add("DecimalsPrice", typeof(int));
    baqParamTable.Columns.Add("DesignMode", typeof(bool));
    baqParamTable.Columns.Add("EMailBCC", typeof(string));
    baqParamTable.Columns.Add("EMailBody", typeof(string));
    baqParamTable.Columns.Add("EMailCC", typeof(string));
    baqParamTable.Columns.Add("EMailTo", typeof(string));
    baqParamTable.Columns.Add("FaxNumber", typeof(string));
    baqParamTable.Columns.Add("FaxSubject", typeof(string));
    baqParamTable.Columns.Add("FaxTo", typeof(string));
    baqParamTable.Columns.Add("Filter1", typeof(string));
    baqParamTable.Columns.Add("Filter2", typeof(string));
    baqParamTable.Columns.Add("Filter3", typeof(string));
    baqParamTable.Columns.Add("Filter4", typeof(string));
    baqParamTable.Columns.Add("Filter5", typeof(string));
    baqParamTable.Columns.Add("Filter6", typeof(string));
    baqParamTable.Columns.Add("Filter7", typeof(string));
    baqParamTable.Columns.Add("Filter8", typeof(string));
    baqParamTable.Columns.Add("Filter9", typeof(string));
    baqParamTable.Columns.Add("Filter10", typeof(string));
    baqParamTable.Columns.Add("GlbDecimalsCost", typeof(int));
    baqParamTable.Columns.Add("GlbDecimalsGeneral", typeof(int));
    baqParamTable.Columns.Add("GlbDecimalsPrice", typeof(int));
    baqParamTable.Columns.Add("Number01", typeof(int));
    baqParamTable.Columns.Add("Number02", typeof(int));
    baqParamTable.Columns.Add("Number03", typeof(int));
    baqParamTable.Columns.Add("Number04", typeof(int));
    baqParamTable.Columns.Add("Number05", typeof(int));
    baqParamTable.Columns.Add("NumericFormat", typeof(string));
    baqParamTable.Columns.Add("Option01", typeof(string));
    baqParamTable.Columns.Add("Option02", typeof(string));
    baqParamTable.Columns.Add("Option03", typeof(string));
    baqParamTable.Columns.Add("Option04", typeof(string));
    baqParamTable.Columns.Add("Option05", typeof(string));
    baqParamTable.Columns.Add("Option06", typeof(string));
    baqParamTable.Columns.Add("Option07", typeof(string));
    baqParamTable.Columns.Add("Option08", typeof(string));
    baqParamTable.Columns.Add("Option09", typeof(string));
	baqParamTable.Columns.Add("Option10", typeof(string));
    baqParamTable.Columns.Add("PrintReportParameters", typeof(bool));
    baqParamTable.Columns.Add("PrinterName", typeof(string));
    baqParamTable.Columns.Add("ProcessCompany", typeof(string));
    baqParamTable.Columns.Add("ProcessID", typeof(string));
    baqParamTable.Columns.Add("ProcessSystemCode", typeof(string));
    baqParamTable.Columns.Add("ProcessTaskNum", typeof(int));
    baqParamTable.Columns.Add("RecurringTask", typeof(bool));
    baqParamTable.Columns.Add("ReportCultureCode", typeof(string));
    baqParamTable.Columns.Add("ReportCurrencyCode", typeof(string));
    baqParamTable.Columns.Add("ReportID", typeof(string));
    baqParamTable.Columns.Add("ReportStyleNum", typeof(int));
    baqParamTable.Columns.Add("ReportTitle", typeof(string));
    baqParamTable.Columns.Add("RowMod", typeof(string));
    baqParamTable.Columns.Add("RptPageSettings", typeof(string));
    baqParamTable.Columns.Add("RptPrinterSettings", typeof(string));
    baqParamTable.Columns.Add("RptVersion", typeof(string));
    baqParamTable.Columns.Add("SSRSEnableRouting", typeof(bool));
    baqParamTable.Columns.Add("SSRSRenderFormat", typeof(string));
    baqParamTable.Columns.Add("SortBy", typeof(string));
    baqParamTable.Columns.Add("SortFields", typeof(string));
    baqParamTable.Columns.Add("Summary", typeof(bool));
    baqParamTable.Columns.Add("SysRowID", typeof(string));
    baqParamTable.Columns.Add("TaskNote", typeof(string));
    baqParamTable.Columns.Add("UIXml", typeof(string));
    baqParamTable.Columns.Add("UserID", typeof(string));
    baqParamTable.Columns.Add("WorkstationID", typeof(string));

    var paramRow = baqParamTable.NewRow();

	// Set values for all columns
	paramRow["AgentCompareString"] = "";
	paramRow["AgentID"] = "";
	paramRow["AgentSchedNum"] = 0;
	paramRow["AgentTaskNum"] = 0;
	paramRow["ArchiveCode"] = 0;
	paramRow["AttachmentType"] = "Excel";
	paramRow["AutoAction"] = "SSRSPrint";
	paramRow["BAQID"] = "";
	paramRow["BAQRptID"] = "";
	paramRow["Character01"] = "";
	paramRow["Character02"] = "";
	paramRow["Character03"] = "";
	paramRow["Character04"] = "";
	paramRow["Character05"] = "";
	paramRow["Check01"] = false;
	paramRow["Check02"] = false;
	paramRow["Check03"] = false;
	paramRow["Check04"] = false;
	paramRow["Check05"] = false;
	paramRow["Check06"] = false;
	paramRow["Check07"] = false;
	paramRow["Check08"] = false;
	paramRow["Check09"] = false;
	paramRow["Check10"] = false;
	paramRow["Date01"] = DBNull.Value;
	paramRow["Date01Token"] = "";
	paramRow["Date02"] = DBNull.Value;
	paramRow["Date02Token"] = "";
	paramRow["Date03"] = DBNull.Value;
	paramRow["Date03Token"] = "";
	paramRow["Date04"] = DBNull.Value;
	paramRow["Date04Token"] = "";
	paramRow["Date05"] = DBNull.Value;
	paramRow["Date05Token"] = "";
	paramRow["DateFormat"] = "m/d/yyyy";
	paramRow["DecimalsCost"] = 0;
	paramRow["DecimalsGeneral"] = 0;
	paramRow["DecimalsPrice"] = 0;
	paramRow["DesignMode"] = false;
	paramRow["EMailBCC"] = "";
	paramRow["EMailBody"] = "Test - see attached";
	paramRow["EMailCC"] = "";
	paramRow["EMailTo"] = ""; //removed for epiforum post - full email address here
	paramRow["FaxNumber"] = "";
	paramRow["FaxSubject"] = "Aged Receivables - test";
	paramRow["FaxTo"] = "";
	paramRow["Filter1"] = "";
	paramRow["Filter2"] = "";
	paramRow["Filter3"] = "";
	paramRow["Filter4"] = "";
	paramRow["Filter5"] = "";
	paramRow["Filter6"] = "";
	paramRow["Filter7"] = "";
	paramRow["Filter8"] = "";
	paramRow["Filter9"] = "";
	paramRow["Filter10"] = "";
	paramRow["GlbDecimalsCost"] = 0;
	paramRow["GlbDecimalsGeneral"] = 0;
	paramRow["GlbDecimalsPrice"] = 0;
	paramRow["Number01"] = 0;
	paramRow["Number02"] = 0;
	paramRow["Number03"] = 0;
	paramRow["Number04"] = 0;
	paramRow["Number05"] = 0;
	paramRow["NumericFormat"] = ",.";
	paramRow["Option01"] = "Heath Croydon";
	paramRow["Option02"] = "";
	paramRow["Option03"] = "";
	paramRow["Option04"] = "";
	paramRow["Option05"] = "";
	paramRow["Option06"] = "";
	paramRow["Option07"] = "";
	paramRow["Option08"] = "";
	paramRow["Option09"] = "";
	paramRow["Option10"] = "";
	paramRow["PrintReportParameters"] = false;
	paramRow["PrinterName"] = "";
	paramRow["ProcessCompany"] = "";
	paramRow["ProcessID"] = "";
	paramRow["ProcessSystemCode"] = "";
	paramRow["ProcessTaskNum"] = 0;
	paramRow["RecurringTask"] = false;
	paramRow["ReportCultureCode"] = "en-US";
	paramRow["ReportCurrencyCode"] = "USD";
	paramRow["ReportID"] = "LCI_Agd_Rcv_01";
	paramRow["ReportStyleNum"] = 1;
	paramRow["ReportTitle"] = "";
	paramRow["RowMod"] = "A";
	paramRow["RptPageSettings"] = "";
	paramRow["RptPrinterSettings"] = "";
	paramRow["RptVersion"] = "";
	paramRow["SSRSEnableRouting"] = false;
	paramRow["SSRSRenderFormat"] = "PDF";
	paramRow["SortBy"] = "";
	paramRow["SortFields"] = "";
	paramRow["Summary"] = false;
	paramRow["SysRowID"] = "00000000-0000-0000-0000-000000000000";
	paramRow["TaskNote"] = "";
	paramRow["UIXml"] = "";
	paramRow["UserID"] = "";
	paramRow["WorkstationID"] = "web_cstlouis";
	

	// Continue for all the other columns you have (keep adding them like the above lines)

	baqParamTable.Rows.Add(paramRow);


    myds.Tables.Add(baqParamTable);

    // --------------------
    // ReportStyle table
    // --------------------
    var reportStyleTable = new System.Data.DataTable("ReportStyle");

	reportStyleTable.Columns.Add("AllowGenerateEDI", typeof(bool));
	reportStyleTable.Columns.Add("AllowResetAfterSubmit", typeof(bool));
	reportStyleTable.Columns.Add("BitFlag", typeof(int));
	reportStyleTable.Columns.Add("CGCCode", typeof(string));
	reportStyleTable.Columns.Add("CertExpiration", typeof(DateTime));
	reportStyleTable.Columns.Add("CertificateID", typeof(string));
	reportStyleTable.Columns.Add("CertificateIsAllComp", typeof(bool));
	reportStyleTable.Columns.Add("CertificateIsSystem", typeof(bool));
	reportStyleTable.Columns.Add("Company", typeof(string));
	reportStyleTable.Columns.Add("CompanyList", typeof(string));
	reportStyleTable.Columns.Add("FormatCulture", typeof(string));
	reportStyleTable.Columns.Add("HasBAQOrEI", typeof(bool));
	reportStyleTable.Columns.Add("IsBAQReport", typeof(bool));
	reportStyleTable.Columns.Add("LangNameID", typeof(string));
	reportStyleTable.Columns.Add("LangNameIDDescription", typeof(string));
	reportStyleTable.Columns.Add("OutputEDI", typeof(string));
	reportStyleTable.Columns.Add("OutputLocation", typeof(string));
	reportStyleTable.Columns.Add("PrintProgram", typeof(string));
	reportStyleTable.Columns.Add("PrintProgramOptions", typeof(string));
	reportStyleTable.Columns.Add("ReportID", typeof(string));
	reportStyleTable.Columns.Add("ReportRptDescription", typeof(string));
	reportStyleTable.Columns.Add("RequireSubmissionID", typeof(bool));
	reportStyleTable.Columns.Add("RoutingRuleEnabled", typeof(bool));
	reportStyleTable.Columns.Add("RowMod", typeof(string));
	reportStyleTable.Columns.Add("RptCriteriaSetID", typeof(string));
	reportStyleTable.Columns.Add("RptDefID", typeof(string));
	reportStyleTable.Columns.Add("RptDefRptDescription", typeof(string));
	reportStyleTable.Columns.Add("RptDefSystemFlag", typeof(bool));
	reportStyleTable.Columns.Add("RptStructuredOutputDefID", typeof(string));
	reportStyleTable.Columns.Add("RptTypeID", typeof(string));
	reportStyleTable.Columns.Add("RptTypeRptTypeDescription", typeof(string));
	reportStyleTable.Columns.Add("SSRSRenderFormat", typeof(string));
	reportStyleTable.Columns.Add("ServerNum", typeof(int));
	reportStyleTable.Columns.Add("Status", typeof(int));
	reportStyleTable.Columns.Add("StatusCode", typeof(int));
	reportStyleTable.Columns.Add("StatusDesc", typeof(string));
	reportStyleTable.Columns.Add("StatusMessage", typeof(string));
	reportStyleTable.Columns.Add("StructuredOutputAlgorithm", typeof(string));
	reportStyleTable.Columns.Add("StructuredOutputCertificateExpirationDate", typeof(DateTime));
	reportStyleTable.Columns.Add("StructuredOutputCertificateID", typeof(string));
	reportStyleTable.Columns.Add("StructuredOutputCertificateIsAllComp", typeof(bool));
	reportStyleTable.Columns.Add("StructuredOutputCertificateIsSystem", typeof(bool));
	reportStyleTable.Columns.Add("StructuredOutputEnabled", typeof(bool));
	reportStyleTable.Columns.Add("StyleDescription", typeof(string));
	reportStyleTable.Columns.Add("StyleNum", typeof(int));
	reportStyleTable.Columns.Add("SysRevID", typeof(int));
	reportStyleTable.Columns.Add("SysRowID", typeof(string));
	reportStyleTable.Columns.Add("SystemFlag", typeof(bool));

	// Create a row and populate it
	var row = reportStyleTable.NewRow();

	row["AllowGenerateEDI"] = false;
	row["AllowResetAfterSubmit"] = false;
	row["BitFlag"] = 0;
	row["CGCCode"] = "";
	row["CertExpiration"] = DBNull.Value;
	row["CertificateID"] = DBNull.Value;
	row["CertificateIsAllComp"] = false;
	row["CertificateIsSystem"] = false;
	row["Company"] = ""; //correct company id added here... removed for forum post
	row["CompanyList"] = ""; //correct company id added here... removed for forum post
	row["FormatCulture"] = "";
	row["HasBAQOrEI"] = false;
	row["IsBAQReport"] = false;
	row["LangNameID"] = "";
	row["LangNameIDDescription"] = "";
	row["OutputEDI"] = "";
	row["OutputLocation"] = "Database";
	row["PrintProgram"] = "reports/CustomReports/LCI_Agd_Rcvable";
	row["PrintProgramOptions"] = "";
	row["ReportID"] = "LCI_Agd_Rcv_01";
	row["ReportRptDescription"] = "";
	row["RequireSubmissionID"] = false;
	row["RoutingRuleEnabled"] = false;
	row["RowMod"] = "";
	row["RptCriteriaSetID"] = DBNull.Value;
	row["RptDefID"] = "LCI_Agd_Rcv_01";
	row["RptDefRptDescription"] = "";
	row["RptDefSystemFlag"] = false;
	row["RptStructuredOutputDefID"] = DBNull.Value;
	row["RptTypeID"] = "SSRS";
	row["RptTypeRptTypeDescription"] = "";
	row["SSRSRenderFormat"] = "PDF";
	row["ServerNum"] = 0;
	row["Status"] = 0;
	row["StatusCode"] = 0;
	row["StatusDesc"] = "";
	row["StatusMessage"] = "";
	row["StructuredOutputAlgorithm"] = DBNull.Value;
	row["StructuredOutputCertificateExpirationDate"] = DBNull.Value;
	row["StructuredOutputCertificateID"] = DBNull.Value;
	row["StructuredOutputCertificateIsAllComp"] = false;
	row["StructuredOutputCertificateIsSystem"] = false;
	row["StructuredOutputEnabled"] = false;
	row["StyleDescription"] = "Standard - SSRS";
	row["StyleNum"] = 1;
	row["SysRevID"] = 212513422;
	row["SysRowID"] = "ebfabee5-70a2-477e-b6b2-b40a31bdaa09";
	row["SystemFlag"] = false;

	// Add row to table
	reportStyleTable.Rows.Add(row);

    myds.Tables.Add(reportStyleTable);

    // ------------------------
    // extensionTables (empty)
    // ------------------------
    myds.Tables.Add("extensionTables");
	
	string agentID = "";
	int agentSchedNum = 0;
	int agentTaskNum = 0;
	string maintProgram = "Ice.UIRpt.LCI_Agd_Rcv_01";
	
	this.CallService<Ice.Contracts.BAQReportSvcContract>(reportService =>
	{
		reportService.TransformAndSubmit(
			myds,
			agentID,
			agentSchedNum,
			agentTaskNum,
			maintProgram
		);
	});

} catch (Exception ex) {
    debug = ex.ToString();
    if (ex.InnerException != null)
        innerdebug = ex.InnerException.ToString();
}

Any thoughts on this very much appreciated :slight_smile:

Oh you poor soul.

Hey Kevin, any idea how to go about passing a Filter to the BAQ Report in these examples? Made a simple test report that dumps out all of our Inactive Vendors information with Vendor ID as an optional filter. My function generates the report fine, just can’t seem to modify the XML in a way that will actually filter and return a single Vendor.

XML string (assigned to baqParams.Filter1) with no filtering:

{
  "xmlResp": "<NewDataSet>\r\n  <BAQReport>\r\n    <Company />\r\n    <BAQRptID>ReportFunction</BAQRptID>\r\n    <Description>Test for executing BAQ report from a function</Description>\r\n    <ReportTitle />\r\n    <FormTitle>BAQ Report Function Testing</FormTitle>\r\n    <ExportID>ReportFunctionTest</ExportID>\r\n    <SystemFlag>false</SystemFlag>\r\n    <Completed>false</Completed>\r\n    <GlobalReport>false</GlobalReport>\r\n    <IsCrystalReport>false</IsCrystalReport>\r\n    <ReportID>ReportFunction</ReportID>\r\n    <CrystalReportName />\r\n    <CGCCode />\r\n    <SSRSReportName>ReportFunction.rdl</SSRSReportName>\r\n    <SysRevID>900348189</SysRevID>\r\n    <SysRowID>30ace856-a0b3-418e-9819-886d2f87872b</SysRowID>\r\n    <TempRowID />\r\n    <BitFlag>0</BitFlag>\r\n    <RowMod />\r\n  </BAQReport>\r\n  <BAQRptFilter>\r\n    <Company />\r\n    <BAQRptID>ReportFunction</BAQRptID>\r\n    <DataTableID>Vendor</DataTableID>\r\n    <FieldName>VendorID</FieldName>\r\n    <AdapterName>VendorAdapter</AdapterName>\r\n    <Seq>1</Seq>\r\n    <LookupField>VendorID</LookupField>\r\n    <FilterLabel>Supplier ID</FilterLabel>\r\n    <TabLabel>Supplier ID</TabLabel>\r\n    <DisplayName>Vendor_VendorID</DisplayName>\r\n    <EpiGuid>29d89579-6ce4-4d56-adfd-2cf395b0269c</EpiGuid>\r\n    <IsVisible>false</IsVisible>\r\n    <FilterField />\r\n    <SystemFlag>false</SystemFlag>\r\n    <DispOrder>0</DispOrder>\r\n    <DataType>nvarchar</DataType>\r\n    <SysRevID>900358604</SysRevID>\r\n    <SysRowID>e0eeb5b5-39af-4524-a9de-0d5a981549f0</SysRowID>\r\n    <TempRowID />\r\n    <FilterValue />\r\n    <BitFlag>0</BitFlag>\r\n    <RowMod />\r\n  </BAQRptFilter>\r\n</NewDataSet>"
}

The magic line I thought would do the trick:

xmlString = xmlString.Replace("<FilterValue />", $"<FilterValue>{vendorID}</FilterValue>");

XML after modification:

{
  "xmlResp": "<NewDataSet>\r\n  <BAQReport>\r\n    <Company />\r\n    <BAQRptID>ReportFunction</BAQRptID>\r\n    <Description>Test for executing BAQ report from a function</Description>\r\n    <ReportTitle />\r\n    <FormTitle>BAQ Report Function Testing</FormTitle>\r\n    <ExportID>ReportFunctionTest</ExportID>\r\n    <SystemFlag>false</SystemFlag>\r\n    <Completed>false</Completed>\r\n    <GlobalReport>false</GlobalReport>\r\n    <IsCrystalReport>false</IsCrystalReport>\r\n    <ReportID>ReportFunction</ReportID>\r\n    <CrystalReportName />\r\n    <CGCCode />\r\n    <SSRSReportName>ReportFunction.rdl</SSRSReportName>\r\n    <SysRevID>900348189</SysRevID>\r\n    <SysRowID>30ace856-a0b3-418e-9819-886d2f87872b</SysRowID>\r\n    <TempRowID />\r\n    <BitFlag>0</BitFlag>\r\n    <RowMod />\r\n  </BAQReport>\r\n  <BAQRptFilter>\r\n    <Company />\r\n    <BAQRptID>ReportFunction</BAQRptID>\r\n    <DataTableID>Vendor</DataTableID>\r\n    <FieldName>VendorID</FieldName>\r\n    <AdapterName>VendorAdapter</AdapterName>\r\n    <Seq>1</Seq>\r\n    <LookupField>VendorID</LookupField>\r\n    <FilterLabel>Supplier ID</FilterLabel>\r\n    <TabLabel>Supplier ID</TabLabel>\r\n    <DisplayName>Vendor_VendorID</DisplayName>\r\n    <EpiGuid>29d89579-6ce4-4d56-adfd-2cf395b0269c</EpiGuid>\r\n    <IsVisible>false</IsVisible>\r\n    <FilterField />\r\n    <SystemFlag>false</SystemFlag>\r\n    <DispOrder>0</DispOrder>\r\n    <DataType>nvarchar</DataType>\r\n    <SysRevID>900358604</SysRevID>\r\n    <SysRowID>e0eeb5b5-39af-4524-a9de-0d5a981549f0</SysRowID>\r\n    <TempRowID />\r\n    <FilterValue>1325</FilterValue>\r\n    <BitFlag>0</BitFlag>\r\n    <RowMod />\r\n  </BAQRptFilter>\r\n</NewDataSet>"
}

But still getting the same report with all Vendors. Was attempting to follow @kve ā€˜s code example here but it looks like this might be different as this is a modification within BAQRptFilter instead of BAQRptOptionFld?

Tried modifying FilterField to different values as well (ā€œVendor_VendorIDā€, ā€œVendorIDā€, etc) alongside FilterValue , still no luck. What am I missing here?

I think FilterField might be your issue. It looks like you need to indicate that the VendorNum is the filter field:

This report uses VendorID for the filter:

Tried the following XML tags with no luck:

<FilterField>VendorID</FilterField>
<FilterField>Vendor_VendorID</FilterField>
<FilterField>Supplier ID</FilterField>

Copilot even convinced me to try adding VendorID as a parameter to the BAQ and adding

<BAQRptParameter>  
  <BAQRptID>ReportFunction</BAQRptID>  
  <ParameterID>VendorID</ParameterID>  
  <ParameterValue>{vendorID}</ParameterValue>
</BAQRptParameter>

between the <NewDataSet> tags, still no luck. Guess I could use VendorID as an ā€œOption Fieldā€ and go the route you did, but still feel like there’s something small I’m missing to get the Filters to work instead

Well, doesn’t seem like I can get Option Fields to work either! Added an Option for VendorID on the BAQ Report which works fine:

Used xmlString = xmlString.Replace(ā€œ<FieldValue />ā€, $ā€œ<FieldValue>{vendorID}</FieldValueā€); to set that value in my function.

Full XML after the report is generated, which shows all inactive vendors instead of only 1325 as expected (**Removed the changes within the BAQRptFilter tag to test Option Fields alone):

<NewDataSet>
    <BAQReport>
        <Company />
        <BAQRptID>ReportFunction</BAQRptID>
        <Description>Test for executing BAQ report from a function</Description>
        <ReportTitle />
        <FormTitle>BAQ Report Function Testing</FormTitle>
        <ExportID>ReportFunctionTest</ExportID>
        <SystemFlag>false</SystemFlag>
        <Completed>false</Completed>
        <GlobalReport>false</GlobalReport>
        <IsCrystalReport>false</IsCrystalReport>
        <ReportID>ReportFunction</ReportID>
        <CrystalReportName />
        <CGCCode />
        <SSRSReportName>ReportFunction.rdl</SSRSReportName>
        <SysRevID>900348189</SysRevID>
        <SysRowID>30ace856-a0b3-418e-9819-886d2f87872b</SysRowID>
        <TempRowID />
        <BitFlag>0</BitFlag>
        <RowMod />
    </BAQReport>
    <BAQRptOptionFld>
        <Company />
        <BAQRptID>ReportFunction</BAQRptID>
        <DataTableID>Vendor</DataTableID>
        <FieldName>VendorID</FieldName>
        <CompOp>=</CompOp>
        <Seq>1</Seq>
        <DefaultValue />
        <FieldLabel>Supplier ID</FieldLabel>
        <DisplayName>Vendor_VendorID</DisplayName>
        <FieldFormat>x(8)</FieldFormat>
        <EpiGuid>b5e270f0-a054-4e3c-a226-da07a0249200</EpiGuid>
        <IsVisible>false</IsVisible>
        <DataType>nvarchar</DataType>
        <SystemFlag>false</SystemFlag>
        <DispOrder>0</DispOrder>
        <SysRevID>900364887</SysRevID>
        <SysRowID>3a3fabbe-f5b4-4bcc-9667-9a7c5008dc10</SysRowID>
        <FieldValue>1325</FieldValue>
        <TempRowID />
        <BitFlag>0</BitFlag>
        <RowMod />
    </BAQRptOptionFld>
    <BAQRptFilter>
        <Company />
        <BAQRptID>ReportFunction</BAQRptID>
        <DataTableID>Vendor</DataTableID>
        <FieldName>VendorID</FieldName>
        <AdapterName>VendorAdapter</AdapterName>
        <Seq>1</Seq>
        <LookupField>VendorID</LookupField>
        <FilterLabel>Supplier ID</FilterLabel>
        <TabLabel>Supplier ID</TabLabel>
        <DisplayName>Vendor_VendorID</DisplayName>
        <EpiGuid>29d89579-6ce4-4d56-adfd-2cf395b0269c</EpiGuid>
        <IsVisible>false</IsVisible>
        <FilterField />
        <SystemFlag>false</SystemFlag>
        <DispOrder>0</DispOrder>
        <DataType>nvarchar</DataType>
        <SysRevID>900358604</SysRevID>
        <SysRowID>e0eeb5b5-39af-4524-a9de-0d5a981549f0</SysRowID>
        <TempRowID />
        <FilterValue />
        <BitFlag>0</BitFlag>
        <RowMod />
    </BAQRptFilter>
</NewDataSet>

So strange..

Solved! Thanks to @subodh.raikar ā€˜s comment on this original thread..

I was converting the DynamicReportDataset output to System.Data.DataSet using Ice.DatasetAdapter.ConvertToGenericDataset() and then using the WriteXml() method to get the xml for the ā€˜Filter1’ field. Because of that, the root element I got was ā€˜NewDataSet’.

Added to my function:

// Change root XML element from <NewDataSet> back to <DynamicReportDataSet>
    xmlString = xmlString.Replace("<NewDataSet>", "<DynamicReportDataSet xmlns=\"http://www.epicor.com/Ice/300/BO/DynamicReport/DynamicReport\">");
    xmlString = xmlString.Replace("</NewDataSet>", "</DynamicReportDataSet>");
    
    // Set the Filter Field name and Value 
    xmlString = xmlString.Replace("<FilterField />", $"<FilterField>Vendor_VendorID</FilterField>");
    xmlString = xmlString.Replace("<FieldValue />", $"<FieldValue>{vendorID}</FieldValue>");

Now able to filter using both ā€œOption Fieldā€ and ā€œFilterā€ BAQ Report fields. Thank y’all for the help :saluting_face: