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

How to send email notification to subscribers when adding file programmatically to document and media folder in liferay

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

**

_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) 中为空,这导致 blankEntryURL 和 com.liferay.portlet.documentlibrary.service.impl.DLAppHelperLocalServiceImpl.notifySubscribers (long, FileVersion, String, ServiceContext) 方法执行失败。

有人能帮忙吗?。如何在没有 themeDisplay 和 request 对象的情况下获取文件 entryURL?

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

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

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

serviceContext.setCommand(Constants.ADD);

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