Цитата:
Сообщение от
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().