Источник:
http://alexvoy.blogspot.com/2014/10/...p-members.html
==============
Based on
S. Kuskov's suggestion and
Vania Kashperuk's article, I put down this simple job that iterates Tables and Extended Data Types groups members in a given shared project.
X++:
static void tmxIterateProjectGroupMembers(Args _args)
{
#aot
#properties
Str projectName = "tmxEDI999";
ProjectNode projectNode;
ProjectGroupNode ddProjectGroupNode;
ProjectGroupNode edtProjectGroupNode;
ProjectGroupNode tblProjectGroupNode;
ProjectListNode projectListNode;
TreeNode memberTreeNode;
TreeNode projectTreeNode;
TreeNodeIterator projectIterator;
if(projectName)
{
// find all shared projects
projectListNode = SysTreeNode::getSharedProject();
// 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('DataDictionary');
edtProjectGroupNode = ddProjectGroupNode.AOTfindChild('Extended Data Types');
tblProjectGroupNode = ddProjectGroupNode.AOTfindChild('Tables');
// tables
projectIterator = tblProjectGroupNode.AOTiterator();
memberTreeNode = projectIterator.next();
while(memberTreeNode)
{
info(strFmt("%1 %2", memberTreeNode.AOTname(), memberTreeNode.treeNodeName()));
memberTreeNode = projectIterator.next();
}
// extended data types
projectIterator = edtProjectGroupNode.AOTiterator();
memberTreeNode = projectIterator.next();
while(memberTreeNode)
{
info(strFmt("%1 %2", memberTreeNode.AOTname(), memberTreeNode.treeNodeName()));
memberTreeNode = projectIterator.next();
}
}
}
The key method is loadForInspection. Happy iterating!
Источник:
http://alexvoy.blogspot.com/2014/10/...p-members.html