我的工作流liferay中的任务每次都是空的

时间:2015-07-16 22:14:55

标签: liferay workflow

我在liferay 6.2中使用kaleo工作流实现自定义portlet 当我保存数据时,我可以看到状态= 1正在等待。但后来没有任何东西出现 我的工作流程任务,待定或完成。

我有两个用户,第一个(让我们说x)是试图添加数据的管理员, 另一个(我们说y)具有内容审阅者角色,以便他可以批准工作流程。

我错过了什么: bellow是我的Workflow Handler类的代码:

public class BookWorkflowHandler extends BaseWorkflowHandler{

    public String getClassName() {
        return CLASS_NAME;
    }
    public String getType(Locale locale) {
        return LanguageUtil.get(locale, "model.resource." + CLASS_NAME);
    }
    public Object updateStatus(int status,  Map<String, Serializable> workflowContext)  throws PortalException, SystemException {
        System.out.println("statu while updating in workflow handler"+status);
        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");
        System.out.println("statu while updating in workflow handler"+status);
        return BookLocalServiceUtil.updateStatus(userId, resourcePrimKey, status, serviceContext);

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

这是我的BookLocalSeviceImpl:

public class BookLocalServiceImpl extends BookLocalServiceBaseImpl {

    @SuppressWarnings("deprecation")
    public Book addBook(Book newBook, long userId,
            ServiceContext serviceContext)
                    throws SystemException, PortalException {
        Book book =
                bookPersistence.create(
                        counterLocalService.increment(Book.class.getName()));
        book.setCompanyId(newBook.getCompanyId());
        System.out.println("********group id********"+newBook.getGroupId());
        book.setGroupId(serviceContext.getScopeGroupId());
        book.setUserId(serviceContext.getUserId());
        book.setTitle(newBook.getTitle());
        book.setAuthor(newBook.getAuthor());
        book.setStatus(1);
        bookPersistence.update(book, false);

        assetEntryLocalService.updateEntry(
                userId, book.getGroupId(), Book.class.getName(),
                book.getBookId(), serviceContext.getAssetCategoryIds(),
                serviceContext.getAssetTagNames());
        book.setStatus(WorkflowConstants.STATUS_DRAFT);
        System.out.println("status while adding "+book.getStatus());
        WorkflowHandlerRegistryUtil.startWorkflowInstance(
                book.getCompanyId(), book.getGroupId(), userId,
                Book.class.getName(), book.getPrimaryKey(), book,
                serviceContext);

        return book;
    }

    @Override
    public Book updateStatus(long userId, long resourcePrimKey, int status, ServiceContext serviceContext)throws PortalException, SystemException {
            User user = userLocalService.getUser(userId);
            Book book = getBook(resourcePrimKey);
            book.setStatusByUserId(userId);
            book.setStatusByUserName(user.getFullName());
            book.setStatusDate(serviceContext.getModifiedDate());
            bookPersistence.update(book, false);
            System.out.println("status in updateStatus localService******"+status);
    if (status == WorkflowConstants.STATUS_APPROVED) {
        System.out.println("workflow approved");
        assetEntryLocalService.updateVisible(
                Book.class.getName(), resourcePrimKey, true);
    }
    else if(status==1) {
        System.out.println("workflow pending");
        assetEntryLocalService.updateVisible(
                Book.class.getName(), resourcePrimKey, false);
    }
    return book;
}


}

提前致谢!

1 个答案:

答案 0 :(得分:1)

我不知道到底出了什么问题,但我可以提供一些故障排除/代码优化提示:

  1. 不要自己设置int“status”值。让Liferay做到这一点。在LocalServiceImpl add方法中,而不是book.setStatus(1);调用book.setStatus(WorkflowConstants.STATUS_DRAFT);,这实际上是int值'2'。

  2. 在LocalServiceImpl updateStatus方法中,只需为非APPROVED的所有资产设置可见性为false,因此请使用

    而不是else if语句。

    其他{

       assetEntryLocalService.updateVisible(Book.class.getName(),
          resourcePrimKey, false);
    }
    
  3. 虽然步骤1或2都不可能解决您的问题。您使用Liferay附带的单一审批者定义,还是使用不同的定义?如果不同,你可以在这里粘贴定义吗?我想确保将适当的角色分配给审核任务。我还要测试另一个实体的工作流程,看看它是否正常工作。

  4. Liferay开发人员网络(https://dev.liferay.com)是Liferay开发文档的官方网站,其中包含一个关于为工作流启用实体的学习路径,您可能希望将其用于代码比较目的。 https://dev.liferay.com/develop/learning-paths/mvc/-/knowledge_base/6-2/approving-content-with-workflow