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

 
 
Опции темы Поиск в этой теме Опции просмотра
Старый 12.09.2011, 11:16   #1  
Eldar9x is offline
Eldar9x
MCTS
Аватар для Eldar9x
Oracle
MCBMSS
 
1,064 / 166 (8) ++++++
Регистрация: 29.09.2006
Адрес: Казань
Как перехватывать ошибки доступа
Зравствуйте. Как перехватывать ошибки доступа, если класс AsciiIo не выбрасывает исключения типа Exception::CLRError. То есть вот так не получится, вроде:

X++:
    try
    {
        new FileIOPermission(fileName, this.fileMode()).assert();
        ret = new AsciiIo(fileName, this.fileMode());
        ret.outFieldDelimiter(_fieldDelimiter);
        ret.inFieldDelimiter(_fieldDelimiter);
        CodeAccessPermission::revertAssert();
    }
    catch (Exception::CLRError)
    {
        throw error(AifUtil::getClrErrorMessage());
    }
Ax 2009
Старый 12.09.2011, 11:43   #2  
AndyD is offline
AndyD
Участник
КОРУС Консалтинг
Лучший по профессии 2015
Лучший по профессии 2014
Лучший по профессии AXAWARD 2013
Лучший по профессии 2011
 
2,560 / 2479 (88) +++++++++
Регистрация: 20.08.2005
Это внутренний класс Аксапты. К CLR он не имеет оношение. Обрабатывать надо Exception::Error

Но вообще, при невозможности открыть файл (из-за его отсутствия при чтении или при недостатке прав) не создается сам экземпляр класса AsciiIo, т.е. надо обрабатывать так
X++:
ret = new AsciiIo(fileName, this.fileMode());
if (!ret)
    throw Error('Нет доступа или файла');
__________________
Axapta v.3.0 sp5 kr2
За это сообщение автора поблагодарили: Eldar9x (5), Kabardian (3).
Старый 12.09.2011, 11:51   #3  
Eldar9x is offline
Eldar9x
MCTS
Аватар для Eldar9x
Oracle
MCBMSS
 
1,064 / 166 (8) ++++++
Регистрация: 29.09.2006
Адрес: Казань
Спасибо
Старый 12.09.2011, 15:06   #4  
niksen is offline
niksen
Участник
Самостоятельные клиенты AX
 
284 / 28 (1) +++
Регистрация: 05.07.2011
Адрес: Татарстан
а если использовать
X++:
while "условие" 
{
 try
 {
  ttsbegin;
   ...
  ttscommit;
 }
 catch (Exception::Error)
 {
  ...
 }
}
то почему-то отменяются сразу все транзакции, которые возникают при ошибке, хотя оператор try стоит внутри цикла, то это опять же ошибка доступа или что это? как с этим бороться? и что самое интересное, цикл останавливается насовсем

Последний раз редактировалось niksen; 12.09.2011 в 15:09.
Старый 12.09.2011, 15:17   #5  
AndyD is offline
AndyD
Участник
КОРУС Консалтинг
Лучший по профессии 2015
Лучший по профессии 2014
Лучший по профессии AXAWARD 2013
Лучший по профессии 2011
 
2,560 / 2479 (88) +++++++++
Регистрация: 20.08.2005
А у вас "снаружи" цикла нет вызовов ttsbegin/ttscommit?
__________________
Axapta v.3.0 sp5 kr2
Старый 12.09.2011, 15:28   #6  
niksen is offline
niksen
Участник
Самостоятельные клиенты AX
 
284 / 28 (1) +++
Регистрация: 05.07.2011
Адрес: Татарстан
нет
X++:
while (io.status() == IO_Status::Ok)
    {
        c = io.read();
        if (io.status() != IO_Status::Ok)
        {
            break;
        }

        try
        {
        ttsbegin;
                 {
                    ++updated;

                    select forupdate BOM;
                        {
                            axBOM = axBOM::construct();
                            axBOM.boM(BOM);
                            this.FillFields();
                            axBOM.validateInput(true);
                            axBOM.save();
                            BOM = axBOM.BOM();
                        }
                          info('обновлена/создана запись ' + BOMId);
                          info('для ' + itemId);


                  }

        ttscommit;
        }
        catch (Exception::Error)
        {
         info('найдена ошибка');
        }
    }
вот этот кусок кода, ничего сверхъестественного, а какая-то непонятная вещь получается, вроде раньше всегда работало, а тут - нет, пока из файла считывается без ошибок, добавляются все записи, стоит дойти до ошибочной, даже если дальше записи якобы добавились, они всё равно сохраняются в таблицы, что очень странно
Старый 12.09.2011, 15:44   #7  
AndyD is offline
AndyD
Участник
КОРУС Консалтинг
Лучший по профессии 2015
Лучший по профессии 2014
Лучший по профессии AXAWARD 2013
Лучший по профессии 2011
 
2,560 / 2479 (88) +++++++++
Регистрация: 20.08.2005
А что такое "ошибочная запись"?
Как эта ошибка проявляется?

Кстати,
X++:
        c = io.read();
        if (io.status() != IO_Status::Ok)
        {
            break;
        }
а вы здесь последнюю запись не теряете?

Не правильнее было бы так?
X++:
        c = io.read();
        if ( == connull())
        {
            continue;
        }
__________________
Axapta v.3.0 sp5 kr2
Старый 12.09.2011, 16:16   #8  
niksen is offline
niksen
Участник
Самостоятельные клиенты AX
 
284 / 28 (1) +++
Регистрация: 05.07.2011
Адрес: Татарстан
попробовал
X++:
        c = io.read();
        if ( == connull())
        {
            continue;
        }
не помогло
Под ошибочной записью понимается например запись, когда случайно записываем данные к несуществующей записи. В данном случае так и получается, люди, которые должны были подготовить данные, подготовили их не очень хорошо, где-то записи есть, где-то их нет, если использовать всё без классов, то надо вручную писать все проверки, то есть переписывать функционал класса, а так гораздо проще, но непонятно, где же что-то затерялось
При этом разницы нет, если я вынесу try-catch из цикла, записи в любом случае не добавляются и не обновляются, если возникла хотя бы одна ошибка
Старый 12.09.2011, 17:08   #9  
niksen is offline
niksen
Участник
Самостоятельные клиенты AX
 
284 / 28 (1) +++
Регистрация: 05.07.2011
Адрес: Татарстан
сам нашёл решение данной проблемы, причём даже стыдно
я забыл про
X++:
              select forupdate BOM
                        where (BOM.BOMId == BomId);
поэтому обновлялась только последняя запись
 

Похожие темы
Тема Автор Раздел Ответов Посл. сообщение
Логирование изменений и открытие доступа к домену Logger DAX: Программирование 8 17.05.2011 19:58
Организация доступа внешних веб-пользователей к DAX 4.0 alex55 DAX: Администрирование 1 07.06.2009 17:48
Экспорт/Импорт прав доступа Anais DAX: Администрирование 28 11.11.2006 21:44
глюк с правами доступа Nikolaich DAX: Администрирование 2 27.06.2006 14:25
Проблемы настройки прав доступа пользователям axot DAX: Администрирование 25 16.05.2002 10:47

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

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

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