|
|
#1 |
|
MCTS
|
Как перехватывать ошибки доступа
Зравствуйте. Как перехватывать ошибки доступа, если класс 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());
} |
|
|
|
|
#2 |
|
Участник
|
Это внутренний класс Аксапты. К 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). | |
|
|
#3 |
|
MCTS
|
Спасибо
|
|
|
|
|
#4 |
|
Участник
|
а если использовать
X++: while "условие" { try { ttsbegin; ... ttscommit; } catch (Exception::Error) { ... } } Последний раз редактировалось niksen; 12.09.2011 в 15:09. |
|
|
|
|
#5 |
|
Участник
|
А у вас "снаружи" цикла нет вызовов ttsbegin/ttscommit?
__________________
Axapta v.3.0 sp5 kr2 |
|
|
|
|
#6 |
|
Участник
|
нет
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('найдена ошибка'); } } |
|
|
|
|
#7 |
|
Участник
|
А что такое "ошибочная запись"?
Как эта ошибка проявляется? Кстати, X++: c = io.read();
if (io.status() != IO_Status::Ok)
{
break;
}Не правильнее было бы так? X++: c = io.read();
if ( == connull())
{
continue;
}
__________________
Axapta v.3.0 sp5 kr2 |
|
|
|
|
#8 |
|
Участник
|
попробовал
X++: c = io.read();
if ( == connull())
{
continue;
}Под ошибочной записью понимается например запись, когда случайно записываем данные к несуществующей записи. В данном случае так и получается, люди, которые должны были подготовить данные, подготовили их не очень хорошо, где-то записи есть, где-то их нет, если использовать всё без классов, то надо вручную писать все проверки, то есть переписывать функционал класса, а так гораздо проще, но непонятно, где же что-то затерялось При этом разницы нет, если я вынесу try-catch из цикла, записи в любом случае не добавляются и не обновляются, если возникла хотя бы одна ошибка |
|
|
|
|
#9 |
|
Участник
|
сам нашёл решение данной проблемы, причём даже стыдно
![]() я забыл про X++: select forupdate BOM where (BOM.BOMId == BomId); |
|
|
|
|
| Опции темы | Поиск в этой теме |
| Опции просмотра | |
|