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

 
 
Опции темы Поиск в этой теме Опции просмотра
Старый 18.03.2016, 08:32   #1  
Pandasama is offline
Pandasama
Участник
 
457 / 134 (5) +++++
Регистрация: 11.08.2014
Адрес: Барнаул
Баг или фича - неожиданное поведение метода xRecord.data()
Вчера разрабатывая одну модификацию наткнулся на странный баг.
1) Берем запись таблицы.
2) Меняем в ней некоторые поля.
3) Затем отбираем для обновления эту же запись в другой курсор (отбирам по recid)
4) В запись для обновления записываем все поля измененной записи сразу – через метод .data()
5) Сохраняем запись, выбранную для обновления
6) Сохранилось все без ошибок, но запись в результате не изменяется.

Решилась проблема просто – вместо п.4 и использования метода .data() достаточно оказалось присвоить измененные поля напрямую.

Может быть кто-то знает, из-за какого механизма проявляется такое странное поведение при использовании метода data ?

Удалось повторить в виде джоба (баг замечен в 2009й и проверен в 4ке):

X++:
static void ButTestJob180316(Args _args)
{
    CustTable   custTable, custTable_upd;
    ;
    select custTable
        where custTable.accountNum == 'Иванов В.В.';
    print strfmt("оригинальная запись %1, %2, %3", custTable.RecId, custTable.AccountNum, custTable.Name);

    custTable.name += 'test';
    print strfmt("изменили имя %1, %2, %3", custTable.RecId, custTable.AccountNum, custTable.Name);

    ttsbegin;
    select forupdate custTable_upd
        where custTable_upd.RecId == custTable.RecId;
    print strfmt("выбрали ту же запись forUpdate %1, %2, %3", custTable_upd.RecId, custTable_upd.AccountNum, custTable_upd.Name);
    custTable_upd.data(custTable); //а это не работает
//custTable_upd.name = custTable.name; //это работает как надо
    print strfmt("перезаписали поля %1, %2, %3", custTable_upd.RecId, custTable_upd.AccountNum, custTable_upd.Name);
    custTable_upd.doUpdate();
    print strfmt("после сохранения %1, %2, %3", custTable_upd.RecId, custTable_upd.AccountNum, custTable_upd.Name);
    ttscommit;

    select custTable
        where custTable.accountNum == 'Иванов В.В.';
    print strfmt("снова перевыбрали запись %1, %2, %3", custTable.RecId, custTable.AccountNum, custTable.Name);

    pause;
}

Последний раз редактировалось Pandasama; 18.03.2016 в 08:44.
Старый 18.03.2016, 09:47   #2  
online
S.Kuskov
Участник
Лучший по профессии 2017
Лучший по профессии 2015
Лучший по профессии 2014
 
3,438 / 1775 (66) ++++++++
Регистрация: 28.04.2007
Адрес: Калуга
Встречал ситуацию, когда расходились данные в серверном и клиентском экземпляре одного и того же курсора. оригинальный orig
Может здесь что-то похожее. Попробуйте выполнить свой код на серверной стороне
Старый 18.03.2016, 10:25   #3  
_AV_ is offline
_AV_
Участник
 
29 / 19 (1) ++
Регистрация: 27.02.2008
Адрес: Санкт-Петербург
Потому что в вашем случае курсор через data() затирает инструкцию forupdate для курсора, выбранного для обновления,(В AX 3.0 об этом появляется соответствующее сообщение). Правильнее использовать buf2buf() класса Global.

Последний раз редактировалось _AV_; 18.03.2016 в 10:33. Причина: внес подробности
За это сообщение автора поблагодарили: S.Kuskov (2).
Старый 21.03.2016, 13:01   #4  
Pandasama is offline
Pandasama
Участник
 
457 / 134 (5) +++++
Регистрация: 11.08.2014
Адрес: Барнаул
Цитата:
Сообщение от _AV_ Посмотреть сообщение
Потому что в вашем случае курсор через data() затирает инструкцию forupdate для курсора, выбранного для обновления
Если бы просто затирал, то при выполнении update была бы ошибка, что "запись не выбрана для обновления". Т.е. какой-то другой механизм срабатывает, похоже
Теги
ax2009, баг, метод data, фича, ax4.0

 

Похожие темы
Тема Автор Раздел Ответов Посл. сообщение
kurthatlevik: Master data concepts Blog bot DAX Blogs 0 18.02.2016 12:11
emeadaxsupport: SEPA affected objects Blog bot DAX Blogs 0 29.11.2013 13:11
atinkerersnotebook: Using PowerPivot to Analyze Dynamics AX Data Blog bot DAX Blogs 1 05.10.2013 07:23
atinkerersnotebook: Using the Dynamics AX Excel Add-In Blog bot DAX Blogs 1 25.09.2013 07:11
ax-erp: Walkthrough: Creating a Report Bound to a Report Data Provider Class (X++ Business Logic) [AX 2012] Blog bot DAX Blogs 0 20.09.2012 11:11

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

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

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