Показать сообщение отдельно
Старый 25.01.2013, 23:06   #21  
alex55 is offline
alex55
MCTS
MCBMSS
 
224 / 145 (5) +++++
Регистрация: 13.02.2007
Адрес: Москва
Версия для 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).