25.01.2013, 23:06 | #16 |
MCTS
|
Версия для AX 2012
Преимущества перед F12: - Сразу открывает объект а не переходит сначала к определению переменной.; - Работает в ряде случаев, когда не работает F12 (системные объекты, параметры методов и т.п.); - Работает с макросами (при полном выделению имени). За идею спасибо Timofey_k; Особенности: - В данной реализации при запуске из job система делает попытку закрыть текущее окно редактора. В качестве воркэраунда используется переоткрытие исходного окна (за идею также спасибо Timofey_k). X++: //AX2012 version public void aaaOpenInAOT(Editor e) { #AOT #define.AOTPathDivider('\\') TreeNode treeNode = TreeNode::findNode(e.path()); xRefTmpReferences xRefTmpReferences; Column nCol = e.columnNo() + 1; Line nLine = e.currentLineNo() + 1; int startCol = e.selectionStartCol(); int endCol = e.selectionEndCol(); str macroName; str nodePath; str curPath = e.path(); ; treeNode.AOTmakeXref(1); xRefTmpReferences = xRefCreate::makeTmp(appl.lastxRef()); select firstonly xRefTmpReferences order by Column desc where xRefTmpReferences.line == nLine && xRefTmpReferences.Column <= nCol; if (!xRefTmpReferences) { e.firstSelectedLine(); macroName = strLRTrim(subStr(e.getLine(), e.selectionStartCol(), endCol - startCol)); if (macroName) { treeNode = TreeNode::findNode(#MacrosPath + #AOTDelimiter + macroName); if (treeNode) { treeNode.AOTedit(); } } return; } nodePath = xRefTmpReferences.calcPath(); if (nodePath) { treeNode = TreeNode::findNode(nodePath); if (treeNode) { if (strScan(curPath, #JobsPath + #AOTPathDivider, 1, strLen(curPath))) { //Workaround for jobs behaviour in the AX2012 SysUtil::editPathLogicalPos(curPath, nLine, nCol); } treeNode.AOTnewWindow(); } } return; } Последний раз редактировалось alex55; 25.01.2013 в 23:14. |
|
|
За это сообщение автора поблагодарили: Logger (3). |