[ELMA3] Реализация событий уровня модуля
В статье приведен пример создания собственного события Вашего модуля. В данном примере при активации и установке модуля будет создаваться системная группа «Группа при активации модуля». Данный функционал можно использовать широко, например, выдавать права автоматически, создавать таблицы в БД, создавать какие-то объекты по умолчанию, но нужно очень аккуратно использовать данный функционал, так как есть вероятность, что при неверном проектировании права будут выдаваться несколько раз и так далее.
Пример отображения данных
Рис. 1. Созданная системная группа «Группа при активации модуля» после активации модуля и перезапуска сервера
Методы расширения (интерфейса) IModuleEvents
Точка расширения (интерфейс) IModuleEvents имеет следующие методы:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 | /// <summary> /// Установка модуля /// </summary> /// <param name="module">Веб-часть модуля приложения</param> void Installing(IWebModuleUnit module); /// <summary> /// Модуль установлен /// </summary> /// <param name="module">Веб-часть модуля приложения</param> void Installed(IWebModuleUnit module); /// <summary> /// Включение модуля /// </summary> /// <param name="module">Веб-часть модуля приложения</param> void Enabling(IWebModuleUnit module); /// <summary> /// Модуль включен /// </summary> /// <param name="module">Веб-часть модуля приложения</param> void Enabled(IWebModuleUnit module); /// <summary> /// Отключение модуля /// </summary> /// <param name="module">Веб-часть модуля приложения</param> void Disabling(IWebModuleUnit module); /// <summary> /// Модуль отключен /// </summary> /// <param name="module">Веб-часть модуля приложения</param> void Disabled(IWebModuleUnit module); /// <summary> /// Деинсталляция модуля /// </summary> /// <param name="module">Веб-часть модуля приложения</param> void Uninstalling(IWebModuleUnit module); /// <summary> /// Модуль деинсталлирован /// </summary> /// <param name="module">Веб-часть модуля приложения</param> void Uninstalled(IWebModuleUnit module); |
Методы расширения (интерфейса) IModuleContainerEvents
Точка расширения (интерфейс) IModuleContainerEvents имеет следующие методы:
1 2 3 4 5 6 7 8 9 10 11 12 13 | /// <summary> /// Контейнер активирован (все модули, точки расширения загружены). /// Вызывается после авполнения активации контейнера. /// Контенер автивируется: /// 1) при запуске приложения /// 2) при пересоздании контейнера (это приисходит при включении/отключении модуля) /// </summary> void Activated(); /// <summary> /// Контейнер уничтожается (вызывается при перезагрузке модулей) /// </summary> void Terminating(); |
Пример класса точки расширения
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 | [Component] public class ModuleEvents : IModuleEvents, IModuleContainerEvents { private readonly Guid _guid = new Guid( "7283F18A-D4DD-492D-B6B8-BC955A38115B" ); public IUserGroup Group() { var group = UserGroupManager.Instance.Find(a => a.Uid == _guid).FirstOrDefault(); return @group; } public void CreateGroups() { if (Group() == null ) { var group = UserGroupManager.Instance.Create(); group.CreationAuthor = UserManager.Instance.Load(SecurityConstants.SystemUserUid); group.CreationDate = DateTime.Now; group.Name = "Группа при активации модуля" ; group.Description = "Группа при активации модуля" ; group.Groups.Add(UserGroupManager.Instance.Load(SecurityConstants.AdminGroupUid)); group.IsSystem = true ; group.Uid = _guid; group.Save(); } } public void Activated() { CreateGroups(); var securityService = Locator.GetService<SecurityService>(); if (securityService != null ) { securityService.ResetPermissionsCache(); } } public void Terminating() { } public void Installing(IWebModuleUnit module) { } public void Installed(IWebModuleUnit module) { CreateGroups(); } public void Enabling(IWebModuleUnit module) { } public void Enabled(IWebModuleUnit module) { } public void Disabling(IWebModuleUnit module) { } public void Disabled(IWebModuleUnit module) { } public void Uninstalling(IWebModuleUnit module) { } public void Uninstalled(IWebModuleUnit module) { } } |
Как можно заметить, в точке расширения есть методы по отключению/удалению (Disabling, Disabled, Uninstalling, Uninstalled) модуля, но пока данные методы не используются в системе.