Я хотел бы отредактировать webcontent (journalarticle) в Liferay и создать новую версию из пользовательского портлета. Я вызываю метод JournalArticleLocalServiceUtil.addArticle()
со следующими важными параметрами:
articleId = article.getArticleId();
autoArticleId = false;
version = article.getVersion()+0.1;
Так что старый articleId, и версия увеличилась.
Этот код работает в LR 6.1.30EE, но в 6.1.20EE и 6.1.1CE я получил DuplicateArticleIdException
. Это ошибка в более ранней версии? Есть ли способ обхода или другой метод для создания новой версии существующего webcontent программно?
Незначительный вопрос: каков правильный режим увеличения версии? Вышеуказанный путь +0.1 создает из v1.1 v1.200000000000002, но просто v1.2 предпочтительнее.
Примечание: updateArticle()
с новой версией тоже не работает, он выдает ArticleVersionException
. Похоже, что это правильно, поскольку он должен обновлять уже существующий контент.
Хорошо, я нахожу решение тем временем, благодаря некоторому вдохновению от Andew Jardin от Liferay Forums.
Решение довольно просто: вызовите JournalArticleLocalServiceUtil.updateArticle()
, но со старой версией. Liferay автоматически решает, когда создавать новую версию, и заботится о назначении правильной версии.
Я решил его решить,
double version = article.getVersion();
version = MathUtil.format(version + 0.1, 1, 1);
article.setVersion(version);
.getVersion()
и.getVersion()
эту возвращенную версию непосредственно вupdateArticle()
. Если я вручную увеличиваю версию, я получаю сообщение о том, что LR не может найти статью. Если яArticleVersionException
оригинальную версию, я получаюArticleVersionException
безArticleVersionException
либо другого описания того, что не так..getVersion()
вupdateArticle()
. Вы уверены, что загружаете последнюю версию статьи? (Например, используяJournalArticleLocalServiceUtil.getLatestArticle()
)