25.06.2009, 07:56 | #1 |
Участник
|
Метод typeCnt() класса Dictionary
Доброго времени суток.
Наткнулся на очередную фичу Аксапты. Метод typeCnt() класса Dictionary в AX 4.0 и AX 2009 почему-то возвращает на единицу больше существующих EDT(в AX 3.0 работает нормально). Ниже приведенный job наглядно это демонстрирует. X++: static void SRF_TestDictionaryTypeCnt(Args _args) { Dictionary dictionary = new Dictionary(); ExtendedTypeId currentTypeId; Counter typeCnt; ; for (currentTypeId = dictionary.typeNext(0); currentTypeId; currentTypeId = dictionary.typeNext(currentTypeId)) { typeCnt++; } info(strfmt("%1", dictionary.typeCnt() - typeCnt)); } Все бы ничего, если бы при использовании других xxxCnt() и xxxNext() методов класса Dictionary результат тоже был 1 (объяснялось бы проще - изменился принцип работы методов xxxCnt()) однако это не так, результат такой же как и в AX 3.0 - 0. OFFTOPIC : В голову почему-то приходит фраза: "О, женщина. Как ты не постоянна", которую я не много перефразировал Цитата:
О, Аксапта. Как ты не постоянна
Последний раз редактировалось SRF; 25.06.2009 в 07:57. Причина: опечатки |
|
|
За это сообщение автора поблагодарили: kashperuk (5). |
25.06.2009, 12:27 | #2 |
Участник
|
extendedTypeNum( featureKey ) = 61465
Цитата:
Связано с тем что в 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 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++;
} |
|
|
За это сообщение автора поблагодарили: SRF (1). |
25.06.2009, 14:27 | #3 |
NavAx
|
Я выяснять в свое время не стал, и просто тупо проверял, создался ли DictType по очередному counter. Теперь стало ясно, почему оно не стреляло..
__________________
Жизнь прекрасна! Если, конечно, правильно подобрать антидепрессанты... |
|
Теги |
ax2009, ax3.0, ax4.0, dictionary, typecnt |
|
|