![]() |
#20 |
Участник
|
Обнаружена еще одна интересная особенность работы с TreeNode.AOTmakeXref()
Оказывается в стандартном коде в большинстве мест этот метод обрамляется отключением записи собираемых перекрестных ссылок в постоянную таблицу, за счет чего ускоряется работа этого метода Например так \Classes\EditorScripts\documentation_HeaderTemplate 2012-я X++: appl.updatexRefSet(true); memberFunction.aoTmakeXref(1); tmpxRefReferences = xRefCreate::makeTmp(appl.lastxRef(), memberFunction.treeNodePath()); appl.updatexRefSet(false); X++: infolog.updatexRefSet(this, true); memberFunction.AOTmakeXref(1); tmpxRefReferences = xRefCreate::makeTmp(infolog.lastxRef(), memberFunction.treeNodePath()); infolog.updatexRefSet(this, false); Написал свой метод xRefCreate::makeTmpByTreeNode_MRC, который заменяет вызов X++: appl.updatexRefSet(true); memberFunction.aoTmakeXref(1); tmpxRefReferences = xRefCreate::makeTmp(appl.lastxRef(), memberFunction.treeNodePath()); appl.updatexRefSet(false); X++: /// <summary> /// Рекомендуется вместо treeNode.aotMakeXref(1); tmpxRefReferences = xRefCreate::makeTmp(appl.lastxRef()); /// </summary> /// <param name="_treeNode"> /// TreeNode, для которого собираем временные перекрестные ссылки /// </param> /// <param name="_flag"> /// 1-й параметр _flag, передаваемый в treeNode.aotMakeXref(_flag) /// </param> /// <param name="_xRefAll"> /// 2-й параметр _xRefAll, передаваемый в treeNode.aotMakeXref(_flag, _xRefAll) /// </param> /// <param name="_path"> /// параметр _path передаваемый в xRefCreate::makeTmp() /// </param> /// <returns> /// Временная таблица xRefTmpReferences с результатами сбора перекрестных ссылок по treenode /// </returns> /// <remarks> /// [url=http://axforum.info/forums/showthread.php?p=299419#post299419]Открыть в новом окне объект из кода[/url] /// В 2012-й вызов treeNode.aotMakeXref(1) работает быстрее если /// обрамить его отключением сохранения перекрестных ссылок /// см. пример в стандартном коде в \Classes\EditorScripts\documentation_HeaderTemplate /// /// метод makeTmpByTreeNode_MRC сделан для удобства, для замены куска кода /// appl.updatexRefSet(true); /// treeNode.aotMakeXref(1); /// tmpxRefReferences = xRefCreate::makeTmp(appl.lastxRef(), treeNode.treeNodePath()); /// appl.updatexRefSet(false); /// одной строкой кода с вызовом этого метода /// xRefCreate::makeTmpByTreeNode_MRC(treeNode, 1, false /*default value*/, treeNode.treeNodePath()); /// </remarks> // JEV007437, PKoz 31.01.2023 public static xRefTmpReferences makeTmpByTreeNode_MRC( TreeNode _treeNode, int _flag = 1, // обычно 1 boolean _xRefAll = false, xRefPath _path = '' // в стандарте обычно _treeNode.treeNodePath() ) { xRefTmpReferences tmpxRefReferences; boolean temporaryForbidSaveXref; ; temporaryForbidSaveXref = appl.canUpdatexRef(); if (temporaryForbidSaveXref) { appl.updatexRefSet(true); } _treeNode.aotMakeXref(_flag, _xRefAll); tmpxRefReferences = xRefCreate::makeTmp(appl.lastxRef(), _path); if (temporaryForbidSaveXref) { appl.updatexRefSet(false); } return tmpxRefReferences; } |
|
|
За это сообщение автора поблагодарили: demianimp (4), gl00mie (10). |