Показать сообщение отдельно
Старый 28.05.2009, 11:17   #9  
SRF is offline
SRF
Участник
MCBMSS
Axapta Retail User
 
365 / 542 (19) +++++++
Регистрация: 08.08.2007
Записей в блоге: 1
Цитата:
Сообщение от DSPIC Посмотреть сообщение
Думаю, примерно так:
X++:
static void classMethodInfo(Args _args)
{
    SysDictClass    sysDictClass;
    DictMethod      dictMethod;
    counter         methodCount, varCount;
    str             parmsStr;
    ;
 
    sysDictClass = new SysDictClass(classnum(RunBaseBatch));
 
    setPrefix(sysDictClass.name());
 
    methodCount = sysDictClass.objectMethodCnt();
 
    while (methodCount)
    {
        dictMethod = sysDictClass.objectMethodObject(methodCount);
 
        if (dictMethod)
        {
            parmsStr = '';
 
            for (varCount = dictMethod.parameterCnt(); varCount >= 1; varCount --)
            {
                parmsStr += strFmt("%1 %2, ", dictMethod.parameterType(varCount), dictMethod.parameterName(varCount));
            }
 
            parmsStr = strdel(parmsStr, strlen(parmsStr) - 1, 2);
 
            info (strFmt ("%1 (%2)", dictMethod.name(), parmsStr));
        }
 
        methodCount --;
    }
}
Небольшое дополнение :
1. данный код не учитывает статических методов, дополнил job DSPIC, чтобы статические методы учитывались
X++:
static void classMethodInfo(Args _args)
{
    SysDictClass    sysDictClass;
    DictMethod      dictMethod;
    counter         methodCount, varCount;
    str             parmsStr;
    ;
    sysDictClass = new SysDictClass(classnum(SysDictClass));
    setPrefix(sysDictClass.name());
    methodCount = sysDictClass.objectMethodCnt();
    while (methodCount)
    {
        dictMethod = sysDictClass.objectMethodObject(methodCount);
        if (dictMethod)
        {
            parmsStr = '';
            for (varCount = dictMethod.parameterCnt(); varCount >= 1; varCount --)
            {
                parmsStr += strFmt("%1 %2, ", dictMethod.parameterType(varCount), dictMethod.parameterName(varCount));
            }
            parmsStr = strdel(parmsStr, strlen(parmsStr) - 1, 2);
            info (strFmt ("%1 (%2)", dictMethod.name(), parmsStr));
        }
        methodCount --;
    }
 //SRF -->
    methodCount = sysDictClass.staticMethodCnt();
    while (methodCount)
    {
        dictMethod = sysDictClass.staticMethodObject(methodCount);
        if (dictMethod)
        {
            parmsStr = '';
            for (varCount = dictMethod.parameterCnt(); varCount >= 1; varCount --)
            {
                parmsStr += strFmt("%1 %2, ", dictMethod.parameterType(varCount), dictMethod.parameterName(varCount));
            }
            parmsStr = strdel(parmsStr, strlen(parmsStr) - 1, 2);
            info (strFmt ("%1 (%2)", dictMethod.name(), parmsStr));
        }
        methodCount --;
    }
//SRF <--
}
2. Данный код не работает в AX 3.0 SP2(он просто не компилируется, поскольку у dictMethod отсутсвует метод parameterName)

OFFTOPIC : вообще если нужны только списки методов без параметров то для DAX 4.0(также для других версий) можно использовать static-методы класса sysPickList, например, чтобы получить список методов таблицы в DAX 4.0 достаточно вызвать ниже приведенный код
X++:
sysPickList::fillTablesMethodsMap(tableId)