Microsoft_MVP_banner

The data source is not embedded within a (parent) data source.

This error comes when you try to add new datasource to the top of the query. QueryBuildDataSource qbds; qbds = query.addDataSource(tableNum(newTable)); // This is wrong You should add new table to the Main datasource instead.query.dataSourceTable(tableNum(newTable)).addDataSource(..) // This is correct

AOT and X++ queries and ranges in AX 2012

Let’s say we have a query in AOT QueriesProjTable And now we want to add more datasources into this query’s parent datasource (ProjTable) and some ranges etc. Let’s assume we have a class (SRS report data provider class or a dialog class) which is using above query and during processing in this class we want to add more datasources and so on. I created a SRS report data provider class for this example; Class declaration [     SRSReportQueryAttribute (querystr(MarginAnalysisReportV2Sw)),     SRSReportParameterAttribute(classstr(MarginAnalysisReportContractV2Sw)) ] public class MarginAnalysisReportDPV2Sw extends SRSReportDataProviderBase {     Query                       query;     TempTable               tempTable;     RecordInsertList       recordInsertListTmpTable;     ProjTable                  projTable;     TransDate                 AsOfDate; } ProcessReport [SysEntryPointAttribute] public void processReport() {     // Query variable declaration     QueryRun                            queryRun;     // Contract class declaration     MarginAnalysisReportContractV2Sw    dataContract;     // Contract class parameters     ProjDateCriteriaSw                  dateType;     // Views declaration     ProjTableDateViewSw                 projTableDateViewSw;     // This will retrieve the above ProjTable query     // Select * from ProjTable     query = this.parmQuery();     dataContract  = this.parmDataContract();     dateType        = dataContract.parmDateType();     asOfDate        = dataContract.parmAsOfDate();     this.addParameterRanges();     queryRun = new QueryRun(query);     while(queryRun.next())     {         projTable = queryRun.get(tablenum(ProjTable));         this.insertTmpTable(ProjTable);     } } addParameterRanges() Method private void addParameterRanges() {     QueryBuildDataSource    qbds1;     QueryBuildRange            qbr1; // add ProjTableDate table into query’s parent datasource projtable qbds1= query.dataSourceTable(tableNum(projTable)).addDataSource(tableNum(ProjTableDate)); // defining relation based on ProjId qbds1.addLink(fieldNum(ProjTable, ProjId), fieldNum(ProjTableDate, ProjId)); // defining join mode qbds1.joinMode(JoinMode::ExistsJoin); // adding range on ActualEndDate field of ProjTableDate table // setting value <= asOfDate which is considered as per date qbds1.addRange(fieldNum(ProjTableDate,ActualEndDate)).value(queryRange(dateNull(), asOfDate)); } Resultant X++ Query SELECT * FROM ProjTable(ProjTable)  EXISTS JOIN * FROM ProjTableDateViewSw(ProjTableDateViewSw_1)  WHERE ProjTable.ProjId = ProjTableDateViewSw.ProjId AND        ((ActualEndDate<={ts ‘2015-05-14 00:00:00.000’})) Adding OR and AND in query QueryBuildRange                 qbr; qbr = query.dataSourceTable(tableNum(Table)).addRange(fieldNum(Table, TransDate)); qbr.value(strFmt(‘((%1 != %2) || (%3 == %4))’,                       fieldStr(Table, ModelId),                       queryvalue(“Latest”),                       fieldStr(Table, TransDate),                       asOfDate                       )); qbr.value(strFmt(‘((%1 != %2) && (%3 == %4))’,                       fieldStr(Table, ModelId),                       queryvalue(“Latest”),                       fieldStr(Table, TransDate),                       asOfDate                       )); Using enum value in query as a range qbr.value(strFmt(‘(Status == %1)’, any2int(ProjStatus::active))); Check modifiedDate value of the table qbr.value(strFmt(‘(ModifiedDate > ProjTable.ModifiedDate)’)); Using wildcards in query You can use LIKE keyword for wildcards in ranges qbr.value(strFmt(‘(ProjName LIKE “*Builder*”)’));

FaisalFareed@2025. All rights reserved

Design by T3chDesigns