AXForum  
Zurück   AXForum > Microsoft Dynamics AX > DAX: Программирование
All
Kennwort vergessen?
Registrieren Forum Rules Hilfe Benutzerliste Heutige Beiträge Suchen

 
 
Themen-Optionen Thema durchsuchen Ansicht
Alt 18.03.2016, 08:32   #1  
Pandasama ist offline
Pandasama
Участник
 
465 / 140 (5) +++++
Registriert seit: 11.08.2014
Ort: Барнаул
Баг или фича - неожиданное поведение метода 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;
}

Geändert von Pandasama (18.03.2016 um 08:44 Uhr)
Alt 18.03.2016, 09:47   #2  
S.Kuskov ist offline
S.Kuskov
Участник
Лучший по профессии 2017
Лучший по профессии 2015
Лучший по профессии 2014
 
3.448 / 1792 (66) ++++++++
Registriert seit: 28.04.2007
Ort: Калуга
Встречал ситуацию, когда расходились данные в серверном и клиентском экземпляре одного и того же курсора. оригинальный orig
Может здесь что-то похожее. Попробуйте выполнить свой код на серверной стороне
Alt 18.03.2016, 10:25   #3  
_AV_ ist offline
_AV_
Участник
 
29 / 19 (1) ++
Registriert seit: 27.02.2008
Ort: Санкт-Петербург
Потому что в вашем случае курсор через data() затирает инструкцию forupdate для курсора, выбранного для обновления,(В AX 3.0 об этом появляется соответствующее сообщение). Правильнее использовать buf2buf() класса Global.

Geändert von _AV_ (18.03.2016 um 10:33 Uhr) Grund: внес подробности
This post has been rated by: S.Kuskov (2).
Alt 21.03.2016, 13:01   #4  
Pandasama ist offline
Pandasama
Участник
 
465 / 140 (5) +++++
Registriert seit: 11.08.2014
Ort: Барнаул
Zitat:
Zitat von _AV_ Beitrag anzeigen
Потому что в вашем случае курсор через data() затирает инструкцию forupdate для курсора, выбранного для обновления
Если бы просто затирал, то при выполнении update была бы ошибка, что "запись не выбрана для обновления". Т.е. какой-то другой механизм срабатывает, похоже
Stichworte
ax2009, баг, метод data, фича, ax4.0

 

Ähnliche Themen
Thema Autor Forum Antworten Letzter Beitrag
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

Forumregeln
Es ist Ihnen nicht erlaubt, neue Themen zu verfassen.
Es ist Ihnen nicht erlaubt, auf Beiträge zu antworten.
Es ist Ihnen nicht erlaubt, Anhänge hochzuladen.
Es ist Ihnen nicht erlaubt, Ihre Beiträge zu bearbeiten.

BB-Code ist an.
Smileys sind an.
[IMG] Code ist an.
HTML-Code ist aus.
Gehe zu

Рейтинг@Mail.ru
Alle Zeitangaben in WEZ +3. Es ist jetzt 09:08 Uhr.
Powered by vBulletin® Version 3.8.5 (Deutsch)
Copyright ©2000 - 2025, Jelsoft Enterprises Ltd.