我只是遗漏了一些明显的东西,还是没有合理或半可行的方法来为 Liferay 留言板中的消息添加过期日期?
第一个问题是如何在消息编辑器中输入过期日期。最明显的解决方案可能是 expando 属性,但似乎没有日期的 expando 数据类型(只有日期和时间),我找不到在 expando 属性中设置计算默认值的方法(例如今天 + 6 个月)。即使没有默认值,日期+时间属性默认为 1970 年 1 月 1 日,格林威治标准时间 0:00,并且使用日期选择器输入真正的到期日期是相当乏味的。输入过期日期后,没有明显的方法来验证它(例如,将其限制为今天和今天 + 6 个月之间的日期),当日期显示在消息视图中时,当前区域设置不用于格式化日期和时间。
即使我以某种方式设法将到期日期压缩到扩展属性中,也没有明显的方法来评估到期日期。
消息仍然保留,但不计算在内并显示在 MB portlet 中是可以接受的。MBThreadServiceUtil 中用于访问消息的方法没有提供任何额外的过滤条件,因此我要么必须加载所有消息并在 Java 代码中执行计数/过滤操作(这不是一个非常聪明的解决方案),要么我必须重写整个服务堆栈“自下而上”并添加 get 或 search 方法,这些方法能够将过滤转发到数据库。
首选的解决方案是有一个计划任务,它会定期完全删除过期的消息。由于 MB portlet 支持范围(消息与 portlet 的范围相关)并且计划任务不在 portlet 上下文中运行,因此我必须以某种方式访问范围 ID。如果我了解有关此主题的文档和可用讨论,则默认范围应该是页面所属的社区。另一方面,我们的“留言板页面”是在组织级别添加的,消息的范围 ID 与组织 ID 不匹配,也不匹配组织中社区的任何 ID。任何人都知道如何在这种情况下确定范围 ID?