Hi guys, Today we see how to add data sources/ranges to query in D365Fo using x++.
Range creation:
SysQuery::findOrCreateRange('this.queryBuildDataSource()',
fieldNum(Mytable, Field)).value('Value');Example:
Query query = new Query();
query.addDataSource(tableNum(CustTable));
SysQuery::findOrCreateRange(query.dataSourceNo(1),
fieldNum(CustTable, CustGroup)).value('1001');
QueryRun qr = new QueryRun(query);
Info(qr.toString());
//Output : SELECT * FROM CustTable(CustTable_1) WHERE ((CustGroup = N'1001'))
info (qr.query().dataSourceNo(1).toString());
//Output : Query object db91850: SELECT * FROM CustTable(CustTable_1)
//WHERE ((CustGroup = N'1001'))----------------------------------------------------------------------------------
Adding to Datasource to query:
SysQuery::findOrCreateDataSource('Query', tableNum('Table'));
QueryBuildDataSource batchbQbds = SysQuery::findOrCreateDataSource('Query',
tableNum('Table'),//New table Id
tableNum('parent table'));//existing parent table Id
batchbQbds.relations(true);
batchbQbds.joinMode(JoinMode::ExistsJoin);Example:
Query query = new Query();
QueryBuildDataSource batchbQbds;
query.addDataSource(tableNum(CustTable));
batchbQbds = SysQuery::findOrCreateDataSource(query,
tableNum(CustGroup),//New table Id
tableNum(CustTable));//existing parent table Id
batchbQbds.relations(true);
batchbQbds.joinMode(JoinMode::ExistsJoin);
QueryRun qr = new QueryRun(query);
Info(qr.toString());
// Query object 19c57b50: SELECT * FROM CustTable(CustTable_1)
// EXISTS JOIN * FROM CustGroup(CustGroup_1)
// WHERE CustTable.CustGroup = CustGroup.CustGroup---------------------------------------------------------------------- Adding to Datasource name to query:
QueryBuildDataSource qbd = SysQuery::findOrCreateDataSourceByName(
'query',
'Data source name',// New table name
tableNum(Table),//Table Id
workerQbds.name(),// Parent datasource name
workerQbds.table());// Parent datasource Table Id
qbd.relations(true);
qbd.joinMode(JoinMode::InnerJoin);Example:
Query query = new Query();
QueryBuildDataSource batchbQbds = query.addDataSource(tableNum(CustTable));
QueryBuildDataSource qbd = SysQuery::findOrCreateDataSourceByName(
query,
'Test1',// New table name
tableNum(CustGroup),//Table Id
batchbQbds.name(),// Parent datasource name
batchbQbds.table());// Parent datasource Table Id
qbd.relations(true);
qbd.joinMode(JoinMode::InnerJoin);
QueryRun qr = new QueryRun(query);
// info (qr.query().dataSourceNo(1).toString());
Info (qr.toString());
//SELECT * FROM CustTable(CustTable_1)
//JOIN * FROM CustGroup(Test1) ON
//CustTable.CustGroup = CustGroup.CustGroup------------------------------------------------------------------
Return query as string:
Info(qr.toString());
//Output : SELECT * FROM CustTable(CustTable_1) WHERE ((CustGroup = N'1001'))
info (qr.query().dataSourceNo(1).toString());
//Output : Query object db91850: SELECT * FROM CustTable(CustTable_1)
//WHERE ((CustGroup = N'1001'))------------------------------------------------------------------------------
Total number of records available in query:
info(strFmt('Records - %1',SysQuery::countTotal(qr)));Total number of loops in query:
info(strFmt('Datasource - %1',SysQuery::countLoops(qr)));Keep Daxing!!
No comments:
Post a Comment