![]() |
#14 |
Участник
|
Задача.
Имеем стандартный метод, из которого возможен выброс исключения. Необходимо обработать (успешно, не успешно - не важно) этим методом все строки. Если получилось обработать все строки успешно (без исключений), то подтвердить транзакцию, иначе откатить все, даже успешно обработанные строки. Решение. Идея такая: Этап первый "оптимистический". Открываем транзакцию и строка за строкой выполняем обработку в надежде на то что исключений не будет. Если все получилось закрываем транзакцию. Этап второй "ловим исключение". Помещаем транзакцию, описанную в первом этапе в блок try-catch. При возникновении исключения транзакция откатится и мы узнаем об этом. Этап третий "зацикливаем". В случае поимки нами исключения повторяем для оставшихся строк первый и второй этап, но уже без подтверждения транзакции даже в случае успеха. X++: enumerator = Lines.getEnumerator() first = true; do { toBeContinued = false; try { ttsbegin; while (enumerator.moveNext()) { stdClass.exceptionWarinigMethod(enumerator.current()) } if (first) ttscommit; else ttsabort; } catch { toBeContinued = true; } first = false; } while (toBeContinued) |
|
|
За это сообщение автора поблагодарили: Ruff (3). |