ABL блоки - DBA OpenEdge Progress
Обробник помилок ABL запускається лише на рівні операторів і працює у межах найближчого блоку. Стандартні властивості блоку та опції операторів визначають способи обробки помилок.
Типи блоків
Блок ABL – це набір ABL операторів, які виконуються як єдиний модуль. Блок складається з визначення блоку, тіла блоку (набір ABL операторів) та завершального затвердження END. Виконання тіла блоку визначається типом блоку, вбудованими властивостями блоку, та для більшого ефекту – опціями блоку. Усі ABL оператори повинні утримуватись у блоці. ABL блоки можуть бути згруповані за такими типами: Basic blocks, End blocks, Routine-level blocks та Class block.
Basic blocks або основні блоки забезпечують фундаментальні процедурні функціональні можливості. Хоча вони й забезпечують потоково-керованими опціями (flow-of-control options), вони не є модулями, що строго викликаються, а тому, це не підпрограми. Основні блоки це DO, FOR та REPEAT.
Ці три блоки мають багатий набір опцій, які дозволяють нам створювати різні їх різновиди. Ось деяка важлива інформація щодо основних блоків:
End blocks, або кінцеві блоки, це блоки, які визначають способи завершення роботи блоку, які їх містить. Такі блоки завжди є частиною іншого блоку, який називається associated block або зв'язковий блок. Кінцеві блоки повинні визначатися після останнього оператора у зв'язковому блоці та до вказівки затвердження END. Кінцевими блоками є блок CATCH та FINALLY. Ось деяка важлива інформація щодо цих блоків:
- CATH блок визначає користувальницький оброблювач помилок і є суворою характеристикою моделі структурного оброблювача помилок;
- FINALLY блок містить код, який має бути виконаний при коректномузавершення роботи зв'язкового блоку або у разі помилки. FINALLY є важливою характеристикою структурного обробника помилок. Використання FINALY блоків із традиційним обробником помилок не змінює поведінку традиційної моделі обробки помилок;
- FINNALY блок повинен розміщуватись останнім END блоком.
Routine-level blocks. Routine або підпрограма це модуль з кодом, який може бути викликаний або запущений з іншого модуля, посилаючись на звичайне ім'я. Такі блоки в ABL можуть викликатися різними способами:
- Запуск оператора RUN;
- Виклик подією бази даних або подією інтерфейсу користувача (тригери);
- У зв'язку з присвоєнням чи виразом;
- Доступ з об'єкта handle.
Routine-level blocks це:
- Процедури, також звані зовнішніми процедурами або .p файлами;
- внутрішні процедури;
- Користувацькі функції;
- Процедури тригерів бази даних (.p файл); блоки тригерів бази даних (події ON database-event);
- Метод класу (метод користувача), конструктор, деструктор, засоби доступу (методи GET і SET).
Є деякі важливі факти щодо routine-level блоків:
- Файл процедур має неявний блок, який містить весь код, що міститься у цій процедурі. Уявіть неявний блок як невидимий блок операторів та невидиме END затвердження. Кінцеві блоки (End blocks), поміщені в кінці файлу процедури, належать цьому неявному процедурному блоку;
- У той час як внутрішні процедури та функції, що визначаються користувачем визначені в процедурному блоці, під час виконання, ці звичайні блоки стають підблоками коду, який викликає підпрограму. Іншими словами, підпрограми не визначені впроцедурний блок;
- Процедурний файл тригера бази даних (.p) є блоком із явним заголовком блоку та неявним оператором END. Якщо ви додасте оператор END після end-блоків, компілятор згенерує помилку.
- Тригер в інтерфейсі користувача можна викликати, використовуючи синтаксис APPLY event-name
Class blocks, або блоки класу (.cls), які є основою об'єктно-орієнтованого програмування в ABL, не є програмами, що виконуються в тому ж сенсі, як і інші ABL блоки, які за своєю природою є процедурними. Блок класу визначає абстрактний об'єкт та його членів. У межах цих блоків використовуються такі типи стандартних блоків:
- Методи, що визначаються користувачем;
- Конструктори;
- Деструктори;
- Властивості засобів доступу (властивості методів GET та SET).
У наступній таблиці наведено опис кожного ABL блоку, включаючи загальну назву, тип і оператор ABL, що використовується для його визначення.