[ELMA3] Создание портлетной страницы с портлетом при активации контейнера модулей
В данном примере при активации контейнера модулей (все модули, точки расширения загружены) создается новая портлетая страница, а также добавляется на страницу портлет. Контейнер модулей активируется при запуске приложения или при пересоздании контейнера (это происходит при включении/отключении модуля).
Пример отображения данных
Рис. 1. Портлетная страница с портлетом при активации контейнера модулей
Методы расширения (интерфейса)
Точка расширения (интерфейс) 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 60 61 62 63 | [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. Подробнее о том, как создать свой портлет можно посмотреть здесь.