When working with the Query framework in Dynamics 365 Finance & Operations (D365FO), you may sometimes need to apply the same filter conditions across different queries. Instead of manually duplicating ranges, you can use the SysQuery::mergeRanges() method to copy filters from one query to another.
Example
Query query, targetQuery;
QueryBuildDataSource qbds;
//Source query
query = new Query();
qbds = query.addDataSource(tableNum(SalesLine));
//Add InventDim
qbds = qbds.addDataSource(tableNum(InventDim));
qbds.addLink(fieldNum(SalesLine, InventDimId), fieldNum(InventDim, InventDimId));
qbds.joinMode(JoinMode::ExistsJoin);
qbds.addRange(fieldNum(InventDim, InventColorId)).value(queryValue("Black"));
qbds.addRange(fieldNum(InventDim, InventSizeId)).value(queryValue("XL"));
//Target Query
targetQuery = new Query();
qbds = targetQuery.addDataSource(tableNum(PurchLine));
//Add InventDim
qbds = qbds.addDataSource(tableNum(InventDim));
qbds.addLink(fieldNum(PurchLine, InventDimId), fieldNum(InventDim, InventDimId));
qbds.joinMode(JoinMode::ExistsJoin);
//Source query
Info(query.toString());
// SELECT * FROM SalesLine(SalesLine_1) EXISTS JOIN * FROM InventDim(InventDim_1)
// WHERE SalesLine.InventDimId = InventDim.inventDimId
// AND ((InventColorId = N'Black')) AND ((InventSizeId = N'XL'))
//Target query before merge
Info(targetQuery.toString());
// SELECT * FROM PurchLine(PurchLine_1) EXISTS JOIN * FROM InventDim(InventDim_1)
// WHERE PurchLine.InventDimId = InventDim.inventDimId
SysQuery::mergeRanges(targetQuery, query, 2);
//Target query After merge
Info(targetQuery.toString());
// SELECT * FROM PurchLine(PurchLine_1) EXISTS JOIN * FROM InventDim(InventDim_1)
// WHERE PurchLine.InventDimId = InventDim.inventDimId
// AND ((InventColorId = N'Black')) AND ((InventSizeId = N'XL'))