No items found.

Building queries with fetchmode property in AX 2012

static void custTableSelect(Args _args)

{

   CustTable   custTable;

   CustGroup   custGroup;

   DlvTerm     dlvTerm;

   #define.custGroup('Net30')

   #define.dlvTerm(LogisticsLocationRoleType::None)

   while select custTable

       join custGroup

           where custGroup.CustGroup == custTable.CustGroup

              && custGroup.PaymTermId == #custGroup

       join dlvTerm

           where dlvTerm.Code == custTable.DlvTerm

              && dlvTerm.TaxLocationRole == #dlvTerm

   {

       info(custTable.AccountNum);

   }

}

We can use standard QueryBuildDataSource classes:

static void custTableQuery(Args _args)

{

   CustTable               custTable;

   QueryBuildDataSource    dsCustTable, dsCustGroup, dsDlvTerm;

   Query                   query = new Query();

   QueryRun                queryRun;

   #define.custGroup('Net30')

   #define.dlvTerm(LogisticsLocationRoleType::None)

   dsCustTable = query.addDataSource(tableNum(CustTable));

   dsCustGroup = dsCustTable.addDataSource(tableNum(CustGroup));

   dsCustGroup.addLink(fieldNum(CustTable, CustGroup), fieldNum(CustGroup, CustGroup));

   dsCustGroup.addRange(fieldNum(CustGroup, PaymTermId)).value(#custGroup);

   dsDlvTerm = dsCustTable.addDataSource(tableNum(dlvTerm));

   dsDlvTerm.addLink(fieldNum(CustTable, DlvTerm), fieldNum(DlvTerm, Code));

   dsDlvTerm.addRange(fieldNum(dlvTerm, TaxLocationRole)).value(queryValue(#dlvTerm));

   queryRun = new queryRun(query);

   while (queryRun.next())

   {

      custTable =  queryRun.get(tableNum(custTable));

      info(custTable.AccountNum);

   }

}

The problem is that above code will not work properly. The built queries will be separated, not joined. To make it work as expected we have to use FetchMode property for QueryBuildDataSource. By default QueryBuildDataSource has property FetchMode == QueryFetchMode::One2Many. We need to set this property to FetchMode == QueryFetchMode::One2One. See below:

static void custTableQuery(Args _args)

{

   dsCustGroup = dsCustTable.addDataSource(tableNum(CustGroup));

   dsCustGroup.addLink(fieldNum(CustTable, CustGroup), fieldNum(CustGroup, CustGroup));

   dsCustGroup.addRange(fieldNum(CustGroup, PaymTermId)).value(#custGroup);

   dsCustGroup.fetchMode(QueryFetchMode::One2One);

   dsDlvTerm = dsCustTable.addDataSource(tableNum(dlvTerm));

   dsDlvTerm.addLink(fieldNum(CustTable, DlvTerm), fieldNum(DlvTerm, Code));

   dsDlvTerm.addRange(fieldNum(dlvTerm, TaxLocationRole)).value(queryValue(#dlvTerm));

   dsCustGroup.fetchMode(QueryFetchMode::One2One);

}

Zobacz inne

Dynamics 365 F&O

System finansowo księgowy dla firmy: kiedy przejść na Dynamics 365 Finance

Czytaj artykuł
Text Link
Hurtownia Danych 2.0.

Excel jako hurtownia danych. 6 ukrytych kosztów, które płacisz co miesiąc.

Czytaj artykuł
Text Link
Dynamics 365 F&O

Indeksy zjadają 70–80% Twojej bazy D365 F&O i co piąty z nich jest nieużywany

Czytaj artykuł
Text Link
Wróć do wszystkich

Porozmawiajmy o Twoim projekcie

Napisz, z czym przychodzisz: wdrożenie, migracja, rozwój systemu albo pytanie, na które szukasz odpowiedzi. Wracamy z konkretną propozycją następnego kroku, nie z prezentacją handlową.

Dziękujemy za wiadomość!
Oops! Something went wrong while submitting the form.
Microsoft AI Builder
Microsoft Copilot Studio
No items found.
No items found.
No items found.