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

 
 
Опции темы Поиск в этой теме Опции просмотра
Старый 17.09.2010, 20:38   #1  
gl00mie is offline
gl00mie
Участник
MCBMSS
Most Valuable Professional
Лучший по профессии 2017
Лучший по профессии 2015
Лучший по профессии 2014
Лучший по профессии AXAWARD 2013
Лучший по профессии 2011
Лучший по профессии 2009
 
3,684 / 5798 (201) ++++++++++
Регистрация: 28.11.2005
Адрес: Москва
Записей в блоге: 3
Дыра в запрете редактирования шапок заказов на продажу/покупку
Стандартный подход к тому, как регулировать доступ к полям записи, состоит в том, чтобы на обработчик formDS.active() повесить некую логику, которая, скажем, будет управлять свойством formDS.allowEdit(). Примерно так же сделано в заказах на продажу и покупку, скажем, в SalesTable_DS.active() вызывается
X++:
element.editSales(salesTableForm.editHeaderAllowed());
и почти наверняка на каждом проекте в этой логике есть свои модификации. Так вот, в формах SalesTable/PurchTable создание новых заказов реализовано таким образом, что в этом стандартном подходе появляется зияющая дыра. Взглянем на код SalesTable_DS.create():
X++:
void create(boolean  append = true)
{
    SalesTable   newSalesTable;
    ;
    salesTableForm.interCompanyAutoCreateOrders();
    element.editSales(true);
    if (salesTableForm.create())
    {
        newSalesTable = SalesTable::find(salesTableForm.newSalesId());
        if (newSalesTable)
        {
            super(append);
            salesTable.data(newSalesTable);
            salesTable_ds.reread();
            tabLineOverview.setFocus();
        }
    }
    else
    {
        element.editSales(salesTableForm.editHeaderAllowed(), salesTableForm.deleteHeaderAllowed());
    }
}
Занятно здесь то, что возврат из salesTableForm.create() после безусловного разрешения редактирования текущего заказа происходит отнюдь не мгновенно, а лишь после того, как пользователь закроет форму создания заказа. В это время можно переключиться обратно на форму заказов и - о, чудо! - увидеть, что благодаря вызову element.editSales(true) шапка заказа независимо от его статуса стала доступна для редактирования. Конечно, на validateWrite() и write() остались проверки, которые могут воспрепятствовать изменению, к примеру, заказа в статусе "Отгружено", но сам факт того, что есть штатная возможность обойти логику, управляющую доступом к шапке заказа, как-то удручает. Эти рассуждения в равной степени касаются PurchTable, причем что в 3.0, что в AX 2009.

Решение у проблемы весьма простое: нужно в create() перенести вызов element.editSales(true) внутрь if непосредственно перед super() и аналогично поступить с вызовом element.editPurch(true) в форме PurchTable.
За это сообщение автора поблагодарили: mazzy (2), KiselevSA (2), Logger (3), aidsua (2), MikeR (2), Sergey Petrov (1).
Старый 19.09.2010, 01:28   #2  
AX2009
Гость
 
n/a
а что, service request в Microsoft автоматом с форума создается для исправления багов?
Старый 19.09.2010, 14:01   #3  
Maximin is offline
Maximin
NavAx
NavAx Club
 
412 / 346 (12) ++++++
Регистрация: 09.10.2002
Адрес: Москва
Мы эту проблему решили просто - сделав окно создания заказа SalesCreateOrder немодальной с параметром TopMost. В результате, переключиться никуда не выйдет. Кстати, описанная проблема - не единичная, в кач-ве направления раскопок могу привести форму сопоставления платежей - там тоже есть дырка наподобие. Да и вообще, разработчики часто забывают о том, что текущее окно - м.б. не единственным в системе.
__________________
Жизнь прекрасна! Если, конечно, правильно подобрать антидепрессанты...
Старый 19.09.2010, 14:21   #4  
gl00mie is offline
gl00mie
Участник
MCBMSS
Most Valuable Professional
Лучший по профессии 2017
Лучший по профессии 2015
Лучший по профессии 2014
Лучший по профессии AXAWARD 2013
Лучший по профессии 2011
Лучший по профессии 2009
 
3,684 / 5798 (201) ++++++++++
Регистрация: 28.11.2005
Адрес: Москва
Записей в блоге: 3
Цитата:
Сообщение от AX2009 Посмотреть сообщение
а что, service request в Microsoft автоматом с форума создается для исправления багов?
Смысл создания этой темы на форуме был в том, чтобы об этой дыре первыми узнали специалисты, обслуживающие систему, а не пользователи, которые могут использовать эту дыру в своих интересах.
Цитата:
Сообщение от Maximin Посмотреть сообщение
Мы эту проблему решили просто - сделав окно создания заказа SalesCreateOrder немодальной с параметром TopMost. В результате, переключиться никуда не выйдет.
Т.е. вы решили закрыть дыру за счет того, что форма создания заказа закрывает собой другие формы? А если у меня монитор с очень большим разрешением, и я могу просто сдвинуть форму создания заказа вбок, чтоб ничего не заслоняла? К слову, это реализуемо и на маленьком мониторе: достаточно создать терминальную сессию, указав для нее большое разрешение, и тогда "виртуальный" экран в этой сессии будет иметь большое разрешение, а на реальном мониторе у окна терминальной сессии просто появлятся полосы прокрутки. Или можно поставить два монитора, растянуть окно клиента Аксапты на оба и форму создания заказа вынести на один монитор, а форму заказов - на другой. Опять же, в 2009-й, по-моему, игры с параметром TopMost тоже не будет работать.
Старый 20.09.2010, 11:21   #5  
Maximin is offline
Maximin
NavAx
NavAx Club
 
412 / 346 (12) ++++++
Регистрация: 09.10.2002
Адрес: Москва
Цитата:
Т.е. вы решили закрыть дыру за счет того, что форма создания заказа закрывает собой другие формы? А если у меня монитор с очень большим разрешением, и я могу просто сдвинуть форму создания заказа вбок, чтоб ничего не заслоняла?
gloomie, не надо глумиться , чай, не дурнее паровоза.
Ключевое слово - "модальное". Т.е. фокус с него переместить на другое окно невозможно (за исключением окон, открытых уже после текущего). Не знаю, будет ли работать в 2009, думаю, если аккуратно написать, то будет. Впрочем, согласен, это в общем случае - не выход, надо править сам функционал. Но как решение для конкретной местной проблемы, не требующее много ресурсов - вполне пригодно.
__________________
Жизнь прекрасна! Если, конечно, правильно подобрать антидепрессанты...

Последний раз редактировалось Maximin; 20.09.2010 в 12:41.
Старый 20.09.2010, 12:20   #6  
AlexSD is offline
AlexSD
Microsoft Dynamics
Сотрудники Microsoft Dynamics
 
257 / 302 (11) ++++++
Регистрация: 14.10.2003
Всю жизнь считал, что с модального окна нельзя увести фокус... А тут вот как оказывается...
Старый 20.09.2010, 12:40   #7  
Maximin is offline
Maximin
NavAx
NavAx Club
 
412 / 346 (12) ++++++
Регистрация: 09.10.2002
Адрес: Москва
Уел , сейчас исправлю, писал одно - думал другое.
Цитата:
Сообщение от AlexSD Посмотреть сообщение
Всю жизнь считал, что с модального окна нельзя увести фокус... А тут вот как оказывается...
__________________
Жизнь прекрасна! Если, конечно, правильно подобрать антидепрессанты...
Теги
баг, заказ на покупку, заказ на продажу, ошибка, форма

 

Похожие темы
Тема Автор Раздел Ответов Посл. сообщение
AX 4.0 Заказ на продажу на основании заказа на покупку Бигудь DAX: Функционал 13 20.11.2024 17:12
Грузополучатель в ТОРГ12 и СФ d&m DAX: Функционал 22 29.06.2010 16:48
DAX 4.0 Покупка ОС через ЗАКАЗ НА ПОКУПКУ IntoTheRain DAX: Функционал 12 11.03.2010 22:32
Создание большого числа заказов на продажу. Падение скорости загрузки. bobski DAX: Программирование 30 29.04.2009 17:40
"Закупка на основе заказов" или "сводное планирование" Hamster DAX: Функционал 2 17.02.2004 01:47

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

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

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