我想更新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内容的新版本(它只是替换了该版本)而不能使用。
答案 0 :(得分:0)
ServiceContext的自我实例化容易出错,因为您不知道服务实现需要哪些字段。我猜想缺少ServiceContext的setter,所以updateArticle(或下面的某个位置,例如validate,updateAsset ...)抛出Nullpointer异常。 而是使用:
ServiceContext serviceContext = ServiceContextFactory.getInstance(JournalArticle.class.getName(), actionRequest);
否则,您可能需要在执行脚本时调试(如果可能)服务实现。