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, що використовується для його визначення.