X++ QueryBuilder 嵌套结果
X++ QueryBuilder Nested Results
我有一个查询使用销售 Table 和销售线 table 作为查询的数据源(感谢所有提供帮助的人!)。在查询 运行 部分,如果销售订单附加了多个销售行,我如何循环销售行的结果?
static void TestQuery(Args _args)
{
SalesTable salesTable;
SalesLine salesLine;
QueryBuildRange querybuildrange;
utcDateTime mutcDateTime;
date mDate;
QueryRun queryrun = new QueryRun(new Query());
QueryBuildDataSource datasourceA = queryrun.query().addDataSource(tableNum(SalesTable));
QueryBuildDataSource datasourceB = datasourceA.addDataSource(tableNum(SalesLine));
mDate = str2Date("25/09/2016", 123);
mutcDateTime = DateTimeUtil::newDateTime(mDate,0);
querybuildrange = datasourceA.addRange(FieldNum(SalesTable, CreatedDateTime));
querybuildrange.value(strFmt('>%1', mutcDateTime));
datasourceB.relations(true); // Link on SalesId
datasourceB.joinMode(JoinMode::ExistsJoin);
info(datasourceA.toString()); // This is the full query
while (queryrun.next())
{
salesTable = queryrun.get(tableNum(SalesTable));
salesLine = queryrun.get(tableNum(SalesLine));
info(salesTable.SalesId);
info(salesline.Name);
}
}
当你需要使用 InnerJoin
时,你正在使用 ExistsJoins
。
更改此行
datasourceB.joinMode(JoinMode::ExistsJoin);
到
datasourceB.joinMode(JoinMode::InnerJoin);
此外,您可以使用 queryRun.changed(...)
方法来检查记录何时更改。像这样:
while (queryrun.next())
{
if (queryrun.changed(tableNum(SalesTable)))
{
salesTable = queryrun.get(tableNum(SalesTable));
}
salesLine = queryrun.get(tableNum(SalesLine));
info(salesTable.SalesId);
info(salesline.Name);
}
我有一个查询使用销售 Table 和销售线 table 作为查询的数据源(感谢所有提供帮助的人!)。在查询 运行 部分,如果销售订单附加了多个销售行,我如何循环销售行的结果?
static void TestQuery(Args _args)
{
SalesTable salesTable;
SalesLine salesLine;
QueryBuildRange querybuildrange;
utcDateTime mutcDateTime;
date mDate;
QueryRun queryrun = new QueryRun(new Query());
QueryBuildDataSource datasourceA = queryrun.query().addDataSource(tableNum(SalesTable));
QueryBuildDataSource datasourceB = datasourceA.addDataSource(tableNum(SalesLine));
mDate = str2Date("25/09/2016", 123);
mutcDateTime = DateTimeUtil::newDateTime(mDate,0);
querybuildrange = datasourceA.addRange(FieldNum(SalesTable, CreatedDateTime));
querybuildrange.value(strFmt('>%1', mutcDateTime));
datasourceB.relations(true); // Link on SalesId
datasourceB.joinMode(JoinMode::ExistsJoin);
info(datasourceA.toString()); // This is the full query
while (queryrun.next())
{
salesTable = queryrun.get(tableNum(SalesTable));
salesLine = queryrun.get(tableNum(SalesLine));
info(salesTable.SalesId);
info(salesline.Name);
}
}
当你需要使用 InnerJoin
时,你正在使用 ExistsJoins
。
更改此行
datasourceB.joinMode(JoinMode::ExistsJoin);
到
datasourceB.joinMode(JoinMode::InnerJoin);
此外,您可以使用 queryRun.changed(...)
方法来检查记录何时更改。像这样:
while (queryrun.next())
{
if (queryrun.changed(tableNum(SalesTable)))
{
salesTable = queryrun.get(tableNum(SalesTable));
}
salesLine = queryrun.get(tableNum(SalesLine));
info(salesTable.SalesId);
info(salesline.Name);
}