Skip to main content

Notifications

Finance | Project Operations, Human Resources, ...
Answered

Multi selection Lookup "Wrong Type Argument for function ".

(0) ShareShare
ReportReport
Posted on by 208

I have been developing a report for invoices in so . fetching data from Cust invoice jour Table . Added multi selection on order account from Cust invoice jour. I have debugged my code and got error in my Cust account parameter range .

My contract class code  and DP is attached is attached  below:

[SRSReportQueryAttribute(queryStr(SalesOrderInvoice)),
SRSReportParameterAttribute(classStr(SalesOrderInvoiceContract))
    ]
public class SalesOrderInvoiceDp extends SRSReportDataProviderBase
{
    SalesOrderInvoiceTmp     salesOrderInvoiceTmp;
    ListEnumerator           custAccountListIterator;
    InvoiceId                invoiceId;
    CustInvoiceJour          custInvoiceJour;
    LedgerJournalTrans       ledgerJournalTrans;
    InvoiceDate              invoiceDate;
    Bitmap                   CompanyImage;
    List                     _custAccount;
    CustAccount              custAccount;
    

  [ SRSReportDataSetAttribute(tableStr(SalesOrderInvoiceTmp))]
    public SalesOrderInvoiceTmp getsalesOrderInvoiceTmp()
    {
       
        select * from salesOrderInvoiceTmp;
        return        salesOrderInvoiceTmp;
    }

    public void processReport()
                                    
    {
        Query                       query;
        QueryRun                    queryRun;
        QueryBuildRange             qbrInvoiceId, qbrInvoiceDate, qbrCustAccount;
        QueryBuildDataSource        qbds;
        SalesOrderInvoiceContract   salesOrderInvoiceContract;
        CompanyInfo companyInfo     =  CompanyInfo::find();
        
       salesOrderInvoiceContract   = this.parmDataContract() as SalesOrderInvoiceContract ;
        invoiceId                   = salesOrderInvoiceContract.parminvoiceId();
        invoiceDate                 = salesOrderInvoiceContract.parmInvocieDate();
        _custAccount                = salesOrderInvoiceContract.parmcustAccount();

        query = new Query();
        //query =this.parmQuery();
        // Add CustInvoiceJour as a report data source in a query
        qbds = query.addDataSource(tableNum(CustInvoiceJour));
       

        if(invoiceId)
        {
            query.dataSourceTable(tableNum(CustInvoiceJour)).addRange(fieldNum(CustInvoiceJour, InvoiceId)).value(queryValue(invoiceId));
        }
        if(invoiceDate)
        {
            query.dataSourceTable(tableNum(CustInvoiceJour)).addRange(fieldNum(CustInvoiceJour, InvoiceDate)).value(queryValue(invoiceDate));
        }
        if(_custAccount)
        {
            query.dataSourceTable(tableNum(CustInvoiceJour)).addRange(fieldNum(CustInvoiceJour, OrderAccount)).value(queryValue(_custAccount));
        }
            query.clearGroupBy();
            query.dataSourceTable(tableNum(custInvoiceJour)).addGroupByField(fieldNum(custInvoiceJour, InvoiceId));
            query.dataSourceTable(tableNum(ledgerJournalTrans)).addSelectionField(fieldNum(ledgerJournaltrans, AmountCurCredit),SelectionField::Sum);

        if (_custAccount|| invoiceDate || invoiceId )
            {
          
                custAccountListIterator = _custAccount.getEnumerator();
                while (custAccountListIterator.moveNext())
                {
                    custAccount = custAccountListIterator.current();
                    //while select CustInvoiceJour
                    //where invoiceDate      == custInvoiceJour.InvoiceDate
                    //  &&   (invoiceId      == custInvoiceJour.InvoiceId     ||  invoiceId   == "")
                    //  &&   (custAccount    == custInvoiceJour.OrderAccount  ||  custAccount == "")
                    queryRun =new QueryRun(query);
                    while (queryRun.next())
                    {
                        custInvoiceJour                                 = queryRun.get(tableNum(custInvoiceJour));
                        ledgerJournalTrans                              = queryRun.get(tableNum(ledgerJournalTrans));
                        salesOrderInvoiceTmp.InvoiceId                  =  custInvoiceJour.InvoiceId;
                        salesOrderInvoiceTmp.InvoiceDate                =  custInvoiceJour.InvoiceDate;
                        salesOrderInvoiceTmp.CustAccount                =  custInvoiceJour.OrderAccount;
                        salesOrderInvoiceTmp.CustName                   =  custTable::find(salesOrderInvoiceTmp.CustAccount).name();
                        salesOrderInvoiceTmp.Nationality                =  custTable::find(salesOrderInvoiceTmp.CustAccount).countryName();
                        salesOrderInvoiceTmp.Phone                      =  custTable::find(salesOrderInvoiceTmp.CustAccount).phone();
                        salesOrderInvoiceTmp.Warehouse                  =  custInvoiceJour.inventLocationId;
                        salesOrderInvoiceTmp.InvocieAmount              =  LedgerJournalTrans.AmountCurCredit;;
                        salesOrderInvoiceTmp.CompanyImage               = CompanyImage::findByRecord(companyInfo).Image;
                        salesOrderInvoiceTmp.JournalPosted              =  LedgerJournalTable::find(salesOrderInvoiceTmp.InvoiceId).Posted;
                        salesOrderInvoiceTmp.PaymModeCash               =  ledgerJournalTrans.PaymMode;
                        if (salesOrderInvoiceTmp.JournalPosted == NoYes::Yes)
                        {
                            salesOrderInvoiceTmp.status = " Posted" ;
                        }
                        else
                        {
                            salesOrderInvoiceTmp.status = "Not posted";
                        }

                        salesOrderInvoiceTmp.insert();
                    }

                }

     
            }

    }

}

  [
       DataMemberAttribute,
        AifCollectionTypeAttribute('CustAccount', Types::String),
       SysOperationLabelAttribute(literalStr("Cust Account")),
       SysOperationDisplayOrderAttribute('3')
       
   ]

    public List parmcustAccount(List _custAccount = custAccount)
    {
        custAccount = _custAccount;

        return       custAccount;
    }

  • JJDunaid Profile Picture
    JJDunaid 208 on at
    RE: Multi selection Lookup "Wrong Type Argument for function ".

    Hi Girish,

    this sample code worked for my scenario .

    Thanks

  • Suggested answer
    Martin Dráb Profile Picture
    Martin Dráb 230,900 Most Valuable Professional on at
    RE: Multi selection Lookup "Wrong Type Argument for function ".

    queryValue() doesn't accept List objects as the parameter. I suggest you iterate the list and add a range for each value. Like this:

    private void filterCustomers(Query _query, List _custAccounts)
    {
        QueryBuildDataSource qbds = _query.dataSourceTable(tableNum(CustInvoiceJour));
        FieldId fieldId = fieldNum(CustInvoiceJour, OrderAccount);
    
        ListEnumerator enumerator = _custAccounts.getEnumerator();
        while (enumerator.moveNext())
        {
            qbds.addRange(fieldId).value(queryValue(enumerator.current()));
        }
        
    }

  • Verified answer
    GirishS Profile Picture
    GirishS 27,821 Super User 2024 Season 1 on at
    RE: Multi selection Lookup "Wrong Type Argument for function ".

    Hi Junaid,

    Seems CustAccount is List type - In that case you need to loop through the list and add add a range to it using queryRangeConcatenate.

    Refer to the below sample code.

    QueryBuildRange qbr;
    List custAccount;
    ListEnumerator custAccountEnumerator;
    custAccount = salesOrderInvoiceContract.parmCustAccount();
    if(_custAccount)
    {
        qbr = query.dataSourceTable(tableNum(CustInvoiceJour)).addRange(fieldNum(CustInvoiceJour, OrderAccount));
        custAccountEnumerator = custAccount.getEnumerator();
    
        while(custAccountEnumerator.moveNext())
        {
            qbr.value(queryRangeConcat(qbr.value(),custAccountEnumerator.current()));
    
        }
    }

    Thanks,

    Girish S.

Under review

Thank you for your reply! To ensure a great experience for everyone, your content is awaiting approval by our Community Managers. Please check back later.

Helpful resources

Quick Links

Announcing Our 2025 Season 1 Super Users!

A new season of Super Users has arrived, and we are so grateful for the daily…

Vahid Ghafarpour – Community Spotlight

We are excited to recognize Vahid Ghafarpour as our February 2025 Community…

Congratulations to the January Top 10 leaders!

Check out the January community rock stars...

Leaderboard

#1
André Arnaud de Calavon Profile Picture

André Arnaud de Cal... 292,074 Super User 2025 Season 1

#2
Martin Dráb Profile Picture

Martin Dráb 230,900 Most Valuable Professional

#3
nmaenpaa Profile Picture

nmaenpaa 101,156

Leaderboard

Product updates

Dynamics 365 release plans