无法在工作流liferay中查看资产

时间:2014-01-23 12:42:40

标签: java liferay liferay-6

我在liferay门户网站CE 6.2.0上创建了一个带有工作流的portlet,并在部署后为其添加了单个审批者工作流。它运作成功,我可以查看通知,分配给某人并批准或拒绝。但当我点击查看按钮时,它显示“资产未找到” enter image description here


我无法弄清楚我错过了什么。我的代码中有以下内容。

在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。我不知道该怎么做。问题出在哪里?

1 个答案:

答案 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);