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

 
 
Опции темы Поиск в этой теме Опции просмотра
Старый 27.03.2013, 13:05   #1  
Perc is offline
Perc
Участник
 
194 / 57 (2) ++++
Регистрация: 05.03.2005
Вывести сообщение сгенерированное в отдельном потоке (thread) в окно инфо?
Собственно тема.
Сам не делал и не попались ни где примеры. В обработке запущенной в отдельном потоке время от времени могут случаться исключения с ошибкой. Если это не поток, то все нормально информативно выводиться в окно инфо. Но не знаю как выловить текст ошибки исключения если обработка запускается в потоке?
Работаю на DAX4.
Старый 27.03.2013, 13:13   #2  
ice is offline
ice
Участник
Аватар для ice
Лучший по профессии 2014
 
1,731 / 406 (17) +++++++
Регистрация: 23.03.2006
пишите в таблицу или файл
Старый 27.03.2013, 14:12   #3  
Perc is offline
Perc
Участник
 
194 / 57 (2) ++++
Регистрация: 05.03.2005
Цитата:
Сообщение от ice Посмотреть сообщение
пишите в таблицу или файл
Не годится. Это значит я должен брать под контроль ловлю и вывод всех исключений. Но если я это буду делать, то мне и ни файл ни таблица не нужна. Поскидаю в контейнер и верну через параметры.
Я имею ввиду случай когда исключения не я сам генерю, а система. Типа разношу чтото, а там наличия например нет. Или пишу в файл, а пути по которому пишу нет. Обычно аксапта в таких случаях чтото вразумительное в окно сообщений выводит, а если делаю те же операции в отдельном потоке, то никаких сообщений, и выловить не знаю их откуда.
Старый 27.03.2013, 14:12   #4  
imir is offline
imir
Участник
 
159 / 161 (6) ++++++
Регистрация: 28.05.2010
Функция, запускающая поток всегда принимает контейнер и отдает тоже контейнер, при запуске в потоке - у вас есть объект thread, не теряйте его, подождите ответа (в цикле со sleep допустим), ответ получается thread.getOutputParm (на память).

UPD По try catch можно отловить момент возникновения варинингов и ерроров, в обработчике пакуйте инфолог и OutputParm его

Последний раз редактировалось imir; 27.03.2013 в 14:16.
Старый 27.03.2013, 14:35   #5  
ice is offline
ice
Участник
Аватар для ice
Лучший по профессии 2014
 
1,731 / 406 (17) +++++++
Регистрация: 23.03.2006
Цитата:
Сообщение от Perc Посмотреть сообщение
Не годится. Это значит я должен брать под контроль ловлю и вывод всех исключений. Но если я это буду делать, то мне и ни файл ни таблица не нужна. Поскидаю в контейнер и верну через параметры.
Я имею ввиду случай когда исключения не я сам генерю, а система. Типа разношу чтото, а там наличия например нет. Или пишу в файл, а пути по которому пишу нет. Обычно аксапта в таких случаях чтото вразумительное в окно сообщений выводит, а если делаю те же операции в отдельном потоке, то никаких сообщений, и выловить не знаю их откуда.
используйте для таких случаев пакетник
Старый 27.03.2013, 14:38   #6  
Perc is offline
Perc
Участник
 
194 / 57 (2) ++++
Регистрация: 05.03.2005
Цитата:
Сообщение от ice Посмотреть сообщение
используйте для таких случаев пакетник
Про пакетники я в курсе и про много еще чего. Я не в курсе по работу потоков). В моем случае нужен конкретно отдельный поток.
Старый 27.03.2013, 14:57   #7  
Perc is offline
Perc
Участник
 
194 / 57 (2) ++++
Регистрация: 05.03.2005
Цитата:
Сообщение от imir Посмотреть сообщение
Функция, запускающая поток всегда принимает контейнер и отдает тоже контейнер, при запуске в потоке - у вас есть объект thread, не теряйте его, подождите ответа (в цикле со sleep допустим), ответ получается thread.getOutputParm (на память).

UPD По try catch можно отловить момент возникновения варинингов и ерроров, в обработчике пакуйте инфолог и OutputParm его
Вот чтобы совсем просто и конкретно код метода который запускается в потоке
X++:
static client void runThread(Thread t)
{
    real    x=10, y, z;
    container retVal;
    ;
    try  {
        z = x/y;
    }
    catch (exception::error)
    {
        retVal = [infoLog.num()];
        t.setOutputParm(retVal);
        throw exception::error;
    }
    retVal = [infoLog.num()];
    t.setOutputParm(retVal);
}
А вот и сам метод создающий поток
X++:
static client Thread run()
{
    Thread t = new Thread();
    ;
    t.run( classnum( TutorialThread ), identifierstr(runThread));
    info(con2str(t.getOutputParm()));
}
Но info у меня при таком раскладе выводит 0. Чего то не догоняю, либо не умею работать с инфологом.
Старый 28.03.2013, 12:11   #9  
Perc is offline
Perc
Участник
 
194 / 57 (2) ++++
Регистрация: 05.03.2005
Цитата:
Сообщение от vallys Посмотреть сообщение
Интересно, а для какой цели вы используете поток(и)?
Терминал аксапты переехал на терминал с новым виндусом. Пошли проблемы с печатью форм в ексель и ворд из Аксапты через СОМ. У нас их очень нужных есть несколько штук. Переписывать тяжко. Хочется малой кровью. Почитал что пишет народ про эту проблему. Из рассмотренных мероприятий эффективным показал себя именно вариант формирования отчета в Ворд в отдельном потоке. Мы работаем на DAX4, но тут я еще вспомнил. Когда смотрел доработки по корректировочным счетам-фактурам в DAX2009 меня удивил замысловатый способ формирования корректировочной фактуры в ексель. Не понял зачем так). Теперь думаю микрософт решал видимо туже проблему).

Но вот только в этой методе меня шибко не устраивает, что все проверки предотчетные и возможные сбои о которых обычно Аксапта извещает както в инфолог , теперь не отображаются автоматом. Молчок и все). Вот хотелось это както победить по скорому. Но не получилось пока...
Старый 29.03.2013, 12:37   #10  
Perc is offline
Perc
Участник
 
194 / 57 (2) ++++
Регистрация: 05.03.2005
Удалось таки решить свою проблему с помощью ссылок зала и экспериментов). Заодно подучился данные инфолога сохранять и восстанавливать)
Выше там у меня пример был почти все верно написан, за исключением нюанса. После thread.run(, нужно было вставить ожидание thread.waitUntilSignaled(); А то получалось соответственно, что заполнял инфолог позже того как пытался посмотреть в нем данные..
Ну и главное любимые наши формы вордовские стали выводиться без выкидонов)
Теги
thread

 

Похожие темы
Тема Автор Раздел Ответов Посл. сообщение
Как работает генерируемый дизайн (последовательность) alicedr DAX: Программирование 5 10.07.2012 11:41
gatesasbait: Logging independently of transaction scope by using a separate thread in Dynamics AX Blog bot DAX Blogs 0 27.05.2009 23:16
при построении перекрёстных ссылок выдаётся сообщение об ошибках mmmax DAX: Программирование 10 21.01.2005 12:42
Выполнение запросов в отдельном потоке sergy DAX: Программирование 10 26.11.2004 12:00
Как вывести сообщение ДО того как начнется длительная операция? SnowMan DAX: Программирование 5 26.08.2003 14:42
Опции темы Поиск в этой теме
Поиск в этой теме:

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

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

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

Рейтинг@Mail.ru
Часовой пояс GMT +3, время: 18:24.