|
![]() |
#1 |
Banned
|
Есть неплохой разбор в статье
https://community.dynamics.com/ax/b/...c-locking.aspx Но автор не все рассмотрел. Вот мои комментарии к статье своим собратьям на мерседесах. Цитата:
What normally I use in the most cases from version AX 4.0 and the author did not mention about that way.
while select myTable { ttsBegin; myTable.selectForUpdate(true); myTable.MyField = 'something'; myTable.update(); ttsCommit; } In versions 2.5 and 3.0 I even declared a second table buffer myTable_upd to select for update every record individually while the first buffer myTable was just for getting records and checking conditions. I might be wrong but despite a fact many developers use that new and probably modern style (i.e. select for update before ttsbegin) I am still concern 1. That article did not highlight how SQL Server behaves if locks or exceptions happened. Normally in T-SQL (in which X++ are translated) we use BEGIN { TRAN | TRANSACTION } before to select for update. 2. I have never seen official examples of code (MSDN, MCT materials) including AX 2012 where that modern style is used. Am I too old and not creative enough anymore? |
|
![]() |
#2 |
NavAx
|
А тебе не приходила в голову мысль о том, что марка машины и компетентность коррелируют слабо? Возможен ли такой вариант, что когда-то система ругнулась, что не хватает tts-ов, вот он их и вставил? Получил бонус, может даже повышение.
Может ли так случиться, что некий разработчик любой ценой будет отстаивать принятные решения исключительно для того, чтобы не потерять лицо и мерседес? И возможна ли такая ситуация, что ты роешь не код, а под своего пакистанского коллегу? Так вот, если это ваш случай, не думай что он этого не видит. Может в коде наши пакистанские коллеги не всегда разбираются, зато уж по части иерархии и карьеризма им можно большую фору дать.
__________________
Isn't it nice when things just work? |
|
|
За это сообщение автора поблагодарили: gl00mie (1). |
![]() |
#3 |
Banned
|
Цитата:
Сообщение от macklakov
![]() А тебе не приходила в голову мысль о том, что марка машины и компетентность коррелируют слабо? Возможен ли такой вариант, что когда-то система ругнулась, что не хватает tts-ов, вот он их и вставил? Получил бонус, может даже повышение.
Может ли так случиться, что некий разработчик любой ценой будет отстаивать принятные решения исключительно для того, чтобы не потерять лицо и мерседес? И возможна ли такая ситуация, что ты роешь не код, а под своего пакистанского коллегу? Так вот, если это ваш случай, не думай что он этого не видит. Может в коде наши пакистанские коллеги не всегда разбираются, зато уж по части иерархии и карьеризма им можно большую фору дать. Там еще и другая "фича" - этот метод (перебирающий записи в SalesTable и SalesLine и обновляющий их) находится внутри try catch retry. То есть при update conflict на одной записи вся таблица будет перебрана и обновлена заново ![]() Да бог с этим. Слава богу я контрактник и не в постоянном коллективе поэтому вопросы иерархии и карьеризма для меня упрощаются. |
|
![]() |
#4 |
Участник
|
Цитата:
Сообщение от ax_mct
![]() Есть неплохой разбор в статье
https://community.dynamics.com/ax/b/...c-locking.aspx What normally I use in the most cases from version AX 4.0 and the author did not mention about that way. while select myTable { ttsBegin; myTable.selectForUpdate(true); myTable.MyField = 'something'; myTable.update(); ttsCommit; } ![]() |
|
|
За это сообщение автора поблагодарили: ax_mct (2). |
|
|