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.
Теги
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, время: 02:58.