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