Язык ISBL

11 9

В  предыдущей статье мы рассматривали компоненты разработчика в 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
  • Mногострочные комментарии действуют на одну и или несколько строк или могут располагаться внутри одной строки. Комментарием данного типа является текст заключенный между символами «/*» и «*/»
  /* Это комментарий
  многострочного типа */
Типы данных

Для объявления и дальнейшего использования переменной достаточно записать в нее любое значение. В нашей программе в три переменные записываются явные константы, причем третья переменная в качестве значения получает пустую строку:

  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:

  • Арифметические: +, -, *, /;
  • Строковые: &;
  • Логические: and (и), or (или), not (не);
  • Сравнение чисел: >, <, >=, <=, =, <>;
  • Сравнение строк: >>, <<, >>==, <<==, ==, <<>>;
  10 – 3            // 7
  "ABC" & "def"     // ABCdef
  10 > 3            // True
  "10" >> "3"       // False
  "10" > "3"        // True - тип значений преобразуется в числовой т.к. проходит сравнение чисел
  True and False    // False

Примечание: Для сравнения дат необходимо использовать специальную функцию DateDiff.

Операторы

В пятой строке нашей программы идет определение цикла, который выполняется пока истинно условие (Length(Str3) < 5). Или например в восьмой строке выполняется присвоение переменной сложного выражения. Данные действия относятся к операторам языка. В ISBL различают следующие операторы:

  • Оператор присваивания.
  <переменная>= <выражение>
  • Оператор условного ветвления. Если <условие> истинно выполняется <блок операторов 1>, иначе <блок операторов 2>.
  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 объектами. Все объекты можно разделить на две категории:

  • Внутренние объекты, составляющие объектную модель IS-Builder (справочники, задачи, задания, отчеты и т.д.)
  • Внешние объекты, например MSWord.

У каждого объекта есть определенный набор методов и свойств используемых для работы с объектом. Так, например, всю необходимую информацию об объектах DIRECTUM можно посмотреть в справочной системе, в разделе "Объектная модель DIRECTUM". Информацию о внешних объектах нужно искать в соответствующей документации по этим объектам. Для обращения к свойствам и методам объектов в IS-Builder используется следующий синтаксис:

  <объект>.<имя свойства>[(<параметры свойства>)]
  <объект>.<имя метода>([<параметры метода>])
Рассмотрим пример, демонстрирующий получение имени документа через объектную модель IS-Builder:
  <объект>.<имя свойства>[(<параметры свойства>)]
  <объект>.<имя метода>([<параметры метода>])

В данном примере мы обращаемся к фабрике электронных документов IEDocumentFactory с помощью метода GetObjectById() в качестве параметра передавая уникальный ИД документа зарегестрированного в системе. В результате выполнения данного кода в переменной Edoc будет содержаться объект-документ IEDocument. Следующим шагом будет получение реквизита, за это отвечает свойство Requisites() документа EDoc. В качестве параметра в свойство Requisites() передается системная константа SYSREQ_EDOC_NAME. Из справочной системы выясняем, что константа содержит значение "ISBEDocName". Это соответствует реквизиту с наименованием электронного документа. После выполнения данного метода будет получен объект-реквизит IRequisite, если быть точнее IStringRequisite. Чтобы получить значение реквизита в виде строки мы обращаемся к свойству AsString объекта-реквизита.

Более подробно обектная модель IS-Builder и работа с объектами будет рассмотрена следующих статьях.

Встроенный редактор текста ISBL

В IS-Builder есть встроенный специализированный редактор текстов, позволяющий значительно упростить процесс  написания программ на ISBL. Важными особенностями, отличающими встроенный редактор от обычного текстового редактора, являются:

  • Подсветка синтаксиса. Все элементы исходного текста программы отличаются друг от друга определенным форматированием, что значительно упрощает восприятие текста.
  • Всплывающая подсказка по именам функций, переменных и констант. Для появления подсказки требуется установить курсор на имени функции и нажать комбинацию клавиш +<Пробел>. Также используется всплывающая подсказка по аргументам функции. Используемая комбинация клавиш при этом ++<Пробел>.
  • Всплывающая подсказка по операторам языка ISBL. Выводит перечень операторов языка при нажатии комбинации клавиш +.
  • Справка по элементам языка включает в себя справку по функциям, объектам, методам и свойствам объектов, а так же справку по именованным константам. Для вызова справки по определенному элементу, требуется нажать комбинацию клавиш +, предварительно установив курсор на элемент языка.
  • Открытие карточки функции из текста программы. Для открытия карточки требуется установить курсор на имя функции и нажать комбинацию клавиш +.
  • Возможность вставки определенного элемента объектной модели IS-Builder. Позволяет вставить: код записи справочника, имя типа справочника, имя реквизита справочника, имя типа карточки электронного документа и пр. Вставка определенного элемента доступна через Главное меню > Вставка.

Начиная с DIRECTUM 5.1 функционал редактора вычислений расширен. Для упрощения разработки на ISBL добавлены подсказки по объектной модели:

  • по методам и свойствам интерфейсов,
  • по реквизитам справочников и документов,
  • по параметрам методов,
  • по типам переменных (интерфейсные типы, типы справочников, типы карточек документов).

Кроме того, в версии DIRECTUM 5.1 справочная система переведена в веб-формат. Это значит, что:

  • заработало копирование из справки по Ctrl+C,
  • появилась возможность ссылаться на конкретный топик справки,
  • упростилось обновление клиентских мест. Ранее справка и видеоролики копировались на каждое клиентское место, теперь справка устанавливается на сервере,
  • можно искать информацию в справке по отдельным книгам,
  • интерфейс справки приблизился к интерфейсу всей системы.

Документация в формате chm и pdf, как и ранее, будет поставляться на диске.

Отладчик

Отладчик позволяет выполнять трассировку вычислений на ISBL, отслеживать стек вызовов, значения переменных вычисления и окружения. В DIRECTUM 5.1 отладчик получил развитие и кроме знакомых всем функций отладчика теперь позволяет анализировать код вычислений и выявлять в нем узкие места, негативно сказывающиеся на производительности вычислений: неоптимальные прикладные запросы, циклы с большим количеством итераций и «тяжелым» телом и так далее. Подробнее об отладчике можно почитать в этом материале.

Заключение

Язык ISBL является мощным инструментом позволяющим решить любую задачу в пределах своей предметной области. Кроме того, возможности языка значительно расширены за счет встроенных функции работы с внешними объектами, позволяющие без особого труда работать с элементами операционной системы как со своими собственными. Ко всем очевидным плюсам языка ISBL можно отнести относительную простоту освоения, хорошую документированность и открытость исходных текстов прикладной разработки, построенной на IS-Builder.

Андрей Подкин
Одним из свойств характеризующих IS-Builder как инструмент разработки является наличие мощного внутреннего языка программирования – ISBL (IS-Builder Language).
ISBL - совсем не мощный язык, а наоборот, специально ограниченный (в возможностях). Сравните, например, с Python (вот там - настоящая мощь).
 
Синтаксис языка напоминает смесь разных языков, таких как: Basic, 1С и пр.
Ближе всего к VBA.
 
Если вы имеете хотя бы небольшой опыт в программировании, то разобраться в тонкостях разработки программ на ISBL вам не составит большого труда.
Для того, чтобы разобраться в тонкостях, надо изучать не столько язык - что, действительно, быстро, а API (объектную модель, функции) - что уже намного дольше и сложнее.
 
ISBL как и любой высокоуровневый язык программирования содержит все основные конструкции: константы, переменные, многомерные массивы, циклы, операторы ветвления, функции,  комментарии и пр.
Константы есть только в виде литералов. Именованные есть на уровне платформы, но не языка (нельзя объявлять свои).
Функций на уровне языка тоже нет.
 
Вообще, язык ISBL, является языком с так называемым свободным типом данных Variant.
Вообще-то это называется "динамическая нестрогая типизация".
 
"23.12" "23.12.2005" "23.12.05 12:30:00"
Это не "дата и время". Это обычные строки. Преобразование в дату-время происходит не этапе написания константы, а на этапе присваивания строки туда, где принимается именно дата-время (т.е. это особенность API, а не языка).
 
явные константы
Это называется "литералы".
 
Сравнение строк: >>, <<, >>==, <<==, ==, <<>>;
Здесь всегда необходимо помнить, что сравнение строк в ISBL - регистро-независимое (case insensitive). Почти во всех других языках сравнение строк - регистро-зависимое (case sensitive).
 
Всплывающая подсказка
Code Insight или IntelliSense - это не всплывающая подсказка (Help Insight).
 
Всплывающая подсказка по операторам языка ISBL.
Это не подсказка. Это система шаблонов кода (code templates).
 
Антон Максунов

И статья интересная и комментарий. Вы взялись написать онлайн-хелп? Было бы интереснее, если бы вы оформили свои статьи в виде скачиваемых файлов. Хотя бы 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:

Тут следует учитывать, что параметры функции IfThen вычисляются всегда. Иногда это может работать слишком долго. А иногда это совсем недопустимо. Но для простых вещей - да, очень удобно.

 

 

Реша Решетников

Exitfor - допишите. Выход из цикла, а то постоянно забываю =)

Паукан Жукан

Как можно было написать настолько всратейший язык уровня бейсика. Шок контент от Русских коллег, не иначе.

Раджаб Курамагомедов

) Удивительно. Система написана на шарпе,а придумали псевдоязык зачем-то

Авторизуйтесь, чтобы написать комментарий