Как использовать систему скриптинга в INCAS
Система скриптов позволяет писать продвинутые пользовательские сценарии для обеспечения дополнительной функциональности INCAS. Для того, чтобы обеспечить такую возможность, INCAS отказался от идеи собственного псевдо-языка программирования в пользу Python 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', 'Наименование': 'Административное право', 'Уровень образования': 'Бакалавриат', 'Кафедра': 'КиМП' }