Показать сообщение отдельно
Старый 09.06.2019, 23:29   #2  
Logger is offline
Logger
Участник
Лучший по профессии 2015
Лучший по профессии 2014
 
3,867 / 3123 (112) ++++++++++
Регистрация: 12.10.2004
Адрес: Москва
Записей в блоге: 2
Небольшая поправка:

X++:
public void mergeInsertSubnode(
    SysComparable             _topComparable,
    SysCompareContextProvider _context,
    SysComparable               _nodeToInsert)
{
    TreeNode previousSourceNode, previousNode;
    TreeNode sourceNode;
    boolean result;
    TreeNode parentNodeInAot;
    SysTreeNode nodeToInsert;
    // JEV003545 "Перенос последних изменений из Ax40 в Ax2012", pkoz 09.06.2019 -->
    TreeNode    previousNode_MRC;
    TreeNode    droppedNode_MRC;
    // JEV003545 "Перенос последних изменений из Ax40 в Ax2012", pkoz 09.06.2019 <--
    ;
    nodeToInsert = _nodeToInsert as SysTreeNode;

    if (_nodeToInsert &&
        treeNode &&
        TreeNode::isNodeReferenceValid(treeNode))
    {
        parentNodeInAot = TreeNode::findNode(SysTreeNode::getPath(treeNode));
        if (parentNodeInAot)
        {
            sourceNode = nodeToInsert.parmTreeNode();
            previousSourceNode = sourceNode.AOTprevious();

            while (!previousNode && previousSourceNode)
            {
                previousNode       = parentNodeInAot.AOTfindChild(previousSourceNode.treeNodeName());
                previousSourceNode = previousSourceNode.AOTprevious();
            }

            // We get here e.g. if treeNode is the form design node. If previousNode=Null node is inserted last, it should be first.
            if (! previousNode)
                previousNode = parentNodeInAot;

            result = parentNodeInAot.AOTDrop(sourceNode, previousNode);
            
            // JEV003545 "Перенос последних изменений из Ax40 в Ax2012", pkoz 09.06.2019 -->
            // при импорте xpo экспортированных из 4-ки в 2012-ю 
            // вызов parentNodeInAot.AOTDrop() работает не так как при импорте xpo выгруженных из 2012-й
            // почему-то игнорируется параметр previousNode и добавленный узел становится самым первым, что очень 
            // неудобно - порядок нарушается и его приходится исправлять в ручную
            // фиксим такое поведение
            if (result)
            {
                droppedNode_MRC = parentNodeInAot.AOTfindChild(sourceNode.treeNodeName());
            
                if (droppedNode_MRC)
                {
                    previousNode_MRC = droppedNode_MRC.AOTprevious();
                
                    if (previousNode_MRC &&
                         previousNode_MRC.treeNodePath() != previousNode.treeNodePath())
                    {
                        droppedNode_MRC.AOTMove(parentNodeInAot, previousNode); 
                    }
                }
            }
            // JEV003545 "Перенос последних изменений из Ax40 в Ax2012", pkoz 09.06.2019 <--

            if (result)
            {
                // node was successfully dropped
                previousSourceNode = null;
                previousNode       = null;
                sourceNode         = null;

                //Clear cached information
                comparableTextList = null;

                treeNode = parentNodeInAot;
            }
        }
    }
}