Как определить имя класса Axapta по идентификатору класса? - PullRequest
4 голосов
/ 07 октября 2008

Пожалуйста, кто-нибудь может помочь мне разобраться в Безумстве Пакета?

Я пытаюсь отладить реализацию Axapta 3.0 с около 50 пакетными заданиями. Большинство пакетных классов не реализуют метод description(), поэтому, когда вы смотрите на форму Batch List (Основные >> Запросы >> Batch list), поле описания пустое , Вы можете видеть Batch Group и Start Time и т. Д., Но вы не можете сказать, какой класс на самом деле вызывается.

Таблица Batch содержит скрытое поле с именем ClassNum , которое идентифицирует свойство ID класса. Может кто-нибудь сказать мне, как я могу найти соответствующий класс из ID? После того, как я определил виновных, я могу добавить описания.

Я пытался использовать стандартную функцию Find на AOT, но она не подхватывает их.

Любые предложения приветствуются!

Большое спасибо, Mike

Ответы [ 2 ]

7 голосов
/ 07 октября 2008

Ответ Джея дает два комплексных решения.

Я только что обнаружил, что глобальный класс ClassId2Name делает то же самое, поэтому вы можете просто иметь:

display str Classname()
{
   return ClassId2Name(this.ClassNum);    
}
2 голосов
/ 07 октября 2008

Существует по крайней мере два способа сделать это, вы можете использовать класс DictClass:

display ClassName className()
{
    DictClass dictClass = new DictClass(this.ClassNum);
    ;
    if(dictClass!=null)
        return dictClass.name();
    return '';
}

Или используя таблицу UtilIdElements:

display ClassName className()
{
    UtilIdElements utilIdElements;
    ;
    select utilIdElements where utilIdElements.id==this.ClassNum && utilIdElements.recordType==UtilElementType::Class;
    if(utilIdElements)
        return utilIdElements.name;
    return '';
}
...