Кастомные свойства
Кастомные свойства позволяют настраивать параметры элементов в 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\"";
}
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).
Пошаговая реализация
-
Создание перечисления
Определитеenum
с необходимыми значениями:public enum enumExample { Default, Success, Warning, Error }
-
Объявление свойства
Создайте свойство с объявленным типом перечисления
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"); } }
-
Добавление свойства в панель свойств
В методе инициализации свойств укажите:
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, });
-
Компиляция и проверка
После компиляции и размещения библиотеки в папке PrimoStudio свойство My Enum Property появится в панели с возможностью выбора значений из списка.
6. Создание кастомного свойства с выбором из произвольного списка
Необходимые библиотеки
Для работы потребуется добавить в проект Visual Studio две библиотеки из каталога установленной Primo RPA Studio:
DevExpress.Xpf.Core.v20.1.dll
DevExpress.Xpf.PropertyGrid.v20.1.dll
Пошаговая инструкция
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 с выбором значений из списка.