AXForum  
Вернуться   AXForum > Microsoft Dynamics AX > DAX: Программирование
All
Забыли пароль?
Зарегистрироваться Правила Справка Пользователи Сообщения за день Поиск

 
 
Опции темы Поиск в этой теме Опции просмотра
Старый 25.06.2009, 12:27   #2  
petergunn is offline
petergunn
Участник
 
118 / 274 (10) ++++++
Регистрация: 30.08.2005
Адрес: Tyumen
-> extendedTypeNum( featureKey ) = 61465
Цитата:
Сообщение от SRF Посмотреть сообщение
...
Метод typeCnt() класса Dictionary в AX 4.0 и AX 2009 почему-то возвращает на единицу больше существующих EDT(в AX 3.0 работает нормально).
Да, есть такая багофича.
Связано с тем что в Ax 3.0 был системный EDT featureKey (extendedTypeNum( featureKey ) = 61465), а в DAX 4.0 такого уже нет. При этом функции dictionary.typeCnt() и dictionary.typeCnt2Id() все же информацию о нем как-то учитывают 'по старой памяти' .
В свое время тоже натыкался на это в DAX 4.0, только с другой стороны - в цикле по dictionary.typeCnt() с dictionary.typeCnt2Id() (в общем то так и определил какой EDT 'фонит' ):
X++:
static void jbCheckDictionaryType(Args _args)
{
    Dictionary      dictionary      ;
    DictType        dictType        ;
    ExtendedTypeId  extendedTypeId  ;
    Counter         counterType     ;
    ;
    
    dictionary = new Dictionary() ;
    for( counterType =1; counterType <dictionary.typeCnt(); counterType++)
    {
        extendedTypeId = dictionary.typeCnt2Id( counterType ) ;
        dictType = dictionary.typeObject( extendedTypeId ) ;
        if( !dictType )
            warning( strfmt( "Oops: %1 - %2", extendedTypeId, dictionary.typeName( extendedTypeId ) ) ) ;
    }
    info( 'finished' ) ;
}
результат:
Цитата:
Сообщение (10:02:16)
- Oops: 61465 -
- finished
При этом функция dictionary.typeNext() 'перепрыгивает' через этот номер EDT в DAX 4.0:
X++:
    Dictionary      dictionary = new Dictionary() ;
    ExtendedTypeId  extendedTypeId = extendedTypeNum( userGroupId ) ;
    ;
    
    info( strfmt( "%1 - %2", extendedTypeId, dictionary.typeName( extendedTypeId ) ) ) ;
    extendedTypeId = dictionary.typeNext( extendedTypeId ) ;
    info( strfmt( "%1 - %2", extendedTypeId, dictionary.typeName( extendedTypeId ) ) ) ;
Цитата:
Сообщение (10:16:24)
- 61464 - userGroupId
- 61466 - money
Собственно поэтому цикл:
X++:
for (currentTypeId = dictionary.typeNext(0); currentTypeId; currentTypeId = dictionary.typeNext(currentTypeId))
    {
        typeCnt++;
    }
посчитал количество в AX 4.0 и AX2009 на единицу меньше чем выдает dictionary.typeCnt().
Изображения
  
За это сообщение автора поблагодарили: SRF (1).
Теги
ax2009, ax3.0, ax4.0, dictionary, typecnt

 

Похожие темы
Тема Автор Раздел Ответов Посл. сообщение
Метод 'SendMail' в COM-объекте класса 'Dundas.mailer' возвратил код ошибки 0x80004005 (E_FAIL), который означает: The HELLO command failed. Andrew Akhmetov DAX: Программирование 4 09.04.2008 13:24
Как запустить метод класса :) Silence DAX: Программирование 6 19.10.2006 12:23
Запустить метод класса loka DAX: Программирование 2 13.03.2006 15:40
Как вызвать нужный метод класса? Pawlik DAX: Программирование 5 12.01.2006 15:47
Метод класса, возвращающий сумму налога. 2.5SP5 studentLPC DAX: Программирование 2 25.07.2003 12:21

Ваши права в разделе
Вы не можете создавать новые темы
Вы не можете отвечать в темах
Вы не можете прикреплять вложения
Вы не можете редактировать свои сообщения

BB коды Вкл.
Смайлы Вкл.
[IMG] код Вкл.
HTML код Выкл.
Быстрый переход

Рейтинг@Mail.ru
Часовой пояс GMT +3, время: 21:47.
Powered by vBulletin® v3.8.5. Перевод: zCarot
Контактная информация, Реклама.