Цитата:
Сообщение от
Logger
В 2012-й такой подход не работает к сожалению.
А каким инстрементом лучше пользоваться в 12-й ?
Ниже пример обхода всех элементов всех общих проектов.
X++:
// >> DEV:MXK >>
public static server void updateProjectCrossRef()
{
TreeNode tnRoot, tnProject;
ProjectNode projectNode;
xRefPaths refPaths;
void updateProjectNodes(TreeNode _prentProject,
xRefPathRecId _xRefPathRecId = 0)
{
#TreeNodeSysNodeType
TreeNode treeNode;
TreeNodeIterator rootNodeIterator;
xRefReferences refReferences;
xRefPaths refPathsRef;
xRefPathRecId xRefNameRecId;
rootNodeIterator = _prentProject.AOTiterator();
treeNode = rootNodeIterator.next();
while (treeNode)
{
if (treeNode.treeNodeType().id() == #NT_PROJECT_GROUP)
{
updateProjectNodes(treeNode, _xRefPathRecId);
}
else
{
refPathsRef = xRefPaths::findOrInsert(treeNode.treeNodePath());
xRefNameRecId = xRefNames::findOrInsert(DEV_Maintain::getRefKind(treeNode), '', treeNode.treeNodeName(), 0).RecId;
if (!xRefReferences::find(xRefNameRecId, _xRefPathRecId, XRefReference::Declaration))
{
refReferences.initValue();
refReferences.xRefNameRecId = xRefNameRecId;
refReferences.xRefPathRecId = _xRefPathRecId;
refReferences.referencePathRecId = refPathsRef.RecId;
refReferences.Reference = XRefReference::Declaration;
refReferences.insert();
}
}
treeNode.treeNodeRelease();
treeNode = rootNodeIterator.next();
}
}
tnRoot = SysTreeNode::getSharedProject();
if (tnRoot)
{
tnProject = tnRoot.AOTfirstChild();
while (tnProject)
{
projectNode = tnProject;
if (TreeNode::findNode(tnProject.treeNodePath()))
{
refPaths = xRefPaths::findOrInsert(tnProject.treeNodePath());
updateProjectNodes(projectNode.loadForInspection(), refPaths.RecId);
}
tnProject = tnProject.AOTnextSibling();
}
}
info('Project references updated successfully.');
// << DEV:MXK <<
}