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

 
 
Опции темы Поиск в этой теме Опции просмотра
Старый 03.05.2007, 11:07   #1  
oip is offline
oip
Axapta
Лучший по профессии 2014
 
2,564 / 1416 (53) ++++++++
Регистрация: 28.11.2005
Записей в блоге: 1
Теряется фильтр из-за того, что не задан label.
Наверняка это уже тут обсуждалось тут где-то, но, думаю, еще раз поднять это лишним не будет. Может быть когда-нибудь кому-нибудь пригодится.

Ситуация такова. Был вот такой код:

X++:
runQuery = new QueryRun(bankQueryRun.query());
debug::printDebug(runQuery.query().dataSourceNo(1).toString());
debug::printDebug(bankQueryRun.query().dataSourceNo(1).toString());
В дебагер выводилось:
Цитата:
SELECT * FROM BankAccountTrans WHERE ((TransDate<=31.03.2007)) AND ((Dimension[3] = Накладные расходы))
SELECT * FROM BankAccountTrans WHERE ((TransDate<=31.03.2007)) AND ((CancelStatus = 0)) AND ((Dimension[3] = Накладные расходы))
Т.е. терялось "CancelStatus = 0". Я долго не мог понять, "то ли это лыжи не едут, то ли я торможу". А оказалось,что причина этого в том, что у нулевого значения энума CancelStatus не была задана метка.

Спасибо AndyD и kashperuk за помощь!

PS Можно перенести в базу знаний.
За это сообщение автора поблагодарили: Logger (3).
Старый 03.05.2007, 11:30   #2  
gl00mie is offline
gl00mie
Участник
MCBMSS
Most Valuable Professional
Лучший по профессии 2017
Лучший по профессии 2015
Лучший по профессии 2014
Лучший по профессии AXAWARD 2013
Лучший по профессии 2011
Лучший по профессии 2009
 
3,684 / 5798 (201) ++++++++++
Регистрация: 28.11.2005
Адрес: Москва
Записей в блоге: 3
Цитата:
Сообщение от oip Посмотреть сообщение
Наверняка это уже тут обсуждалось тут где-то, но, думаю, еще раз поднять это лишним не будет.
оказалось,что причина этого в том, что у нулевого значения энума CancelStatus не была задана метка.
Проблемы, возникающие из-за отсутствия меток у значений Enum'ов, не так давно обсуждались в теме Query.pack()
Старый 03.05.2007, 11:33   #3  
oip is offline
oip
Axapta
Лучший по профессии 2014
 
2,564 / 1416 (53) ++++++++
Регистрация: 28.11.2005
Записей в блоге: 1
Точно. Пропустил я ту тему почему-то. Спасибо.
Старый 03.05.2007, 12:37   #4  
gl00mie is offline
gl00mie
Участник
MCBMSS
Most Valuable Professional
Лучший по профессии 2017
Лучший по профессии 2015
Лучший по профессии 2014
Лучший по профессии AXAWARD 2013
Лучший по профессии 2011
Лучший по профессии 2009
 
3,684 / 5798 (201) ++++++++++
Регистрация: 28.11.2005
Адрес: Москва
Записей в блоге: 3
Вот небольшой скрипт для поиска "проблемных" значений перечислений. У меня нашлось 418 значений в 190 перечислениях
X++:
// gl00mie, 20070503 -->
#AOT
static void AOTprintEnumValuesUnlabeled(Args _args)
{
    TreeNodeIterator    tnIterator;
    TreeNode            tnEnum;
    DictEnum            dtEnum;
    boolean             bEnumIsOk;
    str                 strValueLabel;
    int                 i;
    int                 cnProcessed = 0;
    int                 cnUnlabeled = 0;
    int                 cnEnumsNotOk= 0;
    ;
    tnIterator  = TreeNode::findNode(#BaseEnumsPath).AOTiterator();
    while(true)
    {
        tnEnum  = tnIterator.next();
        if(!tnEnum) break;
        cnProcessed++;
        dtEnum  = new DictEnum(tnEnum.applObjectId());
        if(!dtEnum)
        {
            error(strfmt(@"Failed to create DictEnum object for '%1\%2' (objectId %3)!",
                            #BaseEnumsPath, tnEnum.AOTname(), tnEnum.applObjectId()));
            continue;
        }
        bEnumIsOk = true;
        for(i=0; i<dtEnum.values(); i++)
        {
            strValueLabel = dtEnum.index2Label(i);
            if(!strValueLabel)
            {
                cnUnlabeled++;
                bEnumIsOk = false;
                warning(strfmt(@"%1::%2 (value %3)  has no label!",
                        dtEnum.name(), dtEnum.index2Symbol(i), dtEnum.index2Value(i)));
            }
        }
        if(!bEnumIsOk)
            cnEnumsNotOk++;
    }
    info(strfmt(@"%1 base enums processed, %2 unlabeled enum values found in %3 enums", cnProcessed, cnUnlabeled, cnEnumsNotOk));
}
// gl00mie, 20070503 <--

Последний раз редактировалось gl00mie; 03.05.2007 в 12:48. Причина: приделал вывод числа "проблемных" перечислений
За это сообщение автора поблагодарили: oip (10).
Старый 03.05.2007, 18:04   #5  
Zan is offline
Zan
Участник
 
104 / 25 (1) +++
Регистрация: 22.07.2004
Адрес: I live in Moscow
Предлагаю сразу заполнить каким-нибудь непреметным значением пустые Labels.
За основу взял job от gl00mie

X++:
#AOT
static void AOTprintUpdateEnumValuesUnlabeled(Args _args)
{
    TreeNodeIterator    tnIterator;
    TreeNode            tnEnum,
                        tnEmunChild;
    DictEnum            dtEnum;

    boolean             bEnumIsOk;
    str                 strValueLabel;
    int                 i;
    int                 cnProcessed = 0;
    int                 cnUnlabeled = 0;
    int                 cnEnumsNotOk= 0;

    // zan 03.05.2007 -->
    int                 conElmUpd   = 3; //Label

    str                 properties,
                        labelValueNew = '-',
                        conValue;

    container           conProperties;
    // zan 03.05.2007 <--
    ;

    tnIterator  = TreeNode::findNode(#BaseEnumsPath).AOTiterator();
    while(true)
    {
        tnEnum  = tnIterator.next();
        if(!tnEnum) break;
        cnProcessed++;
        dtEnum  = new DictEnum(tnEnum.applObjectId());
        if(!dtEnum)
        {
            error(strfmt(@"Failed to create DictEnum object for '%1\%2' (objectId %3)!",
                         #BaseEnumsPath, tnEnum.AOTname(), tnEnum.applObjectId()));
            continue;
        }
        bEnumIsOk = true;
        for(i=0; i<dtEnum.values(); i++)
        {
            strValueLabel = dtEnum.index2Label(i);
            if(!strValueLabel)
            {
                cnUnlabeled++;
                bEnumIsOk = false;
                warning(strfmt(@"%1::%2 (value %3)  has no label!", 
                               dtEnum.name(), dtEnum.index2Symbol(i), dtEnum.index2Value(i)));

                // zan 03.05.2007 -->
                if(labelValueNew)
                {
                    tnEmunChild   = tnEnum.AOTfindChild(dtEnum.index2Symbol(i));
                    properties    = tnEmunChild.AOTgetProperties();

                    conProperties = str2con(properties,'\n');
                    conValue      = conpeek(conProperties,conElmUpd);
                    conValue     += labelValueNew;
                    conProperties = conpoke(conProperties, conElmUpd, conValue);
                    properties    = con2str(conProperties,'\n');

                    tnEmunChild.AOTsetProperties(properties);
                    tnEmunChild.AOTsave();
                    tnEnum.AOTsave();

                    //info(properties);
                }
                // zan 03.05.2007 <--
            }
        }
        if(!bEnumIsOk)
            cnEnumsNotOk++;
    }
    info(strfmt(@"%1 base enums processed, %2 unlabeled enum values found in %3 enums", cnProcessed, cnUnlabeled, cnEnumsNotOk));
}
// gl00mie, 20070503 <--
Старый 03.05.2007, 18:25   #6  
kashperuk is offline
kashperuk
Участник
Аватар для kashperuk
MCBMSS
Соотечественники
Сотрудники Microsoft Dynamics
Лучший по профессии 2017
Лучший по профессии 2015
Лучший по профессии 2014
Лучший по профессии 2011
Лучший по профессии 2009
 
4,361 / 2084 (78) +++++++++
Регистрация: 30.05.2004
Адрес: Atlanta, GA, USA
Цитата:
Сообщение от Zan Посмотреть сообщение
Предлагаю сразу заполнить каким-нибудь непреметным значением пустые Labels.
За основу взял job от gl00mie
Думаю лучше заполнять пробелом. Тогда визуально не будет отличаться, а работать уже будет корректно.
Старый 03.05.2007, 19:11   #7  
Zan is offline
Zan
Участник
 
104 / 25 (1) +++
Регистрация: 22.07.2004
Адрес: I live in Moscow
Цитата:
Сообщение от kashperchuk ->
Думаю лучше заполнять пробелом. Тогда визуально не будет отличаться, а работать уже будет корректно.
На счет пробела конечно хорошо, только при его использовании тоже есть проблемы.
Нужно обязательно чем-нибудь зополнять.
Теги
query, баг, ax3.0

 

Похожие темы
Тема Автор Раздел Ответов Посл. сообщение
axStart: When is my Label file updated in AX? Blog bot DAX Blogs 8 28.01.2010 22:09
DynaMihamAX: Label import problem in Dynamics AX 4.0 Blog bot DAX Blogs 0 12.12.2008 13:05
axaptapedia: Label Blog bot DAX Blogs 0 03.12.2007 16:00
axaptapedia: Label Blog bot DAX Blogs 0 30.11.2007 20:41
axaptafreak: Label for Query Range cannot be modified (still) Blog bot DAX Blogs 2 25.07.2007 10:09

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

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

Рейтинг@Mail.ru
Часовой пояс GMT +3, время: 18:33.