[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. Подробнее о том, как создать свой портлет можно посмотреть здесь.