25.11.2021, 02:59 | #1 |
Участник
|
D365: как пронести буфер salesTable или отдельное поле через exception
D365fo, 10.0.20 и выше.
Во время разноски накладной пользовательские поля статусов таблицы salestable обновляются. Если после этого происходит exception (например, фискальный период не открыт), значения, естественно, затираются. Хотелось бы услышать рекомендации как правильно пронести нужные значения через try/catch в FormLetterService.runSinglethread() чтобы обновленные значения все-таки сохранились после отката. |
|
25.11.2021, 08:34 | #2 |
Участник
|
Состояние возвращается, потому что откатывается транзакция.Технически вы можете перед откатом транзакции создать отдельное подключение к базе данных и через него сохранить нужные данные (лучше в отдельную таблицу).
|
|
25.11.2021, 09:57 | #3 |
Участник
|
В предыдущих версиях аксапты runas открывал отдельную сесси в аксапте и как следствие, отдельное соединение к бд. Возможно что в 365й также. Тогда возможно проще было бы запускать обновляющий код через runas. Но все равно надо аккуратно с блокировками быть. Можно заблокировать себя и повиснуть.
|
|
25.11.2021, 11:19 | #4 |
Участник
|
Обычно попытки обновить SalesTable в отдельной сессии при разноске инвойса приводят к дедлокам, так как технически, мы пытаемся обновить ту же запись, что сейчас откатывается, и хорошо если все индексы на SalesTable родные и нет кастомных и никто не добавил кластерный индекс.
Мы пытались пару лет назад сделать аналогичное в AX2012 и подобная логика приводила к краху АОСа. Поэтому вопрос был как "пронести". Идея была сохранить где-нибудь в SalesParmtable, буфер которой можно достать из FormLetterService, но возможно есть лучшие идеи... |
|
29.11.2021, 15:25 | #5 |
Banned
|
Цитата:
Сообщение от alicedr
D365fo, 10.0.20 и выше.
Во время разноски накладной пользовательские поля статусов таблицы salestable обновляются. Если после этого происходит exception (например, фискальный период не открыт), значения, естественно, затираются. Хотелось бы услышать рекомендации как правильно пронести нужные значения через try/catch в FormLetterService.runSinglethread() чтобы обновленные значения все-таки сохранились после отката. Может быть они не должны присваиваится в этом процессе? Технически то все можно. Но разве не режет глаз что то не так изначально? Явно же кривой дизайн всего. Или это тот вариант когда аутсорс и без вариантов надо делать что просят? |
|
|
|