Skip to Content
SDKLTools.SDKКастомные свойства

Кастомные свойства

Кастомные свойства позволяют настраивать параметры элементов в Primo RPA Studio. Они отображаются в панели «Свойства» и могут использоваться для передачи данных в бизнес-логику.

1. Создание свойства.

Для создания свойства необходимо:

  • Объявить поле и свойство с атрибутами.
  • Указать параметры отображения в панели свойств.

Пример:

private string prop1; [LTools.Common.Model.Serialization.StoringProperty] [LTools.Common.Model.Studio.ValidateReturnScript(DataType = typeof(string))] [System.ComponentModel.Category("SDK"), System.ComponentModel.DisplayName("My Prop 1")] public string Prop1 { get { return this.prop1; } set { this.prop1 = value; this.InvokePropertyChanged(this, "Prop1"); } }

В данном примере мы создаем свойство Prop1 с атрибутами:

  • StoringProperty - устанавливает, что значение свойства будет сохранено в файле процесса.
  • ValidateReturnScript- необязательный атрибут, служит для проверки синтаксиса скрипта свойства. В качестве значения выступает тип данных, который может быть присвоен данному свойству. В примере это строка. Если при создании сценария пользователь введет значение с типом, отличным от строки, Студия отобразит ему ошибку. Если этот атрибут отсутствует, то Студия не будет проверять тип данных свойства.
  • Category - имя группы, в которую нужно поместить наше свойство в панели свойств Студии.
  • DisplayName - имя свойства, отображаемое в панели свойств Студии.

2. Добавление свойства в панель свойств

Свойства добавляются в конструкторе до вызова метода InitClass.

Пример:

sdkProperties = new List<LTools.Common.Helpers.WFHelper.PropertiesItem>() { new LTools.Common.Helpers.WFHelper.PropertiesItem() { PropName = "Prop1", PropertyType = LTools.Common.Helpers.WFHelper.PropertiesItem.PropertyTypes.SCRIPT, EditorType = ScriptEditorTypes.NONE, DataType = typeof(string), ToolTip = "SDK Tooltip1", IsReadOnly = false } };

Свойство имеет следующие параметры:

  • PropName – имя свойства.
  • PropertyType – тип редактора:
    • SCRIPT – редактор скрипта,
    • VARIABLE – выбор переменной,
    • OBJECT – автоматический (например для перечислений),
    • CUSTOM – пользовательский (на данный момент не реализован).
  • DataType – тип данных. Например, typeof(string) или typeof(List<string>).
  • ToolTip – текст всплывающей подсказки.
  • IsReadOnly – признак только для чтения

3. Значения по умолчанию (не обязательно)

Значения задаются после вызова InitClass.

Пример:

this.Prop1 = this.IsNoCode("Prop1") ? "test text" : "\"test text\"";
  • В режиме No-code значение test text.
  • В режиме скрипта — "test text".

Пример:

public PrimoElementBack(IWFContainer container) : base(container) { sdkComponentName = "My sync element"; sdkComponentHelp = "This is my first sync element"; sdkComponentIcon = "pack://application:,,/Primo.SDKSample;component/Images/sample.png"; sdkProperties = new List<LTools.Common.Helpers.WFHelper.PropertiesItem>() { new LTools.Common.Helpers.WFHelper.PropertiesItem() { PropName = "Prop1", PropertyType = LTools.Common.Helpers.WFHelper.PropertiesItem.PropertyTypes.SCRIPT, EditorType = ScriptEditorTypes.NONE, DataType = typeof(string), ToolTip = "SDK Tooltip1", IsReadOnly = false } }; InitClass(container); this.Prop1 = this.IsNoCode("Prop1") ? "test text" : "\"test text\""; }

alt

4. Получение значения кастомного свойства

Для работы с данными в бизнес-логике используйте метод GetPropertyValue. Поддерживаются базовые типы данных и коллекции.

Синтаксис:

// Для string string p1 = GetPropertyValue<string>(this.Prop1, "Prop1", sd); // Для List<string> List<string> p2 = (List<string>)GetPropertyValue<object>(this.Prop2, "Prop2", sd);

Где первый параметр – это само свойство, а второй – имя свойства.

Например, элемент, выводящий в окно сообщение с заданным текстом, будет иметь следующий синтаксис:

public override ExecutionResult SimpleAction(ScriptingData sd) { try { string p1 = GetPropertyValue<string>(this.Prop1, "Prop1", sd); System.Windows.MessageBox.Show(p1); return new ExecutionResult() { SuccessMessage = "Done" }; } catch (Exception ex) { return new ExecutionResult() { IsSuccess = false, ErrorMessage = ex?.Message }; } }

5. Создание свойства с перечислениями (Enum)

Стандартный подход позволяет создавать свойства с выпадающим списком только для типа перечисление (Enum).

Пошаговая реализация

  1. Создание перечисления
    Определите enum с необходимыми значениями:

    public enum enumExample { Default, Success, Warning, Error }
  2. Объявление свойства

    Создайте свойство с объявленным типом перечисления enumExample. Добавьте атрибуты для отображения в Primo RPA Studio:

    private enumExample _myEnumProperty = enumExample.Default; [LTools.Common.Model.Serialization.StoringProperty] [System.ComponentModel.Category("Custom"), System.ComponentModel.DisplayName("My Enum Property")] public enumExample MyEnumProperty { get => this._myEnumProperty; set { this._myEnumProperty = value; this.InvokePropertyChanged(this, "MyEnumProperty"); } }
  3. Добавление свойства в панель свойств

    В методе инициализации свойств укажите:

    • PropertyType = OBJECT
    • DataType = typeof(enumExample)
    sdkProperties = new List<LTools.Common.Helpers.WFHelper.PropertiesItem>(); sdkProperties.Add(new LTools.Common.Helpers.WFHelper.PropertiesItem() { PropName = "MyEnumProperty", PropertyType = LTools.Common.Helpers.WFHelper.PropertiesItem.PropertyTypes.OBJECT, EditorType = ScriptEditorTypes.NONE, DataType = typeof(enumExample), ToolTip = "SDK My Enum Property", IsReadOnly = false, });
  4. Компиляция и проверка

    После компиляции и размещения библиотеки в папке PrimoStudio свойство My Enum Property появится в панели с возможностью выбора значений из списка.

alt

6. Создание кастомного свойства с выбором из произвольного списка

Необходимые библиотеки
Для работы потребуется добавить в проект Visual Studio две библиотеки из каталога установленной Primo RPA Studio:

  • DevExpress.Xpf.Core.v20.1.dll
  • DevExpress.Xpf.PropertyGrid.v20.1.dll

alt

Пошаговая инструкция

1. Объявление списка значений

На уровне класса объявите список для хранения возможных значений свойства:

/// <summary>Данные для списка значений MyListProperty</summary> private readonly List<string> _customList;

2. Инициализация списка

Заполните список значениями (например, в конструкторе класса):

InitClass(container); _customList = new List<string>() { "Default", "Success", "Warning", "Error" };

3. Создание строкового свойства

Опишите свойство без атрибута ValidateReturnScript (проверка ввода не требуется):

private string _myListProperty; [LTools.Common.Model.Serialization.StoringProperty] [System.ComponentModel.Category("Custom"), System.ComponentModel.DisplayName("My List Property")] public string MyListProperty { get => this._myListProperty; set { this._myListProperty = value; this.InvokePropertyChanged(this, "MyListProperty"); } }

4. Добавление свойства в панель свойств

Чтобы на панели свойств отобразилось наше свойство с выпадающим списком, необходимо переопределить Properties в классе элемента. В этом случае:

  • Базовый PropertyGridControl (из DevExpress) сохраняет все стандартные настройки.
  • Добавляется новое PropertyDefinition — в нём указывается:
    • Path — имя свойства, которое нужно отобразить.
    • EditSettings — настройки редактора (например, ComboBoxEditSettings для выпадающего списка).
    • ItemsSource — коллекция значений для списка (если требуется выбор из вариантов).
public override FrameworkElement Properties { get { var p = base.Properties; if (p is DevExpress.Xpf.PropertyGrid.PropertyGridControl devProperty) { devProperty.PropertyDefinitions.Add(new DevExpress.Xpf.PropertyGrid.PropertyDefinition() { Path = "MyListProperty", IsReadOnly = false, ShowEditorButtons = false, ShowMenuButton = false, ToolTip = "MyListProperty tooltip", EditSettings = new DevExpress.Xpf.Editors.Settings.ComboBoxEditSettings() { ItemsSource = _customList, IsTextEditable = false } }); } return p; } }

3. Завершение

После компиляции разместите библиотеку в папке PrimoStudio. В интерфейсе появится свойство My List Property с выбором значений из списка.

alt