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

 
 
Опции темы Поиск в этой теме Опции просмотра
Старый 17.09.2010, 20:38   #1  
gl00mie is offline
gl00mie
Участник
MCBMSS
Most Valuable Professional
Лучший по профессии 2017
Лучший по профессии 2015
Лучший по профессии 2014
Лучший по профессии AXAWARD 2013
Лучший по профессии 2011
Лучший по профессии 2009
 
3,684 / 5788 (200) ++++++++++
Регистрация: 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).
Теги
баг, заказ на покупку, заказ на продажу, ошибка, форма

 

Похожие темы
Тема Автор Раздел Ответов Посл. сообщение
AX 4.0 Заказ на продажу на основании заказа на покупку Бигудь DAX: Функционал 12 06.10.2010 11:06
Грузополучатель в ТОРГ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, время: 10:14.
Powered by vBulletin® v3.8.5. Перевод: zCarot
Контактная информация, Реклама.