Команда модуля – это элемент, который может быть добавлен в интерфейс (главное меню) пользователя в форме настройки пользовательского интерфейса. При загрузке модуля ядро опрашивает все классы, унаследованные от класса 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".
Создадим соответствующие ресурсы для команды в свойствах проекта модуля. При первом обращении файл ресурсов будет необходимо создать:
Имена ресурсов Name будут использованы в команде:
В качестве ресурсов могут выступать различные (не только текстовые) объекты:
Теперь, создав ресурсы, реализуем метод, открывающий созданную ранее списковую форму справочника 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, перезагружаем метаданные и находим созданную команду в форме настройки пользовательского интерфейса в указанной категории: