В предыдущей статье мы рассматривали компоненты разработчика в IS-Builder и выяснили, что IS-Builder предоставляет широкие возможности по разработке и настройке и по сути является платформой для крупных корпоративных систем управления предприятием. Одним из свойств характеризующих IS-Builder как инструмент разработки является наличие мощного внутреннего языка программирования – ISBL (IS-Builder Language). Именно ему будет посвящена данная статья.
Язык ISBL – встроенный в платформу IS-Builder высокоуровневый интерпретируемый язык программирования, предназначенный для описания алгоритмов функционирования прикладных задач. Синтаксис языка напоминает смесь разных языков, таких как: Basic, 1С и пр. В языке ISBL используются конструкции, как в традиционном английском варианте, так и на русском языке. Если вы имеете хотя бы небольшой опыт в программировании, то разобраться в тонкостях разработки программ на ISBL вам не составит большого труда.
ISBL как и любой высокоуровневый язык программирования содержит все основные конструкции: константы, переменные, многомерные массивы, циклы, операторы ветвления, функции, комментарии и пр. Важной особенностью языка является возможность работы с COM-объектами. Это позволяет, например, программно запустить Microsoft Excel, создать в нем новый документ и добавить в него произвольную информацию.
Попробуем разобраться в особенностях синтаксиса ISBL рассмотрев простой пример.
01 // Пример программы на ISBL 02 Str1 = "Hello" 03 Str2 = "World" 04 Str3 = "" 05 while Length(Str3) < 5 06 Str3 = Str3 & "A" 07 endwhile 08 StrAll = Str1 & " " & Str2 & CR & Str3 09 ShowMessage(StrAll)
Первой строкой нашего примера идет комментарий. В тексте программы часто бывает необходимо прокомментировать выполнение участка программы или временно блокировать выполнение определенного кода. Для этих целей используются комментарии. В языке ISBL есть поддержка комментариев двух видов:
//Пример программы на ISBL
/* Это комментарий многострочного типа */
Типы данных
Для объявления и дальнейшего использования переменной достаточно записать в нее любое значение. В нашей программе в три переменные записываются явные константы, причем третья переменная в качестве значения получает пустую строку:
Str1 = "Hello" Str2 = "World" Str3 = ""
Вообще, язык ISBL, является языком с так называемым свободным типом данных Variant. Это означает, что переменная будет иметь тип, который определяется типом присваиваемого значения. Каким либо специальным образом тип переменной в тексте программы не объявляется. Рассмотрим возможные типы значений переменных:
Числовой тип. Может принимать целые значения, дробные значения, экспоненциальные значения (с плавающей точкой)
234 4.22 3.6e-14
Строковый тип. Может содержать произвольное количество символов заключенных в кавычки или апострофы.
"Строка" 'Текст с пробелами'
Дата и время.Содержит значение даты и времени в секундах. Для вывода значения можно использовать следующий формат “d[d].m[m].[yy[yy] hh[:nn[:ss]]]”
"23.12" "23.12.2005" "23.12.05 12:30:00"
Логический тип. Используется для представления логических значений
True False
Константа – это любое постоянное значение, используемое в тексте вычислений, например, при задании значений переменных или при указании параметров вызываемых функций. В ISBL константы подразделяются на:
145.72 "Пример явной константы"
null // Пустое значение false // "Ложь" в логических выражениях SYSREQ_EDOC_NAME // Наименование электронного документа
Полный список системных констант можно найти в справочной системе, в разделе "Объектная модель DIRECTUM" > "Системные константы ISBL".
Массив — упорядоченный набор значений типа Variant, к которым можно обращаться с помощью индексов - одного для одномерных, двух - для двухмерных и т.д. Язык ISBL поддерживает работу с многомерными массивами, причем количество измерений не ограничено. Для обращения к элементам массива используется следующий синтаксис:
<переменная-массив>[<индекс 1>[;<индекс 2>;...;<индекс N>]]
Пример обращения к элементам массива:
MyArray[3] = "Строка" // Одномерный массив Matrix[1; 4; 2] = 3.72 // Трехмерный массив Sum = A[1; 1] + A[1; 2] + A[2; 2] // Двумерный массив
Подробнее работа с массивами будет рассмотрена в следующих статьях.
После рассмотрения типов данных логично было бы рассмотреть операции, которые можно проводить с различными типами данных. Относительно нашей программы, можно привести пример из шестой строки, где проходит объединение строк Str3 = Str3 & "A". Рассмотрим подробнее типы операций используемые в ISBL:
10 – 3 // 7 "ABC" & "def" // ABCdef 10 > 3 // True "10" >> "3" // False "10" > "3" // True - тип значений преобразуется в числовой т.к. проходит сравнение чисел True and False // False
Примечание: Для сравнения дат необходимо использовать специальную функцию DateDiff.
В пятой строке нашей программы идет определение цикла, который выполняется пока истинно условие (Length(Str3) < 5). Или например в восьмой строке выполняется присвоение переменной сложного выражения. Данные действия относятся к операторам языка. В ISBL различают следующие операторы:
<переменная>= <выражение>
if <условие> <блок операторов 1> else <блок операторов 2> endif
while<условие> <блок операторов> endwhile
foreach <переменная> in <список> <блок операторов> endforeach
try [try statements] except [except statements] endexcept
и
try [try statements] finally [finally statements] endfinally
В первом случае исключение, возникшее в блоке [try statements], гасится, выполнение блока прекращается, а управление передается в блок [except statements]. Это позволяет обработать исключение без прекращения работы вычисления. Во втором случае при возникновении исключения в блоке [try statements] выполнение блока прекращается, само исключение не гасится, но перед генерацией исключения будут выполнены операторы блока [finally statements]. Это позволяет в случае ошибки выполнить вычисление, в котором будут гарантированно освобождены объекты, созданные в блоке [try statements].
Функция, в программировании — это именованная часть программы, которая может вызываться из других частей программы нестолько раз. В ISBL встроено множество функций позволяющих значительно упростить процесс создания программ. Кроме того есть возможность создания собственных функций. Так, например в нашей программе для подсчета количества символов в строке использовалась всего одна функция Length(Str3). Рассмотрим еще несколько примеров наглядно демонстрирующих действие функций:
ShowMessage("Hello World") // выведет сообщение «Hello World» Abs(Sum) // вернет значение числа по модулю ArrayOf("A";"B";"C") // вернет массив с тремя элементами
Посмотреть справку по определенной функции можно нажав комбинацию клавиш Ctrl+F1, предварительно установив курсор на имени функции.
Большим преимуществом ISBL является возможность работы с COM объектами. Все объекты можно разделить на две категории:
У каждого объекта есть определенный набор методов и свойств используемых для работы с объектом. Так, например, всю необходимую информацию об объектах DIRECTUM можно посмотреть в справочной системе, в разделе "Объектная модель DIRECTUM". Информацию о внешних объектах нужно искать в соответствующей документации по этим объектам. Для обращения к свойствам и методам объектов в IS-Builder используется следующий синтаксис:
<объект>.<имя свойства>[(<параметры свойства>)] <объект>.<имя метода>([<параметры метода>])
Рассмотрим пример, демонстрирующий получение имени документа через объектную модель IS-Builder:
<объект>.<имя свойства>[(<параметры свойства>)] <объект>.<имя метода>([<параметры метода>])
В данном примере мы обращаемся к фабрике электронных документов IEDocumentFactory с помощью метода GetObjectById() в качестве параметра передавая уникальный ИД документа зарегестрированного в системе. В результате выполнения данного кода в переменной Edoc будет содержаться объект-документ IEDocument. Следующим шагом будет получение реквизита, за это отвечает свойство Requisites() документа EDoc. В качестве параметра в свойство Requisites() передается системная константа SYSREQ_EDOC_NAME. Из справочной системы выясняем, что константа содержит значение "ISBEDocName". Это соответствует реквизиту с наименованием электронного документа. После выполнения данного метода будет получен объект-реквизит IRequisite, если быть точнее IStringRequisite. Чтобы получить значение реквизита в виде строки мы обращаемся к свойству AsString объекта-реквизита.
Более подробно обектная модель IS-Builder и работа с объектами будет рассмотрена следующих статьях.
В IS-Builder есть встроенный специализированный редактор текстов, позволяющий значительно упростить процесс написания программ на ISBL. Важными особенностями, отличающими встроенный редактор от обычного текстового редактора, являются:
Начиная с DIRECTUM 5.1 функционал редактора вычислений расширен. Для упрощения разработки на ISBL добавлены подсказки по объектной модели:
Кроме того, в версии DIRECTUM 5.1 справочная система переведена в веб-формат. Это значит, что:
Документация в формате chm и pdf, как и ранее, будет поставляться на диске.
Отладчик позволяет выполнять трассировку вычислений на ISBL, отслеживать стек вызовов, значения переменных вычисления и окружения. В DIRECTUM 5.1 отладчик получил развитие и кроме знакомых всем функций отладчика теперь позволяет анализировать код вычислений и выявлять в нем узкие места, негативно сказывающиеся на производительности вычислений: неоптимальные прикладные запросы, циклы с большим количеством итераций и «тяжелым» телом и так далее. Подробнее об отладчике можно почитать в этом материале.
Язык ISBL является мощным инструментом позволяющим решить любую задачу в пределах своей предметной области. Кроме того, возможности языка значительно расширены за счет встроенных функции работы с внешними объектами, позволяющие без особого труда работать с элементами операционной системы как со своими собственными. Ко всем очевидным плюсам языка ISBL можно отнести относительную простоту освоения, хорошую документированность и открытость исходных текстов прикладной разработки, построенной на IS-Builder.
И статья интересная и комментарий. Вы взялись написать онлайн-хелп? Было бы интереснее, если бы вы оформили свои статьи в виде скачиваемых файлов. Хотя бы PDF, а лучше CHM. И писали бы непременно консолидированно =)
Антон, а скачиваемый файл уже есть и называется он руководство разработчика :)
Хотя, лично я, пользуюсь документом "Курс 234. 'Модификация системы DIRECTUM с помощью IS-BUILDER'". Учебное пособие для разработчиков.
Там и примеров много :)
Такой вот порос: Конец операторов и вообще всевозможных операций никакими символами не обозначаются? Точкой например, или точкозапятой? И еще: Есть ли среда разработки автономная от Directum?
1. Неправильно
2. Вроде как правильно, но если не работает, то надо взглянуть на код, чтобы понять почему.
Только в подобных случаях я оформляю код так:
if <условие1>
<блок операторов 1>
else
if <условие2>
<блок операторов 2>
endif
endif
Или можно еще использовать функцию IfThen:
Группа:
IS-Builder. Системные функции
Определение:
IfThen(
Condition: Логический;
TrueResult: Вариантный;
FalseResult: Вариантный)
Параметры:
• Condition - Логическое выражение Тип: Логический.
• TrueResult - Значение для истинного результата выражения Тип: Вариантный.
• FalseResult - Значение для ложного результата выражения Тип: Вариантный.
Описание:
Функция возвращает TrueResult, если выражение Condition - истинное, иначе возвращает FalseResult.
Тут следует учитывать, что параметры функции IfThen вычисляются всегда. Иногда это может работать слишком долго. А иногда это совсем недопустимо. Но для простых вещей - да, очень удобно.
Exitfor - допишите. Выход из цикла, а то постоянно забываю =)
Как можно было написать настолько всратейший язык уровня бейсика. Шок контент от Русских коллег, не иначе.
) Удивительно. Система написана на шарпе,а придумали псевдоязык зачем-то
В разделе Объекты ошибка. Не привели пример, а повторили предыдущий рисунок.
Авторизуйтесь, чтобы написать комментарий