JournalArticleLocalServiceUtil.updateArticle失败,并显示“ null”

时间:2019-02-28 06:08:59

标签: liferay liferay-6

我想更新Liferay Web Content,创建一个新版本,所以我写了这个Groovy脚本:

import com.liferay.portal.service.ServiceContext
import com.liferay.portlet.journal.service.JournalArticleLocalServiceUtil

long companyId=10154
long userId=12328
long groupId=17074933
long folderId = 0
String articleId="17075078"
double version=1
String content='<?xml version="1.0"?><root available-locales="en_US" default-locale="en_US"><static-content language-id="en_US"><![CDATA[Bonjour]]></static-content></root>'

ServiceContext serviceContext = new com.liferay.portal.service.ServiceContext()
serviceContext.setAddCommunityPermissions(true)
serviceContext.setAddGuestPermissions(true)
serviceContext.setScopeGroupId(groupId)
serviceContext.setCompanyId(companyId)
serviceContext.setUserId(userId)

JournalArticleLocalServiceUtil.updateArticle(
    userId, groupId, folderId, articleId, version, content, serviceContext)

不幸的是,Groovy脚本控制台失败,并且catalina.out仅包含以下简约调试信息:

null

标识符是我在Liferay Web界面中找到的标识符。只是检查一下,我验证了MySQL的内容,值是正确的:

mysql> select companyId, userId, groupId, folderId, articleId, version from JournalArticle order by createDate desc limit 1;
+-----------+--------+----------+----------+-----------+---------+
| companyId | userId | groupId  | folderId | articleId | version |
+-----------+--------+----------+----------+-----------+---------+
|     10154 |  12328 | 17074933 |        0 | 17075078  |       1 |
+-----------+--------+----------+----------+-----------+---------+

我做错了什么?

我正在使用Liferay Portal Enterprise Edition 6.2.10 EE GA1。相同的代码在Liferay Portal Community Edition 6.2 CE GA6上可以很好地工作,因此我可能需要一种变通方法来实现自己想要的目标。

相反,当我使用JournalArticleLocalServiceUtil.updateContent时,它可以工作,但是由于它不能创建Web内容的新版本(它只是替换了该版本)而不能使用。

1 个答案:

答案 0 :(得分:0)

ServiceContext的自我实例化容易出错,因为您不知道服务实现需要哪些字段。我猜想缺少ServiceContext的setter,所以updateArticle(或下面的某个位置,例如validate,updateAsset ...)抛出Nullpointer异常。 而是使用:

ServiceContext serviceContext = ServiceContextFactory.getInstance(JournalArticle.class.getName(), actionRequest);

否则,您可能需要在执行脚本时调试(如果可能)服务实现。