DataSource findRecord performance issue

SalesTable_ds.findRecord(cursor);

Is running on client side and to find the record it have to go though all records one by one starting from the first and ends when it finds correct record. Which is something like table scan in SQL but much more worse. It gives a lot of chattiness and a lot of data transferred between Client and AOS.

There is what you can use insted:

element.args().lookupField(fieldNum(SalesTable, SalesId));
element.args().lookupValue(queryValue(cursor.SalesId));
SalesTable_ds.executeQuery();

// Or
SalesTable_ds.research(true);
For dictionaries tables like CustGroup you will never have performance issue with findRecord datasource method. As all required records already on the client.

In D365  F&SCM findRecord and findValue are deprecated and the following DB will be shown:
BPDeprecatedDataSourceMethod: The "findRecord" data source method has been deprecated and should not be used.
Replacement:
findRecord replace with positionToRecord
findValue with positionToRecordByValue

New APIs do not work in some cases, most notably with Temp tables and Views. The framework will throw an exception in those cases. If replacing with new APIs is not possible, recommended replacement is to call element.args(). lookupRecord(recordToFind) Followed by FormDataSource.research(false);


 

Search

About

DaxOnline.org is free platform that allows you to quickly store and reuse snippets, notes, articles related to Dynamics AX.

Authors are allowed to set their own AdSense units and "buy me a coffee" link.
Join us.

Blog Tags