Not displaying data in SSRS Report in d365FO

I’m experiencing difficulties viewing data in the frontend of my SSRS report, which is designed to generate information based on custaccount and custgroupId. The report should include fields such as transaction type, transaction amount, account transaction, and report transaction. However, I’m encountering issues with data display.

Below is my DP class

 [
 SRSReportQueryAttribute(querystr(SIN_CustTransDetails)),
SRSReportParameterAttribute(classstr(SIN_TransContractClass2))
]
   public class SIN_TransDPclass2 extends SRSReportDataProviderBase
  {
SIN_TransHeader     transHeader;
SIN_TransLine       transLine;
CustTable           custTable;
CustTrans           custTrans;
CustGroup           custGroup;

CompanyInfo         companyInfo;
List                custAccount;
List                custGroupId;

TransDate           fromDate;
TransDate           toDate;


[
    SRSReportDataSetAttribute(tablestr(SIN_TransHeader))
]
public SIN_TransHeader getSIN_TransHeader()
{
    select * from transHeader;
    return transHeader;
}

[
    SRSReportDataSetAttribute(tablestr(SIN_TransLine))
]
public SIN_TransLine getSIN_TransLine()
{
    select * from transLine;
    return transLine;
}

/// <summary>
/// Creates and inserts a <c>TmpMCRARInvoice</c> buffer.
/// </summary>

public void processReport()
{
    Query                           query;
    QueryRun                        queryRun;
    QueryBuildRange                 qbRange;
    SIN_TransContractClass2         contract;
    CustAccount                     custAcc;
    contract = this.parmDataContract() as SIN_TransContractClass2;

    custAccount  = contract.parmCustAccount();
    custGroupId  = contract.parmCustGroupId();
    fromDate = contract.parmFromDate();
    toDate   = contract.parmToDate();

    str custAccountStr = this.listToString(custAccount, ",");
    str custGroupStr = this.listToString(custGroupId, ",");

    this.getCompanyInfo(custAcc);

    query = this.parmQuery();
    queryRun = new QueryRun(query);

    if(fromDate && toDate)
    {
        query.dataSourceTable(tableNum(CustTrans)).addRange(fieldNum(CustTrans,TransDate)).value(SysQuery::range(fromDate, todate));
    
    }

    // Initialize strings to store list elements as comma-separated values
    str custAccountListStr;
    str custGroupListStr;
    

    if (custGroupId != null)
    {
        qbRange = queryRun.query().dataSourceTable(tableNum(CustTrans)).addRange(fieldNum(CustTrans, AccountNum));
        qbRange.value(queryRange(fieldNum(CustTrans, AccountNum), custGroupId));
       
        while (queryRun.next())
        {
            custTable = queryRun.get(tableNum(CustTable));
            custTrans = queryRun.get(tableNum(CustTrans));
            transLine.TransType = custTrans.TransType;
            transLine.AmountTransaction = custTrans.AmountCur;
            transLine.AccountTransaction = custTrans.AmountMST;
            transLine.ReportTransaction = custTrans.ReportingCurrencyAmount;
            transLine.insert();
            custTrans = queryRun.get(tableNum(CustTrans));
        }

       
    }
}

public void getCompanyInfo(CustAccount custAcc)
{
    CompanyInfo = CompanyInfo::find();
    CustTable  = CustTable::find(custAcc);
    CustGroup = CustGroup::find(custGroup.CustGroup);
    transHeader.clear();
    transHeader.CompanyName = companyInfo.Name;
    transHeader.CompanyAddress = companyInfo.postalAddress().Address;
    transHeader.CompanyPhone = companyInfo.phone();
    transHeader.CompanyEmail = companyInfo.email();
    transHeader.CompanyLogo = CompanyImage::findByRecord(companyInfo).Image;
    transHeader.CustAccount = custTable.AccountNum;
    transHeader.CustomerName = custTable.Name();
    transHeader.CustGroupId = custGroup.CustGroup;
    transHeader.CustomerAddress = custTable.Address();
    transHeader.insert();
         
}

// Helper method to convert a list to a comma-separated string
private str listToString(List _list, str _delimiter)
{
    ListIterator    listIterator = new ListIterator(_list);
    str             result;

    while (listIterator.more())
    {
        result += listIterator.value();

        listIterator.next();

        if (listIterator.more())
        {
            result += _delimiter;
        }
    }

    return result;
}

}

I suspect you have no idea because you ignored my advice to debug your code.

I believe you’ll find that your query doesn’t return anything, so it’s no point in looking at the report, because it surely can’t show any data.

The bug is here:

qbRange.value(queryRange(fieldNum(CustTrans, AccountNum), custGroupId));

This code is trying to fetch account numbers higher that the field ID of AccountNum field and lower than a group ID, which makes no sense. Neither of is a customer account number.

what else should I use to retrieve the unique accountnum in custtrans table and custgroupId in custgroup table

I’ll assume that “to retrieve the unique accountnum in custtrans” actually means “to retrieve CustTrans records with AccountNum equal to the value of custAccount variable”. If you mean something else, you’ll need to explain your requirements to me.

Let me throw away all code irrelevant to the discussion. Notice how custAccount variable is used as the value of the range for AccountNum field.

public void processReport()
{
    SIN_TransContractClass2 contract = this.parmDataContract() as SIN_TransContractClass2;

    str custAccount  = contract.parmCustAccount();
    str custGroupId  = contract.parmCustGroupId();

    Query query = this.parmQuery();
    
    if (custGroupId)
    {
        QueryBuildRange accountNumRange = query.dataSourceTable(tableNum(CustTrans)).addRange(fieldNum(CustTrans, AccountNum));
        accountNumRange.value(queryValue(custAccount));
    
        QueryRun queryRun = new QueryRun(query);
    
        while (queryRun.next())
        {
            ...
        }
       
    }
}

Thank you for your help!