我在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;
}
}
提前致谢!
答案 0 :(得分:1)
我不知道到底出了什么问题,但我可以提供一些故障排除/代码优化提示:
不要自己设置int“status”值。让Liferay做到这一点。在LocalServiceImpl add方法中,而不是book.setStatus(1);
调用book.setStatus(WorkflowConstants.STATUS_DRAFT);
,这实际上是int值'2'。
在LocalServiceImpl updateStatus
方法中,只需为非APPROVED
的所有资产设置可见性为false,因此请使用
else if
语句。
其他{
assetEntryLocalService.updateVisible(Book.class.getName(),
resourcePrimKey, false);
}
虽然步骤1或2都不可能解决您的问题。您使用Liferay附带的单一审批者定义,还是使用不同的定义?如果不同,你可以在这里粘贴定义吗?我想确保将适当的角色分配给审核任务。我还要测试另一个实体的工作流程,看看它是否正常工作。
Liferay开发人员网络(https://dev.liferay.com)是Liferay开发文档的官方网站,其中包含一个关于为工作流启用实体的学习路径,您可能希望将其用于代码比较目的。 https://dev.liferay.com/develop/learning-paths/mvc/-/knowledge_base/6-2/approving-content-with-workflow