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 = tni.next(); while (tn) { pn = tn; // ProjectNode inherits TreeNode pn = pn.loadForInspection(); tni2 = pn.AOTiterator(); tn2 = tni2.next(); 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 = tni2.next(); } tn = tni.next(); } }
https://community.dynamics.com/ax/b/axaptavsme/archive/2013/03/03/how-to-find-your-object-in-aot-projects
ReplyDeleteThis comment has been removed by the author.
DeleteHow Can I get AOT Object name based on Label ID used?
ReplyDeleteFrustrating 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.
ReplyDeleteYou're right. I wrote this ~4 years ago, but I should update it to use recursion and be more efficient. It's useful when I'm dropped into a new environment and I'm trying to figure out what 1 custom class does...I can track down the project it's in to find the related objects (if the developer had a heart to put it in a project!)
Delete