Переходите на новый сайт Базы знаний. Актуализация контента происходит теперь там.

Разработка собственных (кастомных) активностей
Активность (Activity) - сущность, описывающее некоторое действие, которое выполняется в шаге (step) скрипта (script).
Содержит описание входящих и исходящих параметров.


Загрузка активностей в рабочий процесс

Активности поставляются в виде DLL. Список всех подгруженных Activity к текущему работающему процессу, содержится в свойстве List статичного класса ActivityManager. При загрузке происходит считывание файлов с маской "Activities.*.dll" из рабочей папки процесса. Из сборки подгружаются все классы, которые реализуют абстрактный класс Activity.
Отображение шагов с нераспознанной кастомной активностью
Если в скрипте имеется шаг с нестандартной (кастомной) активностью, для которой отсутствует файл библиотеки в каталоге с PIX Studio, то теперь такой шаг отображается в скрипте как нераспознанный (!) и имеет наименование «Отсутствующая или недопустимая активность».


    Разработка

    Новый набор активностей разрабатывается в новом проекте. Наименование проекта с набором активностей начинается с "Activities".
    Активность реализуется через абстрактный класс BR.Core.Activity. Интерфейс можно найти в dll, которое поставляется вместе с платформой: Core.dll. Его необходимо подключить к проекту активности.
    Все свойства активности описываются через специальные атрибуты.
    Для корректной реализации активности, требуется реализация метода Execute (int? optionID).
    Конкретную реализацию логики активности, необходимо вносить в отдельные вспомогательные классы (или в другие проекты, если понадобится).

    Для создания проекта с активностями следует выбрать библиотеку классов.

    При выборе целевой платформы следует выбрать .NET Standart 2.0, таким образом активности будут совместимы с любой версией PIX. Если доступного API в .NET Standart 2.0 при разработке недостаточно, то можно использовать .NET Core 3.1, но тогда активности будут совместимы только с PIX версии 2.0 и выше.

    При использовании сторонних библиотек (например, NuGet-пакеты) следует добавить свойство CopyLocalLockFileAssemblies в файл проекта, как приведено в примере кода ниже. Файлы сторонних библиотек вместе с файлом активностей копировать в папку PIX.


    Атрибуты
    Атрибуты относятся либо только к классу (Path, CanHasChilds и др.), либо только к свойству (IsRequired, IsOut и др.), либо универсальные (ScreenName, Description и др.). Также имеются их версии для локализации. В такие атрибуты требуется передача типа данных ресурсов проекта и имени ресурса.

    Отдельно стоит описать работу с атрибутом Icon. В нем передается URI на картинку, которая содержится в сборке, проекте или в любом месте, на который можно разместить ссылку. Пример реализации атрибута: [Icon("pack://application:,,,/Core;component/BaseActivities/Icons/sleep.png")]


    Примеры активностей
    1. В качестве входных параметров задаются два числа. Результат выполнения активности - сумма чисел.
    
    using BR.Core;
    using BR.Core.Attributes;
    
    namespace Activities.Custom
    {
        [ScreenName("Сумма чисел")] // Имя активности, отображаемое в списке активностей и в заголовке шага
        [Representation("[FirstNumber] + [SecondNumber] = [Result]")] // Представление шага. Позиции в квадратных скобках заменяются значениями свойств.
        [Path("Custom activities")] // Путь к активности в панели "Активности"
        public class SummNumbers : Activity
        {
            [ScreenName("Число 1")] 
            [Description("Первое слагаемое")]
            [IsRequired]
            public int FirstNumber { get; set; }
    
            [ScreenName("Число 2")]
            [Description("Второе слагаемое")]
            [IsRequired]
            public int SecondNumber { get; set; }
            
            [ScreenName("Результат")]
            [Description("Результат сложения 2-х чисел")]
            [IsOut]
            public int Result { get; set; }
    
    
            public override void Execute(int? optionID)
            {
                Result = FirstNumber + SecondNumber;
            }
        }
    }
    
    2. Добавление параметра с выбором опций (из выпадающего списка).
    Для этого тип данных нужно сделать enum.
    В качестве примера рассмотрим активность по сохранению данных из раздела Word.
    Свойство SaveFormat - это как раз выпадающий список из которого можно выбрать значение.

    Тип задан как enum:

    В студии это выглядит таким образом:

    Изменение иконки активности
    Атрибут Image задавать иконку, которая в Студии отображается рядом с названием активности.

    Пример иконки
    Давайте добавим иконку к нашей разработанной активности "Сумма чисел".
    Для этого выполните следующие шаги:
    1. Скачайте изображение необходимой иконки суммы. Желательно выбирать иконки формата 1:1 (квадрат), размеров 16 на 16 пикселей, 32 на 32 пикселей и т.д.

    Иконка для активности
    2. Сохраните иконку в файл с проектом вашей активности. Чтобы посмотреть расположение проекта, нажмите правой кнопкой мыши по названию проекта в панели "Обозреватель решений" и в контекстном меню выберите "Открыть папку в проводнике".

    Как открыть папку проекта
    3. Выделите загруженную иконку в "Обозревателе решений", нажмите правую кнопку мыши и выберите "Свойства". В окне свойств для параметра "Действия при сборке" выберите в выпадающем меню пункт "Внедренный ресурс".

    Параметр "Внедренный ресурс"
    4. Добавьте атрибут Image с указанием пути к изображению в проекте и public class: [Image(typeof(<указание public class>), "<название проекта>.<имя файла иконки>")]
    
    [Image(typeof(SummNumbers), "Activities.Custom.sum.png")]
    
    Теперь у активности есть своя иконка.
    Локализация
    Чтобы названия свойств и другие текстовые поля активности в интерфейсе студии менялись в зависимости от выбранного языка, необходимо произвести следующие действия:
    1. Войдите в свойства проекта, нажав на название проекта в панели "Обозреватель решений" и в контекстном меню выберите "Свойства".

    Переход в свойства проекта
    2. В открывшемся окне "Свойства" в левой части выберите пункт "Ресурсы" и нажмите на надпись "Открыть или создать ресурсы". Будет создан и открыт файл Resources.resx.

    Создание ресурса
    3. В этом файле в столбец "Имя" нужно вписать имена переменных, которые будут хранить названия свойств активностей, например название свойства для ввода первого числа рекомендуется назвать Number_1_ScreenName, для второго числа Number_2_ScreenName и т.д.

    Resourses.resx
    4. Сделайте следующие изменения в коде:
    замените ScreenName() на LocalizableScreenName("<Название переменной в файле Resources.resx>", typeof(Resources)). Это строка позволяет выбирать необходимые подписи свойств из файла Resourses.resx.
    
    using Activities.Custom.Properties;
    using BR.Core;
    using BR.Core.Attributes;
    
    namespace Activities.Custom
    {
        [LocalizableScreenName("SummNumbers_ScreenName", typeof(Resources))] // Имя активности, отображаемое в списке активностей и в заголовке шага
        [Representation("[FirstNumber] + [SecondNumber] = [Result]")] // Представление шага. Позиции в квадратных скобках заменяются значениями свойств.
        [Path("Custom activities")] // Путь к активности в панели "Активности"
        [Image(typeof(SummNumbers), "Activities.Custom.sum.png")] //Иконка активности
        public class SummNumbers : Activity
        {
            [LocalizableScreenName("Number_1_ScreenName", typeof(Resources))]
            [Description("Первое слагаемое")]
            [IsRequired]
            public int FirstNumber { get; set; }
    
            [LocalizableScreenName("Number_2_ScreenName", typeof(Resources))]
            [Description("Второе слагаемое")]
            [IsRequired]
            public int SecondNumber { get; set; }
    
            [LocalizableScreenName("Result_ScreenName", typeof(Resources))]
            [Description("Результат сложения 2-х чисел")]
            [IsOut]
            public int Result { get; set; }
    
    
            public override void Execute(int? optionID)
            {
                Result = FirstNumber + SecondNumber;
            }
        }
    }
    
    5. Поменяйте название файла с кодом, выделив название класса (в данном случае SummNumbers), нажмите сочетание клавиш Ctrl + точка. В появившемся меню выберите пункт "Переименовать файл в ...".

    Переименование файла
    6. Для локализации на английский язык, создайте дополнительный файл ресурсов. Для этого в "Обозревателе решений" клиrните правой кнопкой мыши на пункт "Properties", далее "Добавить", далее "Создать элемент".
    7. Выберите "Файл ресурсов" и внизу окна впишите имя нового файла: Resourses.en.resx.

    Создание файла ресурсов
    8. Скопируйте имена переменных из файла Resources.resx в файл Resources.en.resx и заполните соответствующими названиями на английском языке.

    Файл Resources.en.resx
    9. Выполните сборку кода, замените необходимые dll файлы новыми. Также скопируйте файл Activities.Custom.resourses.dll из папки еn в папку En, куда установлена Студия (PIX/En).
    Теперь при переключении языка в Студии, названия свойств нашей активности также будут меняться.

    Вид свойств активности в английской версии Студии