Команда модуля это элемент, который может быть добавлен в интерфейс (главное меню) пользователя в форме настройки пользовательского интерфейса. При загрузке модуля ядро опрашивает все классы, унаследованные от класса BaseModule, для получения списка команд.

Каждый модуль может экспортировать команды двумя способами:

пометив метод атрибутом Command;

реализовав метод GetCommands который должен возвращать коллекцию команд (объектов класса Command).

В качестве примера создадим еще одну команду для открытия списковой формы справочника Vehicle (помимо существующей).

Для этого в проекте модуля создаем новый объект Class, который назовем TradeTestSolutionModule, унаследуем его от класса BaseModule (из пространства имен Ultima.Client) и реализуем все его методы:

[Export(typeof(IModule)), PartCreationPolicy(CreationPolicy.Shared)]

public class TradeTestSolutionModule : BaseModule

{

 public override string Description

 {

         get { return "Commands of the Trade test solution module"; }

 }

 

 public override string Name

 {

         get { return "Trade test solution"; }

 }

 

 public override System.Resources.ResourceManager ResourceManager

 {

         get { return Resources.ResourceManager; }

 }

}

Теперь при загрузке нашего модуля ядром будут получены все описанные в классе TradeTestSolutionModule команды.

Пометим новую команду с помощью атрибута Command:

[Command("GUID", "Name", "Description", "Category")]

public void CommandName(object sender, CommandEventArgs args)

{

}

Атрибут Command имеет следующие параметры:

GUID – глобальный идентификатор вида {6F9619FF-8B86-D011-B42D-00CF4FC964FF};

Name – название ресурса, хранящего название команды;

Description – название ресурса, хранящего описание команды;

Category – название ресурса, хранящего категорию команды. Категория может хранить описание древовидной структуры, в этом случае родители и потомки разделены символом "|", а сама категория имеет вид "уровень 1|уровень 2|уровень 3".

Создадим соответствующие ресурсы для команды в свойствах проекта модуля. При первом обращении файл ресурсов будет необходимо создать:

Example_CreateCommand1

Имена ресурсов Name будут использованы в команде:

Example_CreateCommand2

В качестве ресурсов могут выступать различные (не только текстовые) объекты:

Example_CreateCommand3

Теперь, создав ресурсы, реализуем метод, открывающий созданную ранее списковую форму справочника Vehicle, и пометим его атрибутом Command:

// В примере используется один и тот же ресурс

// для названия Name и описания Description команды.

[Command("{33471BB9-6380-4F82-B17A-5A0EAD4DDF09}", "VehicleListForm_name",

 "VehicleListForm_name", "VehicleListForm_category")]

public async void OpenVehicleListForm(object sender, CommandEventArgs args)

{

 await DictionaryHelper.BrowseRecords<Vehicle>();

}

Компилируем проект, копируем созданные библиотеки в папку модуля в клиентском приложении Client/ClientModules/TradeTestSolution, перезагружаем метаданные и находим созданную команду в форме настройки пользовательского интерфейса в указанной категории:

Example_CreateCommand4