При необходимости можно запросить пользователя, выполняющего интерактивную команду, ввести значения дополнительных параметров, и использовать их в дальнейшем при выполнении скрипта команды. В этом случае выполнение команды будет предваряться открытием формы ввода дополнительных параметров.
Дополнительные параметры интерактивной команды Parameters можно запросить с помощью стандартной формы (флаг Parameters list), генерируемой системой, предварительно добавив их в одноименный список Parameters:
Или же можно запросить их с помощью самостоятельно сконструированной формы (флаг Custom form), в этом случае нет необходимости добавлять параметры в список Parameters, однако необходимо самостоятельно сконструировать форму параметров.
Рассмотрим реализацию второго, более сложного варианта, на примере пользовательской команды, которая отправляет сообщение пользователю, выполняющему ее. В тексте сообщения необходимо вывести имя пользователя, соответствующее введенному в форме дополнительных параметров идентификатору.
В проекте модуля создаем новый объект Windows Form, наследуем его от класса BaseParamForm (из пространства имен Ultima.Client.ParamForms) и определяем параметры формы:
[ParamForm("61A32313-4DA6-495F-8062-3CF60ED38EDE", "Первая тестовая форма", "Введите параметры в первой тестовой форме")] public partial class TestParamForm1 : BaseParamForm { public TestParamForm1() { InitializeComponent(); } } |
В свойство Parameters класса BaseParamForm под ключом RecordID передается код объекта, из которого запустили команду. |
Добавляем в экранную форму элемент управления SpinEdit для ввода идентификатора пользователя:
// Получаем значение, введенное в элементе управления SpinEdit. protected override void GetParameters() { Parameters["UserID"] = spinEdit.Value; } |
На этом создание формы ввода параметров можно считать оконченным. Компилируем проект, копируем созданные библиотеки в папку модуля в клиентском приложении Client/ClientModules/TradeTestSolution, перезагружаем метаданные и переходим к редактированию команды. Установив флаг Custom form для свойства Parameters, выбираем созданную форму ввода дополнительных параметров в списке Parameter form:
После этого можно перейти к редактированию скрипта, который будет отправлять сообщение пользователю:
Получаем идентификатор пользователя из формы дополнительных параметров, запрашиваем имя пользователя, соответствующее этому идентификатору, и отправляем сообщение:
Данные, введенные в форму параметров, можно проверять на валидность с помощью следующего варианта метода GetParameters:
GetParameters(string title, IEnumerable<ScriptUserParameter> parameters, IDictionary<string, object> paramValues, Action<ParameterValidationHelper> validationMethod) |
Класс ParameterValidationHelper позволяет передать методу валидации значения параметров, а обратно – результаты проверки с любой нужной степенью детализации, чтобы, например, подсветить неправильные параметры на форме через ErrorProvider, например:
ParameterValidationHelper => { var x = ParameterValidationHelper.Parameters["Password"]; if (x.ToString().Length < 5) { ParameterValidationHelper.ReportError("Password", "Пароль слишком короткий"); } } |