X++ job to treverse AOT objects

static void CusLayerTableFieldAnalysis_Cus(Args _args)
{
    #aot
    #properties
    Str                         projectName = "DataDictionary_CUS";
    ProjectNode                 projectNode;
    ProjectGroupNode            ddProjectGroupNode;
    ProjectGroupNode            edtProjectGroupNode;
    ProjectGroupNode            tblProjectGroupNode;
    ProjectListNode             projectListNode;
    TreeNode                    memberTreeNode;            
    TreeNode                    projectTreeNode;
    TreeNodeIterator            projectIterator;
 
    SysDictTable    dictTable ;//= new SysDictTable(tableNum(CustTable));
    SysDictField    dictField;
    TreeNode        treeNode;
    FieldId         fieldId ;//= dictTable.fieldNext(0);
    //ProjectNode projectTreeNode = SysTreeNode::getPrivateProject().AOTfindChild('DataDictionary_CUS');
 
    // find all Private projects
    projectListNode = SysTreeNode::getPrivateProject();
    // find project with a given name
    projectNode = projectListNode.AOTfindChild(projectName);
    // open it in a separate window in AOT
    projectTreeNode = projectNode.getRunNode();
    // this is the key point after which we can iterate group members
    projectNode = projectNode.loadForInspection();
        // get nested nodes for appropriate names
    ddProjectGroupNode = projectNode.AOTfindChild('Data_Dictionary');
    //edtProjectGroupNode = ddProjectGroupNode.AOTfindChild('Extended Data Types');
    tblProjectGroupNode = ddProjectGroupNode.AOTfindChild('Tables');
    // tables
    projectIterator = tblProjectGroupNode.AOTiterator();
    memberTreeNode = projectIterator.next();
    while(memberTreeNode)
    {
        //FieldId = memberTreeNode.toString();
        //dictTable = new SysDictTable(strFmt("%1", memberTreeNode.AOTname()));
        info(strFmt("TABLE : %1 | Model : %2", memberTreeNode.AOTname(),memberTreeNode.AOTgetProperty("Model")));
        dicttable = new SysDictTable(tableName2Id(memberTreeNode.AOTname()));
        fieldId = dictTable.fieldNext(0);
        while (fieldId)
        {
            dictField = dictTable.fieldObject(fieldId);

            if (dictField.isSql() && !dictField.isSystem())
            {
                treeNode = dictField.treeNode();
                if(treeNode.AOTgetProperty("Model") == "CUS Model")
                {
                info(strFmt("Field : %1 | Model : %2 | EDT : %3 | String size : %4",
                    dictField.name(),                                               // Field name
                    treeNode.AOTgetProperty("Model"),                               // Model
                    treeNode.AOTgetProperty("ExtendedDataType"),                      // EDT
                    (treeNode.AOTgetProperty("Type") == "String" ? treeNode.AOTgetProperty("StringSize") : '')));
                }
            }

            fieldId = dictTable.fieldNext(fieldId);
        }
        memberTreeNode = projectIterator.next();
    }
}

Comments

Popular posts from this blog

D365: SSRS Report Development/ Customization

D365: X++ code to add custom lookup on worker to show specific workers team workers only

Error message when you log on to a Microsoft Dynamics AX 4.0 client: "You are not a recognized user of Microsoft Dynamics AX"