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

 
 
Опции темы Поиск в этой теме Опции просмотра
Старый 01.04.2014, 22:14   #1  
IKA is offline
IKA
Участник
 
359 / 65 (3) ++++
Регистрация: 15.03.2006
Чудеса salesTable.validateWrite()
Такая вот интересная вещь:
Есть код создающий в цикле шапку закупки и строки, потом снова на след итерации шапку и строки
X++:
while - 
{
     if()
     {
          //salesTable = null; только это спасает
          salesTable.clear();
     .....
          if (salesTable.validateWrite())
               salesTable.insert();
  }
....  
}
на втором прохождении цикла заказ не создается, тк выдается ошибка Заказ не может быть изменен. ( @sys2650 )
Происходит из-за того, что несмотря на salesTabel.clear(), кот очищает поля и Recid(я это вижу в дебаггере) , потом в salesTableType->validateWrite вызов salesTable.orig() возвращает буфер, созданный на предыдущей итерации , т.е clear() не очищает orig()
reread перед clear не помогает, initValue после него - тоже
Ест-но, помогает только salesTable = null перед salesTable.clear(); но обычно же так не пишем

Тут как-то спрашиали зачем табличным буферам null присваивают. Может, чтоб вот таких сюрпризов избегать?

AX2012 R2

Последний раз редактировалось IKA; 01.04.2014 в 23:34.
Старый 02.04.2014, 05:43   #2  
dech is offline
dech
Участник
Аватар для dech
Самостоятельные клиенты AX
 
647 / 350 (13) ++++++
Регистрация: 25.06.2009
Адрес: Омск
Записей в блоге: 3
Простите, не понял что за цикл: while select или просто while?
Если просто while, то цикл должен закончится только по break (ну или ни разу не начаться, если таблица пустая).
И... это самописный код? или прямо от Microsoft? Тогда подскажите, где он расположен? Очень интересно взглянуть на полную картину действий.
__________________
// no comments
Старый 02.04.2014, 10:51   #3  
S.Kuskov is offline
S.Kuskov
Участник
Лучший по профессии 2017
Лучший по профессии 2015
Лучший по профессии 2014
 
3,438 / 1775 (66) ++++++++
Регистрация: 28.04.2007
Адрес: Калуга
оригинальный orig
За это сообщение автора поблагодарили: Logger (1), IKA (1).
Старый 02.04.2014, 11:51   #4  
byte is offline
byte
Участник
 
36 / 31 (2) +++
Регистрация: 21.08.2007
По-моему salesTable = null - нормальное решение.
Старый 02.04.2014, 12:10   #5  
IKA is offline
IKA
Участник
 
359 / 65 (3) ++++
Регистрация: 15.03.2006
While select
но это не принципиально. проблема именно та же, на которую дал ссылку S.Kuskov

Последний раз редактировалось IKA; 02.04.2014 в 12:13.
Старый 02.04.2014, 13:41   #6  
gl00mie is offline
gl00mie
Участник
MCBMSS
Most Valuable Professional
Лучший по профессии 2017
Лучший по профессии 2015
Лучший по профессии 2014
Лучший по профессии AXAWARD 2013
Лучший по профессии 2011
Лучший по профессии 2009
 
3,684 / 5798 (201) ++++++++++
Регистрация: 28.11.2005
Адрес: Москва
Записей в блоге: 3
Цитата:
Сообщение от IKA Посмотреть сообщение
Есть код создающий в цикле шапку закупки и строки, потом снова на след итерации шапку и строки
X++:
//salesTable = null; только это спасает
salesTable.clear();
.....
if (salesTable.validateWrite())
    salesTable.insert();
Тут как-то спрашиали зачем табличным буферам null присваивают. Может, чтоб вот таких сюрпризов избегать?
AX2012 R2
Немного брюзжания: бороться с заморочками клиент-серверного orig - это, конечно, почетно и доблестно, но в общем и целом чтоб вот таких и многих других сюрпризов избегать, тем более на 2012-й, лучше для создания сложных и ответственных вещей, вроде шапок и строк заказов на продажу, использовать специально обученные AxBC-классы:
X++:
while ...
{
    axSalesTable = AxSalesTable::newValidateInput();
    ...
    axSalesTable.write();
    ...
    axSalesLine = AxSalesLine::construct();
    axSalesLine.validateInput(true);
    axSalesLine.axSalesTable(axSalesTable);
    ...
    axSalesLine.write();
}

Последний раз редактировалось gl00mie; 02.04.2014 в 13:44.
За это сообщение автора поблагодарили: IKA (1).
Старый 02.04.2014, 14:02   #7  
IKA is offline
IKA
Участник
 
359 / 65 (3) ++++
Регистрация: 15.03.2006
Где описано, что это теперь рекоммендованый подход? т.е в каких тренингах/книгах
Уж сразу, чтобы почитать и не натыкаться...на 2009 так тоже делали, конечно, но не оч кошерно считалось( тк не всегда классы должным образом поддерживались во время кастомизаций)
Старый 02.04.2014, 16:07   #8  
gl00mie is offline
gl00mie
Участник
MCBMSS
Most Valuable Professional
Лучший по профессии 2017
Лучший по профессии 2015
Лучший по профессии 2014
Лучший по профессии AXAWARD 2013
Лучший по профессии 2011
Лучший по профессии 2009
 
3,684 / 5798 (201) ++++++++++
Регистрация: 28.11.2005
Адрес: Москва
Записей в блоге: 3
Это скорее из личного опыта, см. также обсуждение В чем преимущество ax-классов перед непосредственной работой с таблицами?
Теги
ax-классы, ax2012, ax2012r2, axbc, как правильно

 

Похожие темы
Тема Автор Раздел Ответов Посл. сообщение
update in salesTable ashu DAX: Программирование 10 04.07.2011 09:39
RecordInsertList и validatewrite IKA DAX: Программирование 2 23.02.2010 19:27
Переход на первую строку SalesLine_ds при вызове SalesTable_ds.write() Владимир Максимов DAX: Программирование 4 02.10.2008 18:08
edit-методы и validateWrite() на DataSource gl00mie DAX: Программирование 6 30.06.2008 17:50
Join SalesTable-->SalesLine Eldar9x DAX: Программирование 9 06.06.2008 17:19

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

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

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