在AX编程最佳实践中,这是最好的方法:
何时使用它们中的每一个?
Jan*_*sen 10
首先,AX始终在内部使用查询,X ++选择被转换为查询构造调用,这些调用在运行时执行.查询在运行时转换为SQL,queryRun.next()
或者在第一个或datasource.executeQuery()
.因此使用一个或另一个没有性能差异.
表单也使用查询,通常它是为您自动构造的,因为属性AutoQuery
具有Yes默认值.您可以在executeQuery
方法中使用X ++ select ,但我会考虑这种不好的做法,因为用户没有可用的过滤器或排序选项.始终在表单中使用查询,更喜欢使用自动查询.如果需要,init
使用方法添加范围或排序this.queryBuildDatasource()
.唯一的例外是总是使用AOT查询的listpages.
在RunBase
类中更喜欢使用查询,因为用户可以选择更改查询.您可能会在内部循环中使用简单的X ++ select,但如果可能,请考虑将其包含在预构建的查询中.
否则,作为程序员的主要目标(除了解决问题之外)是最小化代码行数.
在AOT中定义的查询从零代码行开始,这些代码行对它们有利.因此,如果存在多个静态定义的范围,链接或复杂连接,请使用AOT查询.你无法击败:
QueryRun qr = new QueryRun(queryStr(MyQuery))
qr.query().dataSourceTable(tableNum(MyTable)).findRange(fieldNum(MyTable,MyField)).value('myValue');
Run Code Online (Sandbox Code Playgroud)
附:
Query q = new Query();
QueryRun qr = new QueryRun(q);
QueryBuildDataSource ds = q.addDataSource(tableNum(MyTable));
QueryBuildRange qbr = ds.addRange(fieldNum(MyTable,MyField));
qbr.value('myValue');
qbr.locked(true);
Run Code Online (Sandbox Code Playgroud)
因此,在静态情况下,更喜欢使用AOT查询,然后在需要时在运行时更改查询.另一方面,如果您的表仅在运行时已知,则不能使用AOT查询,也不能选择X ++,并且您需要在运行时构建查询.表浏览器就是一个很好的例子.
什么是X ++?
delete_from
,update_recordset
并且insert_recordset
会想到.