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

 
 
Опции темы Поиск в этой теме Опции просмотра
Старый 25.09.2014, 12:32   #1  
skuull is offline
skuull
Участник
Most Valuable Professional
Лучший по профессии 2014
 
700 / 752 (27) +++++++
Регистрация: 08.03.2013
Адрес: ХЗ
Switch по контейнеру на сервере в дебаге валит сервер:)
X++:
static server void main(Args _args)
{
;
    switch ([tablenum(InventTable), tablenum(LedgerTable)])
    {
        case [tablenum(InventTable), tablenum(LedgerTable)]:
            info('test');
    }
}
Попробуйте пройти метод в дебаге
Проверено на 2009 и 2012 R3.
За это сообщение автора поблагодарили: mazzy (2), S.Kuskov (3), xiety (1).
Старый 25.09.2014, 12:35   #2  
Stitch_MS is offline
Stitch_MS
Участник
Аватар для Stitch_MS
Соотечественники
 
397 / 478 (16) +++++++
Регистрация: 27.02.2006
Адрес: Дания
Проверил в 2009. Падает .
Старый 25.09.2014, 13:26   #3  
DSPIC is offline
DSPIC
Боец
 
1,077 / 1243 (44) ++++++++
Регистрация: 11.04.2008
Я бы на месте сервера тоже упал бы, увидев такую конструкцию
За это сообщение автора поблагодарили: mazzy (2), AlGol (1), madm (1).
Старый 25.09.2014, 14:23   #4  
Kabardian is offline
Kabardian
Талантливый разгвоздяй
Аватар для Kabardian
 
424 / 338 (12) ++++++
Регистрация: 14.12.2008
Адрес: Москва
Записей в блоге: 14
Действительно, а какой смысл такой конструкции?))
Старый 25.09.2014, 14:33   #5  
belugin is offline
belugin
Участник
Аватар для belugin
Сотрудники Microsoft Dynamics
Лучший по профессии 2017
Лучший по профессии 2015
Лучший по профессии 2014
Лучший по профессии 2011
Лучший по профессии 2009
 
4,622 / 2925 (107) +++++++++
Регистрация: 16.01.2004
Записей в блоге: 5
Что-то типа Decision table
Старый 25.09.2014, 15:05   #6  
skuull is offline
skuull
Участник
Most Valuable Professional
Лучший по профессии 2014
 
700 / 752 (27) +++++++
Регистрация: 08.03.2013
Адрес: ХЗ
Цитата:
Сообщение от Kabardian Посмотреть сообщение
Действительно, а какой смысл такой конструкции?))
Смысл свича по контейнеру? А почему бы и нет
Мне больше инетересно почему оно падает только в дебаге
Старый 25.09.2014, 15:35   #7  
belugin is offline
belugin
Участник
Аватар для belugin
Сотрудники Microsoft Dynamics
Лучший по профессии 2017
Лучший по профессии 2015
Лучший по профессии 2014
Лучший по профессии 2011
Лучший по профессии 2009
 
4,622 / 2925 (107) +++++++++
Регистрация: 16.01.2004
Записей в блоге: 5
Цитата:
Сообщение от DSPIC Посмотреть сообщение
Я бы на месте сервера тоже упал бы, увидев такую конструкцию
Баги сервера потихонечку переселяются в мозг X++ программиста и поражают его часть, отвечающую за логику

Почему контейнеры можно сравнивать и использовать в качестве ключа у map но использование в case - это что-то запредельное?
За это сообщение автора поблагодарили: skuull (1).
Старый 25.09.2014, 15:37   #8  
S.Kuskov is offline
S.Kuskov
Участник
Лучший по профессии 2017
Лучший по профессии 2015
Лучший по профессии 2014
 
3,440 / 1775 (66) ++++++++
Регистрация: 28.04.2007
Адрес: Калуга
Цитата:
Сообщение от belugin Посмотреть сообщение
Почему контейнеры можно сравнивать и использовать в качестве ключа у map но использование в case - это что-то запредельное?
Использовать можно - отлаживать нельзя
Старый 25.09.2014, 15:56   #9  
Kabardian is offline
Kabardian
Талантливый разгвоздяй
Аватар для Kabardian
 
424 / 338 (12) ++++++
Регистрация: 14.12.2008
Адрес: Москва
Записей в блоге: 14
Ну против контейнера в свиче ничего не имею, пример удивил.. Искал тайный смысл.
Старый 25.09.2014, 16:58   #10  
skuull is offline
skuull
Участник
Most Valuable Professional
Лучший по профессии 2014
 
700 / 752 (27) +++++++
Регистрация: 08.03.2013
Адрес: ХЗ
Цитата:
Сообщение от belugin Посмотреть сообщение
Почему контейнеры можно сравнивать и использовать в качестве ключа у map но использование в case - это что-то запредельное?
Так же подумали ребята из MS :
Цитата:
Resolved this bug as ‘Won’t Fix’. We can consider this for fixing when we have customer reporting this issue.

Also, this seems to be a corner scenario where in we are using the

Switch statement is using the container type.
За это сообщение автора поблагодарили: mazzy (2).
Старый 25.09.2014, 17:20   #11  
belugin is offline
belugin
Участник
Аватар для belugin
Сотрудники Microsoft Dynamics
Лучший по профессии 2017
Лучший по профессии 2015
Лучший по профессии 2014
Лучший по профессии 2011
Лучший по профессии 2009
 
4,622 / 2925 (107) +++++++++
Регистрация: 16.01.2004
Записей в блоге: 5
Цитата:
Сообщение от skuull Посмотреть сообщение
Так же подумали ребята из MS :
Я думаю, если падение сервера было заранее предусмотрено, это был бы By Design а не WontFix
Старый 25.09.2014, 23:14   #12  
DSPIC is offline
DSPIC
Боец
 
1,077 / 1243 (44) ++++++++
Регистрация: 11.04.2008
Цитата:
Сообщение от belugin Посмотреть сообщение
Баги сервера потихонечку переселяются в мозг X++ программиста и поражают его часть, отвечающую за логику

Почему контейнеры можно сравнивать и использовать в качестве ключа у map но использование в case - это что-то запредельное?
За баг в мозгу спасибо
Ничего запредельного, но конструкция неудачная - нетипичная, редкая (если вообще где-то встречается), режет глаз, вводит в ступор, нечитабельна. В данном тестовом примере ее еще можно прочесть - контейнер "раскрыт". Если же там будут переменные кейзиться, то будет еще сложнее.
Наличие бага в последней версии системы подтверждает неюзабельность конструкции и не вызывает удивления.
В целом же, я избегаю использование контейнеров настолько, насколько это возможно (разве что str2con/con2str) и всем настоятельно рекомендую.

Ну а глядя в целом на AX2012, на ее новые фреймворки, UIs, схватившись за голову, становится очевидным, что у MS-разработчиков вообще нет понятия запредельности...
Уверен, вы еще не раз нас удивите и не такими конструкциями
Старый 26.09.2014, 06:47   #13  
belugin is offline
belugin
Участник
Аватар для belugin
Сотрудники Microsoft Dynamics
Лучший по профессии 2017
Лучший по профессии 2015
Лучший по профессии 2014
Лучший по профессии 2011
Лучший по профессии 2009
 
4,622 / 2925 (107) +++++++++
Регистрация: 16.01.2004
Записей в блоге: 5
Цитата:
Сообщение от DSPIC Посмотреть сообщение
За баг в мозгу спасибо
У меня совершенно такой же баг
Старый 26.09.2014, 07:30   #14  
S.Kuskov is offline
S.Kuskov
Участник
Лучший по профессии 2017
Лучший по профессии 2015
Лучший по профессии 2014
 
3,440 / 1775 (66) ++++++++
Регистрация: 28.04.2007
Адрес: Калуга
workaround или точнее сказать debugaround:
X++:
    switch (true)
    {
        case [tablenum(InventTable), tablenum(LedgerTable)] == [tablenum(InventTable), tablenum(LedgerTable)]:
            info('test');
    }
Старый 26.09.2014, 08:40   #15  
belugin is offline
belugin
Участник
Аватар для belugin
Сотрудники Microsoft Dynamics
Лучший по профессии 2017
Лучший по профессии 2015
Лучший по профессии 2014
Лучший по профессии 2011
Лучший по профессии 2009
 
4,622 / 2925 (107) +++++++++
Регистрация: 16.01.2004
Записей в блоге: 5
Цитата:
Сообщение от S.Kuskov Посмотреть сообщение
workaround или точнее сказать debugaround:
X++:
    switch (true)
    {
        case [tablenum(InventTable), tablenum(LedgerTable)] == [tablenum(InventTable), tablenum(LedgerTable)]:
            info('test');
    }
Тогда непонятно зачем тут switch - это скрывает цель кода я бы сделал лучше:

X++:
container key = [x, y];

if (key == [1, 2])
{
}
else if (key == [2, 3])
{
}
else
{
}
Старый 26.09.2014, 10:01   #16  
S.Kuskov is offline
S.Kuskov
Участник
Лучший по профессии 2017
Лучший по профессии 2015
Лучший по профессии 2014
 
3,440 / 1775 (66) ++++++++
Регистрация: 28.04.2007
Адрес: Калуга
Цитата:
Сообщение от belugin Посмотреть сообщение
Тогда непонятно зачем тут switch
Чисто теоретически в switch можно при необходимости пропустить break

P.S.: Вот в этой ветке уже было обсуждение elseif VS switch

Последний раз редактировалось S.Kuskov; 26.09.2014 в 10:11.
 

Похожие темы
Тема Автор Раздел Ответов Посл. сообщение
ax2009: сервер постоянно что-то делает. почему? mazzy DAX: Администрирование 28 01.06.2016 16:58
emeadaxsupport: Dynamics AX 2012 / R2 Retail: Switch from online to offline database is slow Blog bot DAX Blogs 0 19.11.2013 14:11
Отладка на сервере Bega DAX: Программирование 6 21.02.2011 15:38
fatihdemirci: Switch İfadesi Blog bot DAX Blogs 0 23.09.2010 05:27
Использование like в switch'е IvanS DAX: Программирование 7 02.11.2009 13:26

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

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

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