我在liferay门户网站CE 6.2.0上创建了一个带有工作流的portlet,并在部署后为其添加了单个审批者工作流。它运作成功,我可以查看通知,分配给某人并批准或拒绝。但当我点击查看按钮时,它显示“资产未找到”
我无法弄清楚我错过了什么。我的代码中有以下内容。
在LocalServiceImpl
中assetEntryLocalService.updateEntry(userId, timesheet.getGroupId(),
date, date, Timesheet.class.getName(),
timesheet.getPrimaryKey(), timesheet.getUuid(), 0,
serviceContext.getAssetCategoryIds(),
serviceContext.getAssetTagNames(), true, null, null, null,
null, ContentTypes.TEXT_HTML, timesheet.getProject(),
timesheet.getTaskType(), timesheet.getProject() + " : "
+ timesheet.getTaskType(), null, 0, 0, 0, false);
在AssetRenderer中
public String render(RenderRequest request, RenderResponse response,
String template) throws Exception {
if (template.equals("full_content")) {
request.setAttribute("TIMESHEET_ENTRY", _timesheet);
return "/html/" + template + ".jsp";
} else {
return null;
}
}
在AssetRendererFactory
中public AssetRenderer getAssetRenderer(long classPK, int type)
throws PortalException, SystemException {
Timesheet timesheet = TimesheetLocalServiceUtil.getTimesheet(classPK);
return new TimesheetAssetRenderer(timesheet);
}
我在做什么有什么不对吗?
我在portlet.xml中添加了以下内容
<asset-renderer-factory>com.timesheet.asset.TimesheetAssetRendererFactory</asset-renderer-factory>
是否需要覆盖其他功能?
我发现错误是从以下给定代码点的liferay-portal / portal-web / docroot / html / portlet / asset_publisher / view_content.jsp中抛出的
if (!assetEntry.isVisible() &&
(assetRenderer.getAssetRendererType() == AssetRendererFactory.TYPE_LATEST_APPROVED)) {
throw new NoSuchModelException();
}
在这里,我可以发现即使我在updateEntry方法调用中将visible设置为true,也将其设置为false。我不知道该怎么做。问题出在哪里?
答案 0 :(得分:0)
(移植我的评论作为答案:)
AssetEntry属于使用服务构建器ORM实现的Liferay架构。如果您打开Liferay源并搜索任何[SOME_MODEL_CLASS] LocalServiceImpl类,您可以看到更新类型函数遵循以下模式:
SOME_MODEL_CLASS obj = sOME_MODEL_CLASSPersistence.findByPrimaryKey(longId);
obj.setSomeProperty(someValue);
sOME_MODEL_CLASSPersistence.update(obj, false);
请注意,最后,他们调用了persistence.update,最终将更改存储在数据库中。
通常,在更新Liferay对象的值时,请确保调用SOME_MODEL_CLASSLocalServiceUtil.update()函数。例如,在以下代码中,我正在尝试更新用户的Facebook ID:
Contact cnt = user.getContact();
cnt.setFacebookSn(facebookId);
ContactLocalServiceUtil.updateContact(cnt);
UserLocalServiceUtil.updateUser(user);