如何在编程方式将文件添加到liferay中的文档和媒体文件夹时向订阅者发送电子邮件通知

时间:2018-06-11 17:13:36

标签: liferay-7

我有多个具有管理员角色的用户订阅了一个存储某种图像和文档的公共文件夹。当一个用户在文件夹中添加一些图像时,通知电子邮件将发送给具有查看权限的订阅用户。 当我通过门户上传图像时,我的问题从这里开始,电子邮件通知已成功发送。但是,当我尝试使用以下代码保存图像时,不会发送电子邮件通知。

**

_dlAppLocalService.addFileEntry(userId, companyGroup.getGroupId(), folder.getFolderId(), fileName,
ContentTypes.TEXT_CSV_UTF8, fileContent.getBytes(), serviceContext);

**

有关进一步说明: - 此特定代码在Schedular中触发,因此我按如下方式创建ServiceContext: -

long companyId = _portal.getDefaultCompanyId();

Company company = _companyLocalService.getCompany(companyId);
Group companyGroup = _groupLocalService.getCompanyGroup(companyId);
User defaultUser = company.getDefaultUser();

long userId = defaultUser.getUserId();
ServiceContext serviceContext = new ServiceContext();
serviceContext.setCompanyId(companyId);
serviceContext.setUserId(userId);

然后在上面的方法中传递服务上下文。 我发现request和themeDisplay在 com.liferay.portlet.documentlibrary.util.DLImpl.startWorkflowInstance(long,DLFileVersion,String,ServiceContext)中显示为null,这将导致blankEntryURL和 com。 liferay.portlet.documentlibrary.service.impl.DLAppHelperLocalServiceImpl.notifySubscribers(long,FileVersion,String,ServiceContext )方法无法执行。

有人可以帮忙吗?如何在没有themeDisplay对象和请求的情况下获取文件entryURL?

1 个答案:

答案 0 :(得分:0)

您可以避免在调用entryURL之前在空白的addFileEntry()下方添加以下行:

serviceContext.setAttribute("entryURL", "anyNotEmptyURL");

但是,方法notifySubscribers()运行到最后还不够。您需要添加另一行代码:

serviceContext.setCommand(Constants.ADD);

除非正确的命令值,否则通知将被中止。