logo

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

Ссылки на элементы API

IModuleContainerEvents: 3.13, 3.15, 4.0.

Прикрепленные файлы