Статьи и публикации

Использование и модификация системы рейтингования при создании корпоративных форумов на платформе SAP Portal

Антонов Д.А.

Антонов Д.А.

Руководитель отдела разработки Департамента практики SAP ООО «ЭнергоДата»

Введение

В состав портального решения от SAP традиционно входят средства организации собственного форума компании. Архитекторы разумно решили не изобретать велосипеда и внедрили в портальную платформу слегка модифицированное (адаптированное к интерфейсу и взаимодействующее с SAP KM) решение от Jive Software – компании, специализирующейся на автоматизации социальной составляющей. Многие странности форумной составляющей портальной платформы (например, отдельная административная консоль, собственная система настроек и контроля полномочий) связаны именно с происхождением компонентов.

В версии 7.3 компонент FORUMS также был обновлен, одним из наиболее значимых изменений SAP AG объявила ввод системы рейтингования, аналогичной существующим на многих Интернет-площадках. Традиционно пользователи указывают оценки сообщениям и на основе определенной весовой системы формируется совокупный рейтинг пользователя, при повышении рейтинга пользователям становятся доступны новые возможности, снимается ряд ограничений.

Однако в версии, поставляемой SAP, стандартной основой для установки рейтинга является просто количество сообщений и тем, созданных пользователем, что удовлетворяет далеко не всех пользователей. В ходе одного из проектов команде заказчика были заданы следующие требования к подсистеме форумов:

  • правами на установку оценок сообщениям/темам обладает выделенная группа пользователей (условно назовем ее «модераторы»);
  • рейтинг пользователя должен определяться оценками его сообщений;
  • все сообщения, созданные пользователями со статусом ниже порогового, должны помещаться в премодерационный раздел, т.е. сразу публикуются сообщения только пользователей с ненулевым рейтингом.

К сожалению, документация на компонент FORUMS от SAP AG страдает значительной неполнотой и описывает работу с ним практически исключительно с точки зрения пользователя, максимум – администратора, так что программная реализация запрошенного функционала потребовала глубокого изучения внутреннего устройства форумов, включая анализ структуры БД и частичный реинжиниринг.

Общий подход к решению

Как уже указывалось выше, официальная документация SAP не дает ответа на вопросы значительного изменения функционала форумов, ограничиваясь типовыми настройками. К счастью, разработчики Jive Software предусмотрели очень гибкую систему расширения – возможность разрабатывать собственные подгружаемые классы, реализующие программные интерфейсы так называемых «менеджеров».

Соответственно, было принято решение максимально использовать возможности настроек, дополнительно реализовав набор подгружаемых классов, реализующих недостающие в стандартной поставке возможности.

Настройка и расширение функционала подсистемы форумов

Подключение и настройка расчета рейтингов

В консоли администратора форума (Forums Administrator → Admin Console → Settings → Rating Settings) включаем функцию использования рейтингов в форумах (Рис.1).

схема работы решения на примере процесса согласования заявки на платеж

Рис.1. Включение рейтингования в форумах

Для простоты используется пятибалльная шкала оценки (Рис.2).

схема работы решения на примере процесса согласования заявки на платеж

Рис.2. Шкала оценки

После выполнения указанных настроек становится доступна возможность установки оценки сообщениям пользователей.

Для корректного расчета рейтинга пользователей выполняем следующие шаги: 1. Создаем класс расширения upgr.ed.fsk.RatingsCalculator, который рассчитывает суммарное количество очков, начисленных за сообщения пользователям (описывается ниже); 2. В файловой системе сервера портала создаем папку forumsExt в директории usrsap для размещения подгружаемых классов, расширяющих форумы; 3. Настраиваем параметры для подгружаемых классов (путь Forums Administrator → Admin Console → System Properties), см. Таблицу 1.

Таблица 1. Параметры для подгружаемых классов

Наименование параметра Значение параметра
reloading.classloader.dir.0 E:usrsapDEPforumsExt
reloading.classloader.regex upgr.ed.fsk.+

Добавлю несколько важных примечаний:

  • По умолчанию данных свойств в списке нет, их наименования и значения требуется ввести вручную;
  • Путь к файлам может быть произвольным, главное – доступность созданной папки серверному процессу портала;
  • Файлы классов должны храниться в распакованном виде (.class) в структуре папок, соответствующих пакету класса;
  • Для применения настроек требуется перезагрузка сервера приложений;
  • Обратите внимание на значение параметра «reloading.classloader.regex» - так как предполагалась реализация нескольких классов-расширений, то значение параметра является регулярным выражением и указывает не конкретный класс, а пакет.

Класс RatingsCalculator реализует интерфейс com.jivesoftware.forum.StatusLevelCalculator. Данный интерфейс определяет по сути всего два метода в разных вариациях – getPointLevel и getLeaderIds. Как видно из названий, первый метод возвращает число баллов учетной записи пользователя, второй – перечень наиболее результативных участников форума. Каждый из методов имеет три разновидности – для подсистемы форумов в целом, для отдельного форума и для категории внутри форума. Это дает возможность отображать рейтинги в зависимости от уровня, на котором мы просматриваем форум.

Наиболее простой вариант реализации – прямое чтение баллов из таблицы форумов через встроенный класс com.jivesoftware.base.database.ConnectionManager. Реализация класса тривиальна, но объемна, поэтому в тексте статьи не приводится. Небольшое замечание: если ожидаются значительные нагрузки на форум, более корректным решением будет кэширование результатов и использование дополнительного интерфейса-слушателя (такая возможность также предоставляется библиотекой Jive), выборочно обновляющего кэш при создании или удалении сообщений и изменении оценок.

Настройка таблицы рейтингов

Теперь, когда рейтинг рассчитывается так, как нам необходимо, можно приступить к следующему шагу – созданию таблицы рейтингов. В подписи каждого сообщения под псевдонимом пользователя помещается индикатор ранга пользователя согласно таблице, а в профиль – название ранга. Настройка производится просто - в консоли администратора форума (Forums Administrator → Admin Console → Settings →Status Level Settings, прямая ссылка http://:/forums/admin/settings-statuslevels.jsp) включаем функцию ведения уровней статусов (Рис.3).

схема работы решения на примере процесса согласования заявки на платеж

Рис.3. Включение уровня статусов в форумах

Там же создадим следующие уровни статусов (см. Таблицу 2, Рис.4).

Таблица 2. Уровни статусов для форума

Наименование статуса Описание статуса Количество сообщений Отображаемая картинка статуса
Мастер Старожил форума, к нему обращаются за помощью 11-100 Описание: http://sapland.ru/files/articles/russapexp/1/image007.png
Опытный Активно участвует в жизни форума, помогает товарищам 1-10 Описание: http://sapland.ru/files/articles/russapexp/1/image009.png
Новичок Только начинает свое общение 0-0 Описание: http://sapland.ru/files/articles/russapexp/1/image011.png


схема работы решения на примере процесса согласования заявки на платеж

Рис.4. Настроенные уровни статусов для форума

И, наконец, последний шаг - включаем использование предварительно созданного и помещенного в директорию forumsExt скомпилированного класса uprg.ed.fsk.RatingsCalculator (Рис.5)

схема работы решения на примере процесса согласования заявки на платеж

Рис.5. Использование собственного класса расчета рейтингов

Вот и все, рейтинги теперь отображаются в профиле пользователей, а процесс их расчета целиком определяется нашим собственным классом!

Ограничение возможностей в соответствии с рейтингом

Как было указано в начале статьи, одним из часто встречающихся требований является предоставление доступа к некоторым функциям форумов только пользователям, имеющим пороговый рейтинг. К счастью, программисты из Jive Software и здесь не подвели, предоставив мощный механизм обработчиков (interceptors), встраиваемых в цепочку процессов форума. Для создания обработчика необходимо фактически реализовать не один, а два класса: собственно обработчик, выполняющий требуемые функции (1), и его описатель, позволяющий управлять обработчиком из консоли форумов, например, задавать собственные параметры (2).

Для ограничения возможности новых пользователей без рейтинга в создании сообщений (т.е. предварительного помещения сообщений новичков в зону премодерации) мы создаём два класса - upgr.ed.fsk.CustomStatusInterceptor и upgr.ed.fsk.CustomStatusInterceptorBeanInfo. Первый из них реализует интерфейс com.jivesoftware.forum.MessageInterceptor, второй - com.jivesoftware.util.JiveBeanInfo. Интерфейс MessageInterceptor вызывается всякий раз при сохранении/редактировании сообщений пользователями и позволяет изменять стандартный порядок обработки. В данном случае действие очень простое – если количество рейтинговых очков, набранное автором сообщения, ниже порогового значения, сообщению устанавливается принудительная модерация:

@Override 
public void invokeInterceptor(ForumMessage message, int type)
        throws MessageRejectedException {
    User author = message.getUser();
    if (author != null) {
        StatusLevelManager manager =  
                StatusLevelManagerFactory.getInstance();
        int points = manager.getPointLevel(author);
        if (points < getMinPoints()) {
            message.setModerationValue(0, null);
        }
    }
}

Обратите внимание на метод getMinPoints() – в соответствии с соглашением JavaBeans все настраиваемые параметры, задаваемые для обработчика в консоли настроек, должны иметь функции чтения и установки (getters and setters).

Класс-дескриптор CustomStatusInterceptorBeanInfo очень прост, он возвращает описание обработчика для отображения в консоли. Единственная тонкость, о которой не следует забывать – включить в описание массив свойств, которые мы хотели бы настраивать в консоли. Скомпилированные классы размещаем в той же директории, которую мы создали ранее, и приступаем к настройкам.

В административной консоли форумов в разделе обработчиков (Settings -> Global Settings -> Global Interceptors) проводится установка нового обработчика (Рис.6).

схема работы решения на примере процесса согласования заявки на платеж

Рис.6. Установка обработчика

После нажатия кнопки новый обработчик добавляется в перечень доступных (Рис.7).

схема работы решения на примере процесса согласования заявки на платеж

Рис.7. Перечень доступных обработчиков

Теперь, когда обработчик появился в перечне доступных, его требуется добавить в список используемых при сохранении сообщений и установить количество рейтинговых баллов, требующееся для отправки сообщений без предварительной модерации. Желательно устанавливать созданный обработчик в цепь сохранения сообщений после стандартных (Рис.8).

схема работы решения на примере процесса согласования заявки на платеж

Рис.8. Включение обработчика в цепь сохранения сообщений

С момента установки обработчика все сообщения, созданные пользователями с рейтингом ниже установленного, отправляются в специальный буфер модерации и доступны для акцепта или отклонения в административной консоли (консоли модератора) по пути Содержимое–> Модерирование-> Обзор модерации (Рис.9).

схема работы решения на примере процесса согласования заявки на платеж

Рис.9. Обработка блокированных фильтром сообщений

Осталось добавить, что параметры обработчика можно менять в любой момент, изменения применяются сразу, однако на уже обработанные сообщения смена параметров (например, снижение порогового рейтинга) никак не повлияет, они так и останутся либо в зоне премодерации, либо опубликованными. Все изменения обработчик использует только для новых сообщений пользователей.

Заключение

Описанные расширения подсистемы форумов портала – лишь небольшая часть возможностей. Реализация форумов от Jive Software предоставляет широкий спектр методов модификации (даже создание собственных страниц и форм на особом скриптовом диалекте), но сообщество консультантов по продуктам SAP, к сожалению, мало знает об этих функциях. Надеюсь, данная статья поможет коллегам использовать портал на полную мощность.

Источник: http://sapland.ru/articles/stats/ispolizovanie-i-modiphikatsiya-sistemi-reitingovaniya-pri-sozdanii-korporativnih.html