|
|
|
|
#1 |
|
Участник
|
Zitat:
На самом деле метод overwriteSystemfields() предназначен для другого - изменить значения системных полей у вновь создаваемых записей. Ниже пример, таблица Test - имеет одно текстовое поле ItemId. X++: static void SRF_Test(Args _args) { Test test; ; test.ItemId = 'dmo'; test.overwriteSystemfields(true); test.(fieldNum(Test, DataAreaId)) = 'dmo'; test.insert(); }
__________________
Sergey Nefedov |
|
|
|
| This post has been rated by: lev (4), S.Kuskov (1). | |
|
|
#2 |
|
Administrator
|
Zitat:
Zitat:
Более того - их можно изменить X++: static void Job(Args _args) { VendTable vendTable; ; ttsbegin; select forupdate vendTable; info(strfmt("%1 %2", vendTable.AccountNum, vendTable.modifiedBy)); vendTable.overwriteSystemfields(true); vendTable.(fieldnum(VendTable, modifiedBy)) = 'zzzz'; vendTable.doUpdate(); ttscommit; info(strfmt("%1 %2", vendTable.AccountNum, vendTable.modifiedBy)); } При этом пользователя zzzz может не существовать в базе DAX 4.0 SP2
__________________
Возможно сделать все. Вопрос времени Geändert von sukhanchik (16.10.2009 um 09:41 Uhr) |
|
|
|
|
#3 |
|
Участник
|
Zitat:
Zitat von sukhanchik
А с чего Вы взяли?
Вот это неправда. На поля modified* вполне можно таким образом воздействовать. Они не изменятся при вызове update если вызвать overwriteSystemFields(true). Более того - их можно изменить X++: static void Job(Args _args) { VendTable vendTable; ; ttsbegin; select forupdate vendTable; info(strfmt("%1 %2", vendTable.AccountNum, vendTable.modifiedBy)); vendTable.overwriteSystemfields(true); vendTable.(fieldnum(VendTable, modifiedBy)) = 'zzzz'; vendTable.doUpdate(); ttscommit; info(strfmt("%1 %2", vendTable.AccountNum, vendTable.modifiedBy)); } При этом пользователя zzzz может не существовать в базе DAX 4.0 SP2 У меня на DAX 4.0 TAP 3(виртуалка по 4-ке от МС) Ваш job не изменил значение поля modifiedBy. То, что выводится в инфолог, еще не значит, что значения изменились в таблице .Поставьте перед вторым info или посмотрите значение в базе X++: vendTable.reread();
__________________
Sergey Nefedov |
|
|
|
|
#4 |
|
Administrator
|
Ваша правда. Я забыл, что для этого требуется изменения хотя бы одного поля.
X++: static void Job(Args _args) { VendTable vendTable; ; ttsbegin; select forupdate vendTable; info(strfmt("%1 %2", vendTable.AccountNum, vendTable.modifiedBy)); ttscommit; return; vendTable.overwriteSystemfields(true); vendTable.Address += ' '; vendTable.(fieldnum(VendTable, modifiedBy)) = 'zzzz'; vendTable.doUpdate(); ttscommit; info(strfmt("%1 %2", vendTable.AccountNum, vendTable.modifiedBy)); vendTable.reread(); info(strfmt("%1 %2", vendTable.AccountNum, vendTable.modifiedBy)); }
__________________
Возможно сделать все. Вопрос времени |
|
|
|
| This post has been rated by: SRF (1). | |
| Stichworte |
| update_recordset, законченный пример, как правильно, полезное, системые поля |
|
|
|