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


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

Активности поставляются в виде DLL. Список всех подгруженных Activity к текущему работающему процессу, содержится в свойстве List статичного класса ActivityManager. При загрузке происходит считывание файлов с маской "Activities.*.dll" из рабочей папки процесса. Из сборки подгружаются все классы, которые реализуют абстрактный класс Activity.

Разработка

Новый набор активностей разрабатывается в новом проекте. Наименование проекта с набором активностей начинается с "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:

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