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; }
Hi Girish,
this sample code worked for my scenario .
Thanks
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())); } }
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.
André Arnaud de Cal...
292,074
Super User 2025 Season 1
Martin Dráb
230,900
Most Valuable Professional
nmaenpaa
101,156