Введение

Платформа Scalaxi предоставляет возможность использовать Python для различных целей в качестве удобного широко известного языка сценариев/программирования.

Сценарии Python, поддерживаемые платформой Scalaxi, должны использовать Python версии 3.0, как описано здесь: https://docs.python.org/3/. Полное руководство разработчика можно найти в Руководстве разработчика Python.

Версия Python, которую использует Scalaxi Platform, называется Iron Python, которая предоставляет интерфейс для кода C#. Он предоставляет две важные библиотеки, которые необходимо импортировать в начале скрипта — clr и system. Эти библиотеки предоставляют доступ к сущностям платформы Scalaxi, которые можно запрашивать и контролировать из скрипта.

Способы использования скриптов Python на платформе Scalaxi

Существует два основных способа использования Python на платформе Scalaxi:

  1. Как часть Component Script который существует для каждого Component. Он позволяет контролировать формы приложений, разработанные и выполняемые с помощью платформы Scalaxi, а также предоставлять настраиваемые индексы, которые можно запускать в качестве реакции на какое-либо событие, например нажатие кнопки клиентом.
  2. Как часть Dataflow с помщью использования шага Execute Script. Этот шаг позволяет задвать скрипты для выполнения действий на Python, таких как дополнительные преобразования данных, добавления переменных модели Dataflow и другие.

Исользование Python как часть Component Script

Component Script есть у каждой компоненты, и доступен по кнопке Component Script на основном окне настройки компоненты (с версии 0.6.х, до этого был доступен через меню Settings → Component Script).

Component Script состоит из двух частей - основной части, которая исполняется каждый раз когда отрисовывается одна из страниц (pages) компоненты, и функций Python (в формате def имя функции тело функции ; ) которые могу быть вызваны в различных случаях описанных ниже.

Существуют следующие случаи когда могут быть вызваны функции Python из Component Script’a:

  1. Функции могут быть вызваны напрямую активным контролем, к примеру кнопкой (button), если в качестве параметра Action выбран Execute Script. При выборе этого Action вам нужно будет ввести имя и параметры вызова (если есть) вашего скрипта в предоставленные поля Studio
  2. Функции могут быть вызваны одним из контролей UI из текущего окна пользовательского интерфейса, при наступленнии одного из событий (Events) которое этот контроль поддерживает. Детально события поддерживаемые контролями UI описаны в секциях описывающих соответствующие контроли UI. Пример поддерживаемых это например On focus change когда фокус переходит на или уходит с этого контроля UI, или On value change когда значение поля контроля меняется (что может быть например использовано для проверки валидности внесенных изменений)
    1. Для отслеживания изменений значения поля вам нужно определить функцию внутри скрипта компонента, а затем перейти к элементу управления пользовательского интерфейса, такому как текстовое поле и т. д., затем перейти в раздел «Events» и ввести имя вашего скрипта в поле «On value change».
    2. Обратите внимание, что эта функция будет вызываться только в том случае, если данные поля изменились, и фокус элемента управления пользовательского интерфейса в форме уйдет от этого элемента управления пользовательского интерфейса.
  3. Функции могут быть вызваны по подписке через метод платформы context.DataModel.Model.Subscribe() - подробное описание см. ниже
    1. Самый простой способ сделать это — определить функцию перехвата всех изменений (например, def check_all_changes()) в вашем компонентном скрипте, а затем подписаться на нее.
    2. Ваша функция будет вызываться каждый раз, когда происходит изменение текущих данных элемента управления пользовательского интерфейса, в тот момент, когда этот элемент управления пользовательского интерфейса теряет фокус (например, пользователь переключается на другой элемент управления пользовательского интерфейса или другое приложение).

Использование Python для доступа к компонентам платформы Scalaxi в Component Script