Версия для 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;
}