AXForum  
Вернуться   AXForum > Microsoft Dynamics AX > DAX: Программирование
All
Забыли пароль?
Зарегистрироваться Правила Справка Пользователи Сообщения за день Поиск Все разделы прочитаны

 
 
Опции темы Поиск в этой теме Опции просмотра
Старый 23.03.2012, 09:56   #21  
online
ice
Участник
Аватар для ice
Лучший по профессии 2014
 
1,445 / 330 (14) ++++++
Регистрация: 23.03.2006
Цитата:
Сообщение от Pustik Посмотреть сообщение
Может подойти класс Tread. Поскольку Вам все равно нужно чистить таблицу вне зависимости выполнилась ли бизнесс-логика или нет, то конструкцию можно организовать на примере следующего джоба :
и где гарантия что не будет прерван код между запусками потоков?
Старый 23.03.2012, 12:11   #22  
Pustik is offline
Pustik
Участник
 
799 / 361 (14) ++++++
Регистрация: 04.06.2004
Цитата:
Сообщение от ice Посмотреть сообщение
и где гарантия что не будет прерван код между запусками потоков?
Гарантия в том, что ошибка при выполнении первого потока (БЛ) не остановит выполнение второго (ЧТ).В моем примере я четко указал на Throw error();
Если речь идет о полном отрубании электричества, крахом сервера и т.д. во время выполнения БЛ, то тут я бы использовал не таблицу лога запусков, а журнал запусков, где бы порекомендовал воспользоваться советом Alexanderis.ua. - аналогия разноски журналов.
__________________
-Ты в гномиков веришь?
-Нет.
-А они в тебя верят, смотри, не подведи их.
Старый 07.04.2020, 20:31   #23  
Raven Melancholic is offline
Raven Melancholic
Участник
Аватар для Raven Melancholic
Самостоятельные клиенты AX
Лучший по профессии 2015
 
1,906 / 1032 (38) ++++++++
Регистрация: 21.03.2005
Адрес: Москва-Петушки
Ух. Подниму тему из больших глубин, тем более, в ней поучаствовали много моих бывших коллег из "самого крупного department store".
Интересует именно изначальная формулировка темы:
Цитата:
можно ли поймать остановку выполнения кода из дебаггера?
Ситуация следующая.
Есть код синхронизации транзакций DAX и внешних соединений, основывается на обработке Application.ttsNotify* (подсмотрено у Коламбуса). Основной подход в коде:
X++:
connection = new UserConnection();
RegisterExternalConnection(connection );
try
  ttsBegin;
  connection.ttsBegin();
  ...
  ttsCommit;
В общем, когда срабатывает Application.ttsNotifyCommit подтверждаем и внешние соединения, когда срабатывает Application.ttsNotifyAbort откатываем внешние соединения.
Все работает в любых случаях, проблем нет - либо подтверждается, либо откатывается. Но, как говорят, есть нюанс. Если идти в отладчике и внутри транзакции сказать "Прекратить отладку", то Application.ttsNotify* не отрабатывает.
В итоге поймать момент, когда нужно вызвать connection.ttsabort() не получается, пока не закрою клиента транзакция внешнего соединения висит.
Все бы ничего, но в одном из кейсов во внешнем соединении вызывается мъютекс MS SQL SP_GETAPPLOCK и это дает некоторые не очень приятные последствия. Пока на DEV это еще не страшно, но на PROD некоторое время пользователи недовольны, так как есть еще другие места использования мъютекса.
Соответственно вопрос: можно ли поймать остановку выполнения кода из дебаггера?

Последний раз редактировалось Raven Melancholic; 07.04.2020 в 20:38.
Старый 07.04.2020, 23:58   #24  
online
Logger
Участник
Лучший по профессии 2015
Лучший по профессии 2014
 
3,311 / 2222 (81) +++++++++
Регистрация: 12.10.2004
Адрес: Москва
Записей в блоге: 2
Не проверял, но может попробовать поймать исключение break?
Старый 08.04.2020, 00:08   #25  
online
Logger
Участник
Лучший по профессии 2015
Лучший по профессии 2014
 
3,311 / 2222 (81) +++++++++
Регистрация: 12.10.2004
Адрес: Москва
Записей в блоге: 2
Можно в инфолог повесить циклический вызов метода каждые 5 секунд (по аналогии с warchdog) А в методе проверять жива ли транзакция. Если жива, то назначать следующий вызов через 5 секунд. Если нежива то проверять внешнее соединение. Если не закрыто то откатывать транзакцию и закрывать.

Как узнать жива ли транзакция? Проверить appl.Ttslevel() . Если транзакция открыта то проверииь ее номер. Кажется счетчик возвращается методом xApplication.CurTtslevel() или как то так. Точнее завтра напишу когда буду за компом.
Старый 08.04.2020, 09:43   #26  
online
Logger
Участник
Лучший по профессии 2015
Лучший по профессии 2014
 
3,311 / 2222 (81) +++++++++
Регистрация: 12.10.2004
Адрес: Москва
Записей в блоге: 2
Цитата:
Сообщение от Logger Посмотреть сообщение
...по аналогии с warchdog...
имел в виду
\Classes\Info\watchDog
\Classes\Info\autologOff
\Classes\Info\addTimeOut

Цитата:
Сообщение от Logger Посмотреть сообщение
... xApplication.CurTtslevel() ...
имел в виду
\System Documentation\Classes\xApplication\curTransactionId

Это, собственно, не ловля остановки выполнения кода из дебагера (я думаю это невозможно), но обходной маневр, который позволяет решить вашу проблему.
За это сообщение автора поблагодарили: Raven Melancholic (5).
 

Похожие темы
Тема Автор Раздел Ответов Посл. сообщение
Масштабируемость AOS'а AX 2009 и принципы выполнения кода клиентских сессий на сервере gl00mie DAX: Администрирование 27 28.05.2013 17:40
Перенос точки выполнения в отладчике DAX2009 Bega DAX: Программирование 3 21.02.2011 15:21
axforum blogs: Можно ли снизить стоимость внедрения ERP-системы? Blog bot DAX Blogs 0 11.02.2011 15:11
Ускорение выполнения запроса Oracle + MS Axapta Горбунов Дмитрий DAX: Программирование 17 15.11.2005 18:13
Как можно управлять элементом Grid из кода? vitk DAX: Программирование 4 26.08.2004 16:02
Опции темы Поиск в этой теме
Поиск в этой теме:

Расширенный поиск
Опции просмотра

Ваши права в разделе
Вы не можете создавать новые темы
Вы не можете отвечать в темах
Вы не можете прикреплять вложения
Вы не можете редактировать свои сообщения

BB коды Вкл.
Смайлы Вкл.
[IMG] код Вкл.
HTML код Выкл.
Быстрый переход

Рейтинг@Mail.ru
Часовой пояс GMT +3, время: 12:08.
Powered by vBulletin® v3.8.5. Перевод: zCarot
Контактная информация, Реклама.