[ELMA3] Реализация событий уровня модуля
В статье приведен пример создания собственного события Вашего модуля. В данном примере при активации и установке модуля будет создаваться системная группа «Группа при активации модуля». Данный функционал можно использовать широко, например, выдавать права автоматически, создавать таблицы в БД, создавать какие-то объекты по умолчанию, но нужно очень аккуратно использовать данный функционал, так как есть вероятность, что при неверном проектировании права будут выдаваться несколько раз и так далее.
Пример отображения данных
Рис. 1. Созданная системная группа «Группа при активации модуля» после активации модуля и перезапуска сервера
Методы расширения (интерфейса) IModuleEvents
Точка расширения (интерфейс) IModuleEvents имеет следующие методы:
/// <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 имеет следующие методы:
/// <summary> /// Контейнер активирован (все модули, точки расширения загружены). /// Вызывается после авполнения активации контейнера. /// Контенер автивируется: /// 1) при запуске приложения /// 2) при пересоздании контейнера (это приисходит при включении/отключении модуля) /// </summary> void Activated(); /// <summary> /// Контейнер уничтожается (вызывается при перезагрузке модулей) /// </summary> void Terminating();
Пример класса точки расширения
[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) модуля, но пока данные методы не используются в системе.