| Оберон |
|
На допомогу прикладному програмісту СКА "Оберон"Цей розділ призначений для програмістів бізнес-логіки в рамках СКА "Оберон" і є довідковим посібником, а в жодному разі не підручником. Тому при його складанні ми вважаємо, що читач знайомий з основними поняттями, якими оперує СКА "Оберон". Програміст бізнес-логіки в рамках СКА "Оберон" має два місця прикладання зусиль: тригерну та процедурну точки входу в систему. Тригерні точки входу визначаються в АРМі технолога в описах сутностей системи. У кожній сутності може бути передбачено кілька подій, у разі виникнення яких викликається відповідний Програмний модуль. Існує обмеження реалізації: всі макропроцедури, що стосуються тригерним точкам входу однієї сутності повинні знаходитися в одному макрофайлі. Процедурні точки входу визначаються в АРМі администратора, шляхом опису пункту меню типу "Макрос". У будь-якому випадку, точці входу в систему відповідає деякий програмний модуль(написаний на одній з мов для інтерпретації) і макропроцедура цього модуля. У точці входу описується: ім'я файлу, що містить програмний модуль, та ім'я процедури, що знаходиться в цьому файлі. У СКА "Оберон", файл, що містить текст програмного модуля називається макрофайлом, а процедура, що знаходиться в цьому макрофайлі - макропроцедурою. Програмні модулі, станом зараз, можуть бути розроблені на вибір прикладного програміста мовою Visual Basic Script чи Java Script. Макрофайли на мові Java Script мають розширення ".js". Файли з іншими розширеннями вважаються макрофайлами, написаними мовою Visual Basic Script. Якою б мовою не був написаний макрофайл, СКА "Оберон" розширює можливості, які надає ця мова. Першим засобом розширення є директива ###include###, що дозволяє розширювати макрофайл за рахунок віртуального включення до нього інших макрофайлів, що сприяє структурованості макрофайлів та повторного використання коду. Директива ###include### обробляється препроцесором, тому не підпорядковується синтаксису мови програмування, на якому написано макрофайл. Як параметри директиви що розділяються комами, використовуються імена макрофайлів без лапок, але з розширеннями. Дія директиви поширюється до кінця рядка. Коментарів у рядку директиви не передбачається. Директива ###include### в одному макрофайлі може зустрічатися кілька разів. Використання директиви у віртуально включених макрофайлах теж можливо. Якщо один макрофайл зустрічається у директивах ###include### кілька разів (у тому числі і у вкладених файлах), то реально він буде включений до остаточного контексту макрозавдання лише один раз - там, де він зустрівся вперше. Другим та головним засобом розширення є об'єкти, функції та константи, експортовані СКА "Оберон" у мову програмування. Синтаксис виклику експортованих об'єктів відповідає синтаксису використовуваного мови програмування. Переліку цих об'єктів та їх семантиці присвячена частина даного розділу, що залишилася. Система постійно доопрацьовується. Ми просимо з розумінням відноситься до того, що ви не знайдете опису якогось з об'єктів. Зверніться до розробників. Ми з радістю Вам допоможемо. Але перш, ніж перейти до цього матеріалу, слід зауважити наступну особливість використання макрозавдань у СКА "Оберон". Система виконує кешування контекстів макрозавдань. Це ознвчає, що при першому зверненні до кореневого макрофайлу, система інтерпретує текст макрозавдання і кода, що знаходиться поза процедурами, посля чого переходить до виконання процедури, що вказана користувачем. Після виконання макропроцедури, контекст не знищується, а зберігається для повторного використання. При наступному зверненні до довільної процедури з макрофайлу, використовується вже готовий контекст. Зроблено це для оптимізації швидкості системи, але, водночас, дає корисний побічний ефект: дозволяє зберігати значення глобальних змінних від дзвінка до дзвінка. Однак, щоб скористатися цим побічним ефектом, слід розуміти особливості реалізації механізму кешування. Їх, головних, дві. По-перше, кешуються контексти макрозавдань, а не макрофайлів, тобто, якщо один і той же макрофайл включений через директиву###include### у кілька різних макрофайлів, то описані в ньому глобальні змінні після компіляції виявляться в кількох різних контекстах і буде видно лише всередині контексту. По-друге, реалізація інтерпретаторів скриптових мов у більшості систем не реентерабельна. Це призводить до того, що при рекурсивному зверненні до макрозавдання (наприклад, якщо всередині макропроцедури відбувається збереження об'єкта системи, а для збереження об'єктів цього класу в АРМі технолога вказано тригерну макропроцедуру, що знаходиться в тому ж макрофайлі) створюється другий контекст того ж макрозавдання. Тому перш ніж користуватися цими можливостями, переконайтеся, що наведений вище текст Вам цілком зрозумілий та самоочевидний. І останнє, що потрібно пам'ятати при розробці прикладних рішень із використанням засобів розширення макромов, що надаються СКА "Оберон" - параметри макропроцедур. Ядро СКА "Оберон" викликає макропроцедуру, вказану як точку входу з одним параметром або без параметрів. Як параметр передається поточний об'єкт системи у разі виклику тригерної точки входу (описаної в АРМі технолога), а також у разі виклику процедурної точки входу (описаної в Армі адміністратора) в меню на панелі об'єкта. В інших випадках (процедурні точки входу, описані в меню на всіх інших Типи екранів, включаючи головний екран системи) процедури викликаються без параметрів. Більшість реалізацій інтерпретаторів дуже нервово ставляться до розбіжності кількості формальних параметрів кількості параметрів фактичних. Функції та константи СКА -=Оберон=-Наведені нижче функції та константи доступні в макрозавданнях написаних на будь-якій макромові, що підтримує СКА "Оберон", і виконуються під управлінням АРМа користувача системи. Обмеження з використання, якщо вони є, наведено в описі відповідної функції. Функції повертають або значення скалярних типів мови програмування (Int – ціле число, Bool – логічне значення, Str – рядок, Real - число з плаваючою точкою, Date - дата і час), або об'єкт СКА "Оберон", опис якого доступний за відповідним посиланням.
| ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
| © СКА -=Оберон=- | |||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||