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

 
 
Опции темы Поиск в этой теме Опции просмотра
Старый 19.09.2013, 23:39   #1  
RVS is offline
RVS
Сенбернар
Аватар для RVS
Злыдни
 
696 / 130 (6) +++++
Регистрация: 27.02.2003
Адрес: Королев МО
try - catch и InfoLog
Торможу что-то:

Есть такая конструкция :

X++:
try
{
    while (amountIndex > 0)
    {
            
    // Получаем СОМ-объект из массива оных. Каждый элемент массива - это Заказ, по сути

    // Получаем значения полей записи из СОМ. 
[B][COLOR="Red"]    (!!!)[/COLOR][/B]
    ttsbegin;
	    
    // Пишем запись в таблицу
             
    ttscommit;

    // Переходим к следующему элементу массива СОМ-объектов
    amountIndex--;
    }
 }

 catch
 {
    error(strfmt('Заказ %1 %2 %3 не может быть импортирован', SalesId,  SalesCreatedDate, AccountId));

    amountIndex--;

    retry;
}
Прикол в том, что :

- в отладчике вижу, что error(...) выполняется
- в инфологе - сообщений нет

Барабашка?

DAX2009

Уточняю : весь массив обходится нормально, все заказы, которые "могут" импртироваться - импортируются. Инфолог внутри try - великолепно работает. Из catch - сообщения не появляются.. печалька..
__________________
Best Regards,
Roman

Последний раз редактировалось RVS; 19.09.2013 в 23:45.
Старый 19.09.2013, 23:53   #2  
gl00mie is offline
gl00mie
Участник
MCBMSS
Most Valuable Professional
Лучший по профессии 2017
Лучший по профессии 2015
Лучший по профессии 2014
Лучший по профессии AXAWARD 2013
Лучший по профессии 2011
Лучший по профессии 2009
 
3,684 / 5798 (201) ++++++++++
Регистрация: 28.11.2005
Адрес: Москва
Записей в блоге: 3
С учетом наличия retry внутри catch самое простое объяснение тут - это что внутри try есть кусок кода, который вырезает сообщения из infolog'а. "Барабашки нет" (с)
За это сообщение автора поблагодарили: MikeR (5).
Старый 19.09.2013, 23:59   #3  
RVS is offline
RVS
Сенбернар
Аватар для RVS
Злыдни
 
696 / 130 (6) +++++
Регистрация: 27.02.2003
Адрес: Королев МО
Нет, к сожалению. Внутри try - вообще нет работы с инфологом.

Идея всего этого - простейшая : загрузить все, что можно, из переданной пачки Заказов (каждый из них передан в виде отдельного COM-а), а обо всем, что загрузить не получилось (кривой КОМ передали, бывает..) - сообщить пользователю.

И все..
__________________
Best Regards,
Roman

Последний раз редактировалось RVS; 20.09.2013 в 00:06.
Старый 20.09.2013, 00:06   #4  
handy-comp is offline
handy-comp
Участник
 
96 / 78 (3) ++++
Регистрация: 27.09.2012
Может вся эта конструкция вызывается внутри транзакции?
Старый 20.09.2013, 00:07   #5  
RVS is offline
RVS
Сенбернар
Аватар для RVS
Злыдни
 
696 / 130 (6) +++++
Регистрация: 27.02.2003
Адрес: Королев МО
АААААА !!!! Неееет !!!

Это было первое, на что я смотрел зачем-то.

Нет. Точно )
__________________
Best Regards,
Roman
Старый 20.09.2013, 00:20   #6  
handy-comp is offline
handy-comp
Участник
 
96 / 78 (3) ++++
Регистрация: 27.09.2012
Походу вот в чем дело, система автоматом восстанавливает параметры по retry, вот описание: http://msdn.microsoft.com/en-us/library/aa849924.aspx
За это сообщение автора поблагодарили: Logger (3), demoded (1).
Старый 20.09.2013, 00:29   #7  
RVS is offline
RVS
Сенбернар
Аватар для RVS
Злыдни
 
696 / 130 (6) +++++
Регистрация: 27.02.2003
Адрес: Королев МО
Цитата:
Сообщение от handy-comp Посмотреть сообщение
Походу вот в чем дело, система автоматом восстанавливает параметры по retry, вот описание: http://msdn.microsoft.com/en-us/library/aa849924.aspx
Круть!

"The persistent variables (that is, the database and the Infolog) are set back automatically by the throw that leads to the catch/retry."

Только в моем-то случае - так :

- throw (зафиксировали InfoLog в состоянии "до throw")
- catch (в нем вывели в инфолог error(...))
- retry (ушли обратно в цикл)..

То есть, как бы - некому испортить то сообщение, что выведено внутри catch..

Не понимаю (с)
__________________
Best Regards,
Roman
Старый 20.09.2013, 00:47   #8  
handy-comp is offline
handy-comp
Участник
 
96 / 78 (3) ++++
Регистрация: 27.09.2012
И все таки именно так было задумано поведение Infolog при использовании retry , посмотрите sample 4 вот здесь: http://msdn.microsoft.com/en-us/library/aa893385.aspx
Приведу код примера прямо здесь:
X++:
static void TryCatchRetry4Job(Args _args)
{
/***
  Demonstration of 'retry'. The Infolog output is partially erased
by 'retry', but the Print window is fully displayed.
***/
    Exception excepnEnum;
    int nCounter = 0;
    ;
    try
    {
        info("        .");
        print("        .");
        info("In the 'try' block, [" + int2str(nCounter) + "]. (j4)");
        print("In the 'try' block, [" + int2str(nCounter) + "]. (j4)");
        pause;
        nCounter++;
        if (nCounter >= 3) // Prevent infinite loop.
        {
            info("---- Will now throw a warning, which is not caught.");
            print("---- Will now throw a warning, which is not caught.");
            pause;
            throw Global::warning("This warning will not be caught. [" + int2str(nCounter) + "]");
        }
        else
        {
            info("Did not throw a warning this loop. [" + int2str(nCounter) + "]");
            print("Did not throw a warning this loop. [" + int2str(nCounter) + "]");
        }
        excepnEnum = Global::error("This error message is written to the Infolog.");
        throw excepnEnum;
    }
    catch (Exception::Error)
    {
        info("Caught 'Exception::Error'.");
        print("Caught 'Exception::Error'.");
        retry;
    }
    info("End of job.");
    print("End of job.");
    pause;
/**********  Actual Infolog output
Message (04:33:56 pm)
        .
In the 'try' block, [2]. (j4)
---- Will now throw a warning, which is not caught.
This warning will not be caught. [3]
**********/
}

Последний раз редактировалось handy-comp; 20.09.2013 в 00:49.
За это сообщение автора поблагодарили: RVS (2).
Старый 20.09.2013, 01:08   #9  
RVS is offline
RVS
Сенбернар
Аватар для RVS
Злыдни
 
696 / 130 (6) +++++
Регистрация: 27.02.2003
Адрес: Королев МО
Цитата:
Сообщение от handy-comp Посмотреть сообщение
И все таки именно так было задумано поведение Infolog при использовании retry
Прочел невнимательно. "Whenever you have a retry, all the transient variables must be set back to the value they had just before the try. The persistent variables (that is, the database and the Infolog) are set back automatically by the throw that leads to the catch/retry."

То есть, говоря простым языком, вызов retry очищает инфолог до состояния, предшествующего try. Написано.. индийским английским, кстати..

Ща обойдем
__________________
Best Regards,
Roman

Последний раз редактировалось RVS; 20.09.2013 в 01:30.
За это сообщение автора поблагодарили: alex55 (1).
Старый 20.09.2013, 01:16   #10  
handy-comp is offline
handy-comp
Участник
 
96 / 78 (3) ++++
Регистрация: 27.09.2012
Цитата:
Сообщение от RVS Посмотреть сообщение
Прочел невнимательно. "Whenever you have a retry, all the transient variables must be set back to the value they had just before the try. The persistent variables (that is, the database and the Infolog) are set back automatically by the throw that leads to the catch/retry."

То есть, говоря простым языком, вызов retry очищает инфолог до состояния, предшествующего throw. Написано.. индийским английским, кстати..

Ща обойдем
Согласен, без примера, по этому описанию тяжеловато сразу понять что имелось ввиду.
 

Похожие темы
Тема Автор Раздел Ответов Посл. сообщение
DAX2009, try / catch не перехватывает исключение (не в транзакции) AR® DAX: Программирование 4 23.05.2013 15:29
ax-erp: Try Catch and transactions Blog bot DAX Blogs 0 29.10.2012 19:11
fatihdemirci: Try ve Catch Komutları Blog bot DAX Blogs 0 05.10.2010 22:05
try...catch при операциях с таблицей ushastik DAX: Программирование 1 09.03.2004 18:26
Глупый вопрос про try .. catch Vadik DAX: База знаний и проекты 6 12.03.2003 18:04

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

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

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