Как создать веб-контент Liferay на Java?

Создать веб-контент легко с помощью пользовательского интерфейса.

Но как программно добавить новый веб-контент на Java?

введите здесь описание изображения

Я должен перенести данные из устаревшей системы в Liferay 7, поэтому для этого я пишу пакет Java OSGI. Нет пользовательского интерфейса.


person Nicolas Raoul    schedule 19.05.2017    source источник


Ответы (2)


Николас.

У меня была аналогичная проблема, которую нужно было решить в Liferay 6.2, но я считаю, что вы можете решить свою, используя тот же подход.

Мы создали «интеграционный интерфейс» (простой пакетный проект Java для запуска всего процесса), который взаимодействует с устаревшей системой и сервисом Liferay REST (созданным с помощью Liferay Service Builder).

Liferay предоставляет вам сервисный API, с помощью которого вы можете управлять некоторыми его ресурсами. Чтобы создать журнальную статью (веб-контент), вы должны вызвать класс JournalArticleLocalServiceUtil

Вот пример кода для создания статьи в журнале:

public static JournalArticle addJournalArticle(
        long userId, long groupId, String title, String contentEn)
        throws Exception {

    ServiceContext serviceContext = new ServiceContext();

    serviceContext.setAddGroupPermissions(true);
    serviceContext.setAddGuestPermissions(true);
    serviceContext.setScopeGroupId(groupId);
    serviceContext.setWorkflowAction(WorkflowConstants.ACTION_PUBLISH);
    Map<Locale, String> titleMap = new HashMap<Locale, String>();
    Map<Locale, String> descriptionMap = new HashMap<Locale, String>();

    titleMap.put(Locale.US, title);
    descriptionMap.put(Locale.US, title);


    try {
        JournalArticleLocalServiceUtil.deleteArticle(groupId, title, serviceContext);
    } catch (Exception ex) {
        System.out.println("Ignoring " + ex.getMessage());
    }

    String xmlContent = "<?xml version='1.0' encoding='UTF-8'?>" +
            "<root default-locale=\"en_US\" available-locales=\"en_US\">" +
                "<static-content language-id=\"en_US\">" +
                    "<![CDATA[" + contentEn + "]]>" +
                "</static-content>" +
            "</root>";

    JournalArticle article = JournalArticleLocalServiceUtil.addArticle(
            userId, groupId, 0, 
            0, 0, title, true, 
            JournalArticleConstants.VERSION_DEFAULT, titleMap, 
            descriptionMap, xmlContent, 
            "general", null, null, null, 
            1, 1, 2014, 0, 0,
            0, 0, 0, 0, 0, true, 
            0, 0, 0, 0, 0, true, 
            true, false, null, null, 
            null, null, serviceContext);

    return article;
}

Но вы должны улучшить его, чтобы поставить правильные права пользователя, категории, теги и т. д.

person myakiju    schedule 19.05.2017
comment
И я также много узнал об API Liferay в их репозитории на github https://github.com/liferay/com-liferay-journal. - person myakiju; 19.05.2017
comment
Спасибо! Примечание. Кажется, что для Liferay 7 требуется еще один аргумент для вызова addArticle. - person Nicolas Raoul; 26.05.2017

В таких случаях полезно посмотреть исходный код.

Также рассмотрите возможность использования Процесс обновления. Хотя ваш случай на самом деле не является обновлением, он звучит как одноразовая операция, которую вы в идеале должны выполнять при запуске.

person Milen Dyankov    schedule 18.07.2017