March 15

Как использовать систему скриптинга в INCAS

Система скриптов позволяет писать продвинутые пользовательские сценарии для обеспечения дополнительной функциональности INCAS. Для того, чтобы обеспечить такую возможность, INCAS отказался от идеи собственного псевдо-языка программирования в пользу Python 3.

Основная доля команд направлена на обработку тегов в шаблонах.

Для того, чтобы открыть окно скрипта необходимо найти в настройках тега кнопку "Привязанная команда"

При работе с командами для тегов очень важно понимать, что существуют три режима:

  1. Обработка только текущего тега;
  2. Обработка всей формы в целом;
  3. Обработка таблиц.

В зависимости от режима, код должен выглядеть соответствующим образом.

Обработка только текущего тега

Если мы хотим каким-то образом видоизменить информацию в нашем теге, не используя при этом информацию из других частей документа, то в качестве входной переменной мы используем input_data, а в качестве результирующей — переменную output.

Например, так:

output = str(int(input_data) * 3,14)

Не забудьте привести конечный результат переменной output к типу данных str!

Обработка всей формы

Если же мы хотим изменить значение текущего тега в зависимости от значения других полей документа или наоборот, изменить другие поля документа в зависимости от текущего, мы обязательно должны указать в начале скрипта:

# [affects other]

При таком режиме переменные input_data и output не используются.

Стоит учесть, что теги с типом заполнения "Таблица" не будут доступны для редактирования извне себя.

Вместо этого напрямую используются названия тегов. Если название тега содержит пробелы, их нужно заменять нижним подчеркиванием, например:

Тег называется Дата договора. Значит, переменная будет называться Дата_договора. Например, так:

import datetime

# [affects other]
Дата = datetime.datetime.strptime(Дата, "%d.%m.%Y")
Дата = Дата + datetime.timedelta(days=364)
Дата = datetime.datetime.strftime(Дата, "%d.%m.%Y")
Номер_договора = 'AE123/' + str(Дата) + '/2024'

Обратите внимание, что тег с типом заполнения "Дата" абсолютно всегда (даже если в настройках форматирования пользователем указан другой формат) возвращает в скрипт время в формате ДД.ММ.ГГГГ, а значит, при использовании методов strptime() и strftime() необходимо всегда использовать паттерн %d.%m.%Y, в том числе для присвоения значения тегу с типом заполнения "Дата". Результирующие данные в ином формате будут проигнорированы программой.

Стоит учесть, что второй режим работает медленнее первого, поскольку в первом случае вычисление производится "на лету" прямо в теге, а во втором случае программа выносит скрипт на уровень формы и совершает два обхода всех полей на форме: до выполнения скрипта (для получения значений тегов) и после выполнения скрипта (для обновления значений тегов).

Даже если вы не обновляете значения остальных тегов, используя второй режим, второй обход все равно будет производиться и де-факто, значения всех тегов будут обновлены (хотя это и не будет заметно).

Обработка таблиц

Скрипты, привязанные к тегам с типом заполнения "Таблица" не могут влиять на другие теги в рамках формы и выполняются изолированно, то есть могут работать с данными только внутри той таблицы, к которой они относятся.

На вход в такой скрипт программой предоставляется аналогично первому режиму переменная input_data, содержащая список словарей, где каждый элемент списка — ряд таблицы, ключи в словаре — столбцы, а значения — значения ячеек. На выходе ожидается переменная output.


Использование служебного класса Service

INCAS позволяет вызывать ограниченное количество служебных методов из сборки посредством использования методов класса Service из модуля Incas.

Для того, чтобы вызывать один из служебных методов необходимо импортировать в код библиотеку:

from Incas import Service

Следующий код:

from Incas import Service
Service.ShowInfoDialog('Это оповещение для тебя, кретин!')

Приведет к показу диалогового окна-оповещения:


Следующий код:

from Incas import Service
Service.ShowInputBox('Заголовок', 'Описание')

Приведет к показу диалогового окна с запросом текста от пользователя, который потом можно будет использовать в скрипте:


Следующий код:

from Incas import Service
Service.ShowDatabaseSelection('бд', 'Дисциплины', 'Наименование')

Приведет к показу окна выбора записи из базы данных и вернет строку выбранной записи из конкретного столбца.


Следующий код:

from Incas import Service
Service.ShowDatabaseSelection('бд', 'Дисциплины')

Приведет к аналогичному результату, но вместо конкретной строки вернет словарь, где ключи — столбцы, а значения — это значения под каждым столбцом.

Применительно к скрину выше, если пользователь выберет запись с id 24, возврат будет таким:

{
'id': '24',
'Наименование': 'Административное право',
'Уровень образования': 'Бакалавриат',
'Кафедра': 'КиМП'
}