Model view controller 在liferay自定义portlet中集成工作流不起作用

Model view controller 在liferay自定义portlet中集成工作流不起作用,model-view-controller,liferay,workflow,portlet,Model View Controller,Liferay,Workflow,Portlet,大家好,我在ServiceBuilder中有一个自定义portlet和一个表。我想集成工作流,以便在表中插入行应该通过kaleo工作流,所以除了那个教程之外,我没有找到一个清晰的教程 添加了自定义代码,但当我运行insert项时,它会显示在一个jsp上,列出所有插入的项。工作流集成不起作用,在我的工作流任务上没有显示任何内容。在执行此操作之前,我在控制面板中为部署的portlet启用了工作流 这是我的服务生成器实体 <author>Cooder</author>

大家好,我在ServiceBuilder中有一个自定义portlet和一个表。我想集成工作流,以便在表中插入行应该通过kaleo工作流,所以除了那个教程之外,我没有找到一个清晰的教程

添加了自定义代码,但当我运行insert项时,它会显示在一个jsp上,列出所有插入的项。工作流集成不起作用,在我的工作流任务上没有显示任何内容。在执行此操作之前,我在控制面板中为部署的portlet启用了工作流

这是我的服务生成器实体

<author>Cooder</author>
    <namespace>sem</namespace>
    <entity name="OrganizationType" local-service="true" uuid="true">
        <column name="organizationTypeId" primary="true" type="long"></column>
        <column name="organizationTypeName" type="String"></column>
        <column name="userId" type="long"></column>
        <column name="companyId" type="long"></column>
        <column name="groupId" type="long"></column>
        <column name="createDate" type="Date"></column>
        <column name="modifiedDate" type="Date"></column>
        <column name="status" type="int"></column>
        <column name="statusByUserId" type="long"></column>
        <column name="statusByUserName" type="String"></column>
        <column name="statusDate" type="Date"></column>
        <order by="asc">
            <order-column name="createDate" order-by="desc"></order-column>
        </order>
        <finder name="OrganizationTypeName" return-type="Collection">
            <finder-column name="organizationTypeName"></finder-column>
        </finder>
        <finder name="GroupId" return-type="Collection">
            <finder-column name="groupId"></finder-column>
        </finder>
        <finder name="CompanyId" return-type="Collection">
            <finder-column name="companyId"></finder-column>
        </finder>
        <finder name="G_S" return-type="Collection">
            <finder-column name="groupId"></finder-column>
            <finder-column name="status"></finder-column>
        </finder>
        <reference package-path="com.liferay.portal" entity="User"></reference>
        <reference package-path="com.liferay.portlet.asset" entity="AssetEntry"></reference>
    </entity>
接下来是我的助理

public class AssetRendererOrganizationType extends BaseAssetRenderer{

    private OrganizationType _organizationType;
    @Override
    public long getClassPK() {
        return _organizationType.getOrganizationTypeId();
    }

    @Override
    public long getGroupId() {
        return _organizationType.getGroupId();
    }

    @Override
    public String getSummary(Locale arg0) {
        return _organizationType.getOrganizationTypeName();
    }

    @Override
    public String getTitle(Locale arg0) {
        return "Organization type context entry";
    }

    @Override
    public long getUserId() {
        return _organizationType.getUserId();
    }

    @Override
    public String getUserName() {
        // TODO Auto-generated method stub
        return null;
    }

    @Override
    public String getUuid() {
        return _organizationType.getUuid();
    }

    @Override
    public String render(RenderRequest request, RenderResponse response, String template)
            throws Exception {
        if (template.equals(TEMPLATE_FULL_CONTENT)) {
            return "/html/organizationType.jsp";
        }
        else
        {
            return null;
        }
    }

    public AssetRendererOrganizationType(OrganizationType _organizationType) {
        super();
        this._organizationType = _organizationType;
    }

}
接下来是我的WorkflowHandler

public class WorkflowHandlerOrganizationType extends BaseWorkflowHandler{

    public static final String CLASS_NAME = OrganizationType.class.getName();

    @Override
    public String getClassName() {
        return CLASS_NAME;
    }

    @Override
    public String getType(Locale locale) {
        return LanguageUtil.get(locale, "model.resource.", CLASS_NAME);
    }

    @Override
    public Object updateStatus(int status, Map<String, Serializable> workflowContext)
            throws PortalException, SystemException {
        long userId = GetterUtil.getLong((String) workflowContext.get(WorkflowConstants.CONTEXT_USER_ID));
        long resourcePrimKey = GetterUtil.getLong((String) workflowContext.get(WorkflowConstants.CONTEXT_ENTRY_CLASS_PK));
        ServiceContext serviceContext = (ServiceContext) workflowContext.get("serviceContext");
        return OrganizationTypeLocalServiceUtil.updateStatus(userId, resourcePrimKey, status, serviceContext);
    }

}
公共类WorkflowHandler组织类型扩展了BaseWorkflowHandler{
公共静态最终字符串CLASS_NAME=OrganizationType.CLASS.getName();
@凌驾
公共字符串getClassName(){
返回类名称;
}
@凌驾
公共字符串getType(区域设置){
返回LanguageUtil.get(区域设置,“model.resource.”,类名);
}
@凌驾
公共对象更新状态(int状态,映射工作流上下文)
抛出PortalException、SystemException{
long userId=GetterUtil.getLong((字符串)workflowContext.get(WorkflowConstants.CONTEXT_USER_ID));
long resourcePrimKey=GetterUtil.getLong((字符串)workflowContext.get(WorkflowConstants.CONTEXT_ENTRY_CLASS_PK));
ServiceContext ServiceContext=(ServiceContext)workflowContext.get(“ServiceContext”);
返回OrganizationTypeLocalServiceUtil.updateStatus(用户ID、resourcePrimKey、状态、serviceContext);
}
}
最后,这里是liferay portlet部署描述符的一部分

<portlet>
        <portlet-name>SearchEngineManager</portlet-name>
        <icon>/icon.png</icon>
        <asset-renderer-factory>sem.RendererFactoryOrganizationTypeAsset</asset-renderer-factory>
        <workflow-handler>sem.WorkflowHandlerOrganizationType</workflow-handler>
        <header-portlet-css>/css/main.css</header-portlet-css>
        <footer-portlet-javascript>
            /js/main.js
        </footer-portlet-javascript>
        <css-class-wrapper>
            searchenginemanager-portlet
        </css-class-wrapper>
    </portlet>

搜索引擎管理员
/icon.png
sem.renderFactoryOrganizationTypeAsset
sem.WorkflowHandlerOrganizationType
/css/main.css
/js/main.js
searchenginemanager portlet

请帮我找出遗漏了什么。我正在使用liferay 6.1 GA3中的MVCPorltet和Kaleo工作流

您没有添加任何错误日志,因此很难找到错误。你为什么不试试这两个链接呢

您也可以在这里找到一个示例项目

您希望使用工作流处理组织实体。但是您已经在
cm.egov.cameron.sem.service.service.impl.OrganizationTypeLocalServiceImpl.addOrganizationType(长、字符串、ServiceContext
)中实现了工作流级别的服务

代替


cm.egov.喀麦隆.sem.service.service.impl.OrganizationLocalServiceImpl.addOrganization(String,String,long,ServiceContext)。

您好,感谢演示LiferayWorkFlowPortlet,它与我的kaleo工作流一起工作。在自定义portlet中执行相同的操作,但工作流任务中没有显示任何内容。提交的数据将立即显示到de view.jsp。jsp视图提供从输入到输入的organizationTypeName,并显示插入的所有organizationTypeName的列表。在jsp视图上显示之前,我提交的数据应该由工作流验证:这不是de case。eclipse控制台中没有任何问题。请帮助我调试项目一切正常问题出在addOrganizationType方法中
public class WorkflowHandlerOrganizationType extends BaseWorkflowHandler{

    public static final String CLASS_NAME = OrganizationType.class.getName();

    @Override
    public String getClassName() {
        return CLASS_NAME;
    }

    @Override
    public String getType(Locale locale) {
        return LanguageUtil.get(locale, "model.resource.", CLASS_NAME);
    }

    @Override
    public Object updateStatus(int status, Map<String, Serializable> workflowContext)
            throws PortalException, SystemException {
        long userId = GetterUtil.getLong((String) workflowContext.get(WorkflowConstants.CONTEXT_USER_ID));
        long resourcePrimKey = GetterUtil.getLong((String) workflowContext.get(WorkflowConstants.CONTEXT_ENTRY_CLASS_PK));
        ServiceContext serviceContext = (ServiceContext) workflowContext.get("serviceContext");
        return OrganizationTypeLocalServiceUtil.updateStatus(userId, resourcePrimKey, status, serviceContext);
    }

}
<portlet>
        <portlet-name>SearchEngineManager</portlet-name>
        <icon>/icon.png</icon>
        <asset-renderer-factory>sem.RendererFactoryOrganizationTypeAsset</asset-renderer-factory>
        <workflow-handler>sem.WorkflowHandlerOrganizationType</workflow-handler>
        <header-portlet-css>/css/main.css</header-portlet-css>
        <footer-portlet-javascript>
            /js/main.js
        </footer-portlet-javascript>
        <css-class-wrapper>
            searchenginemanager-portlet
        </css-class-wrapper>
    </portlet>