Показать сообщение отдельно
Старый 07.03.2016, 11:40   #14  
Link is offline
Link
Британский учённый
Аватар для Link
Соотечественники
 
568 / 513 (19) +++++++
Регистрация: 25.11.2005
Адрес: UK
Записей в блоге: 9
Цитата:
Сообщение от 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 <<
}
__________________
Людям физического труда для восстановления своих сил нужен 7-8 часовой ночной сон. Людям умственного труда нужно спать часов 9-10. Ну а программистов будить нельзя вообще.
За это сообщение автора поблагодарили: Logger (7).