Tuesday 9 October 2018

Update Product numbers for Released and Product Master

In one of my projects, there was a requirement for bulk renaming the released products and the product master. Luckily, the numbers for both released and master were kept the same for me to filter on the PKs conveniently. Used the code below to achieve that.

static void RenameInvenTableProdsPK(Args _args)
{
    InventTable inventTable;
    str oldDisplayNumber,newDisplayNumber;
    int iCount;
    CommaIo file;
    ;
    file = new CommaIo(@"\\XXXXX\file.csv","W");
    While select ItemId from InventTable where inventTable.ItemId like 'B4*'
    {
        try
        {
            oldDisplayNumber = inventTable.ItemId;
            newdisplayNumber = "O_"+inventTable.ItemId;
            inventTable.ItemId = newdisplayNumber;
            inventTable.renamePrimaryKey(); //old method of product renaming
           
            //using the service to rename product master
            EcoResProductNumberRenameService::newFromProduct(
            EcoResProduct::findByProductNumber(oldDisplayNumber).RecId,
            oldDisplayNumber,
            newdisplayNumber,NoYes::Yes).rename(); //one of the attributes allows us to include product variants in the renaming process
            iCount++;
    }
    
    catch{
        file.write(oldDisplayNumber);
        continue;
    }
    }
   info(strFmt("Done - %1",iCount));  
}


Tuesday 2 October 2018

Dynamics AX R3 | List of all tables with details

In one of the recent projects, I had to pull the details of all the tables with their current record counts and if they are the part of any country specific localisation. I used the following code to pull those details. Nice simple code got the job done well.
static void GetTablesDetails(Args _args)

{
    #AOT
    #File
    #Properties

    CommaIo csvIO;
    str description;
    TreeNode tables;
    int total, counter;
  ;

    csvIO = new CommaIo(@"c:\AX_tables_details.csv", #IO_WRITE);
    csvIO.write("No","TableName""ID","LegacyId","SaveDataPerCompany","TableGroup","FormRef","CountryRegionCodes","RecordsCount");
    tables = TreeNode::findNode(@"\Data Dictionary\Tables");
    total = tables.AOTchildNodeCount();
    tables = tables.AOTfirstChild();

    for(counter = 1; counter <= total; counter++)
    {
       
        csvIO.write(counter,tables.AOTgetProperty("Name"),tables.AOTgetProperty("ID"),tables.AOTgetProperty("LegacyId"),tables.AOTgetProperty("SaveDataPerCompany"),tables.AOTgetProperty("TableGroup"),tables.AOTgetProperty("FormRef"),tables.AOTgetProperty("CountryRegionCodes"),SysDictTable::casRecordCount(tables.AOTname()));
        tables = tables.AOTnextSibling();
     }

    info("Done");
}