Как запросить объекты UtilElements и UtilIdElements для получения правильных результатов? - PullRequest
1 голос
/ 26 мая 2011

У меня проблемы с запросом UtilElements и UtilIdElements в Dynamics AX 2009.

Снимок экрана # 1 показывает, что класс SalesFormLetter присутствует в слоях sys, syp, gls, glp и cup.Однако, когда я запускаю следующий код, вывод показывает, что объект существует только в слое sys.Вывод этого кода приведен на скриншоте # 2 .

Я что-то не так делаю в этом коде?Я хотел бы знать все слои, в которых присутствует данный объект.

Заранее спасибо.

    #AOT

    UtilElements        utilElements;
    UtilIdElements      utilIdElements;
    ;

    info('Querying UtilElements...');

    while
        select      utilElements
        where       utilElements.name       == 'SalesFormLetter'
        &&          utilElements.recordType == UtilElementType::Class
    {
        info('Layer: ' + enum2str(utilElements.utilLevel) + 
                ', Object type: ' + enum2str(utilElements.recordType));
    }


    info('Querying UtilIdElements...');

    while
        select      utilIdElements
        where       utilIdElements.name         == 'SalesFormLetter'
        &&          utilIdElements.recordType   == UtilElementType::Class
    {
        info('Layer: ' + enum2str(utilIdElements.utilLevel) + 
                ', Object type: ' + enum2str(utilIdElements.recordType));
    }

Скриншот № 1:

SalesFormLetter

Снимок экрана № 2:

Output

1 Ответ

2 голосов
/ 26 мая 2011

Существуют другие типы элементов, такие как UtilElementType::ClassStaticMethod или UtilElementType::ClassInstanceMethod. Попробуйте запустить это:

static void UtilElementTest(Args _args)
{
    UtilElements        utilElements;
    ;
    setPrefix('Querying UtilElements...');
    while select utilElements
        where utilElements.parentId == classNum(SalesFormLetter)
        // && utilElements.recordType == UtilElementType::ClassInstanceMethod
           && utilElements.utilLevel != UtilEntryLevel::sys
    {
        info('Name: ' + utilElements.name +
             ', Layer: ' + enum2str(utilElements.utilLevel) +
             ', Object type: ' + enum2str(utilElements.recordType));
    }
}

На самом деле AOT немного обманывает, чтобы выделить класс. Сам класс не изменен, но один из его методов:

...