Skip to main content

Using Having function In Microsoft Dynamics AX

Hi,

Today I came across a requirement to use Having function In DAX X++ query .

Here is my Requirement ,
Need to find All the Products added into retail Catalogue, if any of the product more than one time then we need to send a message with that Product name.

Below is the query I used to satisfy my requirement.

 
    CatalogProductCategory      catalogProductCategory;

    CatalogProduct              catalogProduct;

    EcoResProduct               ecoresProduct;

    Query                       query = new Query();

    QueryBuildDataSource            productCategoryQuery,CatalogProductQuery,productQuery;

    QueryBuildRange             catalogProductRange;

    Queryrun                    queryRunUniquness;

 

 

 

    productCategoryQuery = Query.addDataSource(tableNum(CatalogProductCategory));

 

    CatalogProductQuery = productCategoryQuery.addDataSource(tableNum(CatalogProduct));

    CatalogProductQuery.addSelectionField(fieldNum(CatalogProduct,RECID));

    CatalogProductQuery.addSelectionField(fieldNum(CatalogProduct,PRODUCT));

    CatalogProductQuery.addGroupByField(fieldnum(CatalogProduct,RecId));

    CatalogProductQuery.addGroupByField(fieldnum(CatalogProduct,PRODUCT));

    CatalogProductQuery.relations(true);

    catalogProductRange = CatalogProductQuery.addRange(fieldNum(CatalogProduct,Catalog));

    catalogProductRange.value(queryValue(catalogId));

    productQuery = CatalogProductQuery.addDataSource(tableNum(EcoResProduct));

    productQuery.addSelectionField(fieldNum(EcoResProduct,DISPLAYPRODUCTNUMBER));

     productQuery.addGroupByField(fieldnum(EcoResProduct,DISPLAYPRODUCTNUMBER));

    productQuery.relations(true);

 

    query.addHavingFilter(productCategoryQuery, fieldStr(CatalogProduct, RecId), AggregateFunction::Count).value('>1');

    //query.

    queryRunUniquness = new QueryRun(query);

 

    while(queryRunUniquness.next())

    {

        ret             = false;

        catalogProduct = queryRunUniquness.get(tableNum(CatalogProduct));

        EcoResProduct = queryRunUniquness.get(tableNum(EcoResProduct));

        this.populateValidationInfo(ETK_RetailValidationType::Product,catalogProduct.RecId,

         strFmt("Product : %1 exists in more than one node", EcoResProduct.DisplayProductNumber));

        //this.parmcatalogInternalOrg(5637144579);

    }

 

Comments

Popular posts from this blog

Form Auto refresh in D365 fo

Here I will explain one of the requirements I came across to refresh from automatically without User interaction.  Note: Make sure we do have all the handlers to stop UIrefreshing after certain hours of execution, else it causes the system to slow down after a certain time of continuous usage of this UI in the below example to overcome this case we use to check session login time and stopping form to refresh after certain hours of execution. Recommended to use this on pages that hold less data or smaller data sets. - NoofSeconds .value() is an integer control on UI that allows the user to choose a value.( best to fix a value like 5 seconds or a Minimum value to avoid unnecessary executions) Create a new form method and create as of below. void refreshFormWithTimeout (AsyncTaskResult _result)     {         System.Exception ex;         try         {              if(!element.closed...

SQL script to Fetching Tables list holding more data

  There may be times when we need to restore a database from a non-production or production environment for troubleshooting purposes, and we may encounter a DB size issue or need to know a list of tables with large amounts of data in order to enable purging them. This query returns a list of tables that contain large amounts of data in sequential order.  Query to Execute in SQL SELECT s.Name AS SchemaName             ,t.Name AS TableName             ,p.rows AS RowCounts             ,CAST(ROUND((SUM(a.used_pages) / 128.00), 2) AS NUMERIC(36, 2)) AS Used_MB             ,CAST(ROUND((SUM(a.total_pages) - SUM(a.used_pages)) / 128.00, 2) AS NUMERIC(36, 2)) AS Unused_MB             ,CAST(ROUND((SUM(a.total_pages) ...

CSV failing to load Staging in D365 FO (The data value violates integrity constraints)

  There are many ways to implement integration with Dynamics 365 for Finance and Operations. The file-based approach is probably the oldest and most commonly used integration type. Using this approach, an external system and D365FO send messages by reading/writing files into some shared network folder. It has the following advantages: Very clear responsibility (you either have a file in the correct folder or not); It is easy to troubleshoot (you can view the file, can modify it, etc..); There are a few reasons behind failing files(CSV) to import before staging in the DMF process.   Primary Index at staging table  This is the most common issue we will reason behind failing data behind staging, to fix this issue either make sure we have corrected our import data based on the Table index structure we designed to import data or modify Index as per the incoming XML file.   File format issues  The Other reason could be due to the file having incorrect/ in proper d...