Откат действий блока
Оператор UNDO служит для отката действий блока, когда бизнес-логика приложения обнаруживает проблему, которая должна быть обработана как ошибка приложения. Соответственно, Вам требуется тот же уровень поддержки для обработки ошибок приложения. Смотри (Программа 29). Здесь фраза ON ERROR отсутствует, оператор IF в Inner-Block моделирует обнаружение логической ошибки приложения и выполняет откат блока.
Программа 29. Обработка ошибки приложения
PROCEDURE NestedBlocks: Outer-Block: FOR EACH Customer WHERE CustNum < 5: ASSIGN Customer.Name = "changed_" + Customer.Name. Inner-Block: FOR EACH Order OF Customer: DISPLAY OrderNum. /* Моделирование ошибки приложения. */ IF SUBSTRING(Customer.Name, 1, 8) EQ "changed_" THEN UNDO, RETURN ERROR. END. END. DISPLAY "For Blocks Complete". END PROCEDURE. RUN NestedBlocks. DISPLAY "Procedure NestedBlocks Complete."
Таким образом, оператор UNDO обеспечивает такой же уровень функциональной поддержки для обработки ошибок приложения, как и фраза ON ERROR – для обработки системных ошибок ABL.