[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) модуля, но пока данные методы не используются в системе.