С момента выпуска первой версии Directum Portal мы успели внедрить его как у заказчика, так и у нас в компании. В итоге он стал нашим корпоративным порталом, на котором выкладываются актуальные новости, ведутся календари, отображаются события компании. За это время накопилось достаточно полезной информации, которая может помочь при внедрении.

Рис. Главная страница

Рис. Страница Новости

Рис. Страница Сотрудники

Рис. Страница Календарь

Рис. Страница Развитие
Что же такое Directum Portal? В самом простом понимании это no-code конструктор для сложных корпоративных сайтов и порталов. Мы формируем страницу, перетаскивая мышкой готовые виджеты и элементы. В основе Directum Portal лежит Liferay, главной особенностью которого является возможность объединять данные из разных систем в едином удобном интерфейсе.
Рассмотрим развертывание Liferay именно на Windows, так как установка docker-образов подробно описана в документации к порталу. Также наиболее удобно вести всю разработку на одной виртуальной машине, а среда разработки Directum RX работает только под Windows.
Подготовка к установке:
Пример:
JAVA_HOME: C:\Program Files\Microsoft\jdk-11.0.26.4-hotspot
JRE_HOME: %JAVA_HOME%
Для запуска портала открываем командную строку, переходим в папку с разархивированным порталом и выполняем команду startup. В итоге портал запустится на 8080 порту. Далее задаем основные настройки, если нужно указываем подключение к базе данных Postgres или MySQL.

Рис. Пример настроек
В результате получаем чистый Liferay.

Рис. Стартовая страница
Для приведения чистого Liferay к виду Directum Portal нам понадобится развернутый портал из docker-образов. Последовательность действий:
Видео с примером настройки:
Что такое виджет в Liferay? В общем смысле виджет — это независимый модуль или компонент, который выполняет определенную функцию и который пользователь может разместить на странице портала. За время внедрения было реализовано множество виджетов: Дни рождения, События из календарей, RSS лента, Отображение оргструктуры, Карточка сотрудника, Недавние комментарии к статьям, Бронирование переговорок и т.д.

Рис. Дни рождения

Рис. Карточка сотрудника

Рис. Библиотека
Подготовка:
Команда для установки:
npm install –global yo@4.3.1
Команда для установки:
npm install -global generator-liferay-js
Создание проекта:

Рис. Пример создания проекта
В результате будет создан проект с следующей структурой:
В файле конфигурации можно создать системные настройки (system), которые будут влиять сразу на все экземпляры виджета, а также можно добавить экземплярные настройки (portletInstance), которые устанавливаются конкретно для каждого виджета. Например, есть 2 страницы и на каждой используется один и тот же виджет, в таком случае Системные настройки будут работать сразу на оба виджета, а экземплярные настройки у каждого виджета уникальны.

Рис. Пример файла configuration.json
Далее будут продемонстрирована настройка виджета на портале.
Видео: Системная настройка
Видео: Конфигурация виджета
В файле локализации задаются ключи и их локализованное значение. Используется для локализации текста конфигурации, а также при необходимости текста, отображаемого в виджете для клиента. Для русской локализации нужно создать файл с наименованием Language_ru_properties.

Рис. Файл локализации
Чтобы использовать локализованные строки у себя в коде, их нужно получать через следующую функцию Liferay.Language.get("key"). Также можно использовать общие ключи локализации, которые созданы через no-code.

Рис. Путь до Language Override

Рис. Ключ локализации
Используются для конфигурации сборщика зависимостей npm, который оптимизирует JavaScript, применяя пресеты (presets) и плагины, чтобы управлять зависимостями модулей и избегать конфликтов имен. Важный момент заключается в том, что при использовании async и await в коде необходимо добавить плагин transform-runtime.

Рис. Файл babelrc
Данный файл содержит основные настройки сборки проекта, такие как путь до собираемого jar файла, доступность виджета, пути до локализации и конфигурации, а также признаки необходимости генерации отчетов. Например, если dump-report включен, то при сборке будет создаваться файл с подробным описанием состава проекта.
Описание параметров:

Рис. Файл npmbundlerrc
Если при создании виджета был указан путь до локального Liferay, то опубликовать можно при помощи команды npm run deploy. Если же нужно опубликовать виджет на другой сервер, то в терминале вводим команду npm run build, в итоге собирается jar файл, который необходимо перенести в папку deploy на сервере.
Важный момент, по оптимизации заключается в том, что нужно использовать максимально легкие библиотеки, так как чем больше будет весить ваш виджет, тем дольше он будет загружаться на странице портала. Исходя из этого, размер виджета не должен превышать 1 МБ. Также, если вы будете использовать react в вашем виджете, то он уже по стандарту доступен в самом Liferay, для этого нужно подключить библиотеку liferay/portal7.4, которая включает большинство часто используемых библиотек, но там 16 версия react. Если нужна более новая версия или какая-то специфичная библиотека, которая будет использоваться сразу в нескольких виджетах, то потребуется создать проект с общими зависимостями (Shared Bundle).
Если в виджете используется много визуала, то может возникнуть ситуация, когда будет не удобно использовать 1 css файл. В таком случае нужно указать пути до всех css файлов в package.json в виде массива строк.

Рис. Пример указания нескольких css файлов
Если в виджете будут использоваться картинки, то в папке assets нужно создать новую папку images и хранить картинки именно там. Для того чтобы обратиться к этим картинкам нужно использовать свойство contextPath.

Рис. Дерево файлов


Рис. Пример использования
Допустим у нас есть несколько виджетов которые должны обмениваться данными между собой. Для таких случаев в Liferay есть система событий. Liferay.fire позволяет отправлять данные в виде объекта. А Liferay.on работает как подписка на события, с заданным наименованием. Важно при переключении страниц удалять подписки на события, для этого используется метод Liferay.detach.

Рис. Пример отправки события

Рис. Пример подписки на событие
Для получения информации о текущем контексте используется объект Liferay.ThemeDisplay. При помощи него можно, например получить информацию о пользователе, о сайте, об url, о локализации и т.д.
Основные методы:
Информация о пользователе
Информация о группах
URL и пути
Язык и локализация

Рис. Пример использования Liferay.ThemeDisplay
В Liferay есть два основных типа API для работы с данными и сервисами: Rest Api и JSONWC.
Доступен по адресу /o/api, по которому откроется swagger с описанием всех доступных методов.

Рис. Swagger
Из плюсов можно выделить REST-подход, а также то, что запросы можно выполнять прямо в swagger, но не все сервисы доступны через данный API, так, например, работа с календарем недоступна по REST API.

Рис. Пример использования REST API
Доступен по адресу /api/jsonws, по которому откроется веб интерфейс с описанием методов.

Рис. Веб интерфейс
Данный тип использовался в Liferay с самого начала, из-за этого он поддерживает практически все базовые сервисы, такие как календари, новости, форумы и т.д. Из особенностей можно выделить то, что этот тип работает только через POST запросы.

Рис. Пример использования JSONWC
Визуальный конструктор позволяет создавать и настраивать страницы портала, перетаскивая готовые элементы (блоки, поля) в графическом интерфейсе. Помимо этого, можно указать CSS как для отдельных объектов на странице, так и для всего сайта сразу, также можно добавить свой JavaScript код на страницы.
Для примера возьмем ситуацию, когда нужно скрыть разделы у календаря.
Последовательность действий:
Видео: Демонстрация настройки css
Для примера возьмем ситуацию, когда нужно чтобы неавторизованных пользователей перенаправляло на другую страницу.
Последовательность действий:
Видео: Демонстрация добавление js кода
Для более сложной настройки страниц или скрытия каких-нибудь базовых элементов необходимо знание CSS и HTML, а для реализации виджетов на портале нужно знать либо JavaScript либо Java.
Авторизуйтесь, чтобы написать комментарий