Wednesday, October 9, 2013

How to find what projects an object from the AOT exists in

Where I work, we are required to create a new, numbered project for every modification request.  The numbered projects have corresponding documentation for the intended purpose.

So when I later want to find out what projects an AOT object exists in, I needed a way to search inside every project.  I wrote this proof of concept job on how to find in what projects a specific object exists.  Enjoy!

static void FindWhatProjectsObjectExistsIn(Args _args)
    ProjectNode         pn;
    ProjectListNode     projectListNode;

    TreeNode            tn, tn2;
    TreeNodeIterator    tni, tni2;

    // Object we are searching for
    TreeNode            tnSearch = TreeNode::findNode(@'\Forms\SalesTable');

    projectListNode = SysTreeNode::getSharedProject();
    tni = projectListNode.AOTiterator();

    tn =;

    while (tn)
        pn = tn; // ProjectNode inherits TreeNode
        pn = pn.loadForInspection();

        tni2 = pn.AOTiterator();

        tn2 =;

        while (tn2)
            if (tn2.treeNodePath() == tnSearch.treeNodePath())
                info(strfmt("Found in shared project %1", tn.AOTname()));

            // info(tn2.applObjectType()); // Returns the type (Form/Class/Table/Etc)
            // info(tn2.AOTname()); // Returns the object name
            // info(tn2.treeNodePath()); // Returns the object path
            tn2 =;

        tn =;



    1. This comment has been removed by the author.

  2. How Can I get AOT Object name based on Label ID used?

  3. Frustrating that there's no recursive iterator for nodes: the second iterator will only check objects at the root of shared projects, so if people organise their projects into groups, they'll be missed. Still, it's a starting point, so thanks for sharing.