[ELMA3] Создание портлетной страницы с портлетом при активации контейнера модулей
В данном примере при активации контейнера модулей (все модули, точки расширения загружены) создается новая портлетая страница, а также добавляется на страницу портлет. Контейнер модулей активируется при запуске приложения или при пересоздании контейнера (это происходит при включении/отключении модуля).
Пример отображения данных
Рис. 1. Портлетная страница с портлетом при активации контейнера модулей
Методы расширения (интерфейса)
Точка расширения (интерфейс) IModuleContainerEvents имеет следующие методы:
/// <summary> /// Контейнер активирован (все модули, точки расширения загружены). /// Вызывается после выполнения активации контейнера. /// Контейнер активируется: /// 1) при запуске приложения /// 2) при пересоздании контейнера (это происходит при включении/отключении модуля) /// </summary> void Activated(); /// <summary> /// Контейнер уничтожается (вызывается при перезагрузке модулей) /// </summary> void Terminating();
Пример класса точки расширения
[Component] public class ModuleContainerEvents : IModuleContainerEvents { private const string UidS = "{159E131B-1F56-46ad-B31D-2A6EE573C9CF}"; public static Guid UID = new Guid(UidS); // Гуид портлетной страницы public IEntityManager<IPortletPage> PageManager { get; set; } public PortletManager PortletManager { get; set; } public ISecurityService SecurityService { get; set; } public UserManager UserManager { get; set; } public IUnitOfWorkManager UnitOfWorkManager { get; set; } public TwoColumn5050Layout Layout { get; set; } public void Activated() { var admin = UserManager.Load(SecurityConstants.AdminUserUid); var pagecount = PageManager.Find(a => a.Uid == UID).Count; if (pagecount == 0) { SecurityService.RunByUser(admin, () => CreateDefaultPage(admin, UID, "Моя страница с портлетом")); } } public void Terminating() { } public virtual void CreateDefaultPage(EleWise.ELMA.Security.Models.IUser admin, Guid portletPageGuid, string portletPageName) { UnitOfWorkManager.Execute(delegate { //Создание портлетной страницы var portletPage = PageManager.Create(); portletPage.Uid = portletPageGuid; portletPage.Name = portletPageName; portletPage.CreationAuthor = admin; portletPage.PortletsLayoutId = Layout.Id; PageSecurity.GrandAllUsersViewPermission(portletPage); portletPage.Save(); SecurityService.RunWithElevatedPrivilegies(delegate { var portalPageDataPath = PortletsRestrictionProvider.PortalPageDataPath(portletPage); var sharedPortletManager = PortletManager.Create(PersonalizationScope.Shared, portalPageDataPath); var portlet = PortletManager.GetPortlet(MyPortlet.UID); var zone = Layout.LeftZone.Id; //Добавление портлета на страницу var portletPersonalization = sharedPortletManager.AddPortlet(portlet, portalPageDataPath); portletPersonalization.Zone = zone; portletPersonalization.Frame = PortletFrame.Full; sharedPortletManager.SavePersonalization(portletPersonalization, portalPageDataPath); }); }); } }
В данном примере добавляется портлет на страницу, созданную в методе CreateDefaultPage. Подробнее о том, как создать свой портлет можно посмотреть здесь.