我正在尝试覆盖Liferay Form发送的电子邮件通知。我遵循了本主题中的技巧:https://community.liferay.com/it/forums/-/message_boards/view_message/104934134。 没有骰子。我已经成功添加了DDLFormEmailNotificationSender的自定义实现。已正确注册(具有正确的服务)。如果我签出注册的服务,则我的自定义DDLFormEmailNotificationSender会排在最前面。但是,当我提交表单时,liferay会继续使用“正常的” DDLFormEmailNotificationSender,而不是我的自定义DDLFormEmailNotificationSender。有技巧吗?
我的DDLFormEmailNotificationSender看起来像这样:
@Component(
immediate = true,
property = {
"service.ranking:Integer=100"
},
service = DDLFormEmailNotificationSender.class
)
public class CustomDDLFormEmailNotificationSender extends DDLFormEmailNotificationSender {
private static final String CUSTOM_TEMPLATE_PATH = "";
@Override
protected Template createTemplate(
PortletRequest portletRequest, DDLRecordSet recordSet,
DDLRecord record) throws PortalException {
Template template = TemplateManagerUtil.getTemplate(TemplateConstants.LANG_TYPE_SOY,
getTemplateResource(CUSTOM_TEMPLATE_PATH), false);
populateParameters(template, portletRequest, recordSet, record);
return template;
}
}
(我知道CUSTOM_TEMPLATE_PATH现在为空。但这仅用于测试目的。
我已经创建了一个片段来公开私有包,如论坛文章中所述:
Bundle-Name: liferay-xxx-dynamic-data-lists-form-override
Bundle-SymbolicName: liferay.xxx.dynamic.data.lists.form.override
Fragment-Host: com.liferay.dynamic.data.lists.form.web;bundle-version="2.0.15"
Export-Package: com.liferay.dynamic.data.lists.form.web.internal.notification
-jsp: *.jsp,*.jspf
-plugin.jsp: com.liferay.ant.bnd.jsp.JspAnalyzerPlugin
-plugin.resourcebundle: com.liferay.ant.bnd.resource.bundle.ResourceBundleLoaderAnalyzerPlugin
-plugin.sass: com.liferay.ant.bnd.sass.SassAnalyzerPlugin
-sass: *
所以您可以看到我公开了“ com.liferay.dynamic.data.lists.form.web.internal.notification”包。
如果我在Apache GOGO中检查DDLFormEmailNotificationSender:
services | grep DDLFormEmailNotificationSender
{com.liferay.dynamic.data.lists.form.web.internal.notification.DDLFormEmailNotificationSender}={service.ranking=100, component.name=be.xxx.portal.website.form.CustomDDLFormEmailNotificationSender, component.id=519, service.id=299, service.bundleid=757, service.scope=bundle}
{com.liferay.dynamic.data.lists.form.web.internal.notification.DDLFormEmailNotificationSender}={component.name=com.liferay.dynamic.data.lists.form.web.internal.notification.DDLFormEmailNotificationSender, component.id=811, service.id=2629, service.bundleid=143, service.scope=bundle}
true
我正在使用Liferay 7.0。
答案 0 :(得分:0)
我从Liferay社区获得了一些支持,并找到了解决方法。
以上配置正确!但是,引用DDLFormEmailNotification的(liferay)服务具有静态/不希望引用。我必须创建一个配置文件放入osgi / configs文件夹中,该文件夹定义了正确的实现。 (我的CustomDDLFormEmailNotificationSender)。
我的配置文件名为:com.liferay.dynamic.data.lists.form.web.internal.portlet.action.AddRecordMVCActionCommand.config
这是因为我需要配置AddRecordMVCAction命令。 (将在其中定义的引用配置为静态/不推荐)。
它包含:
DDLFormEmailNotificationSender.target="(component.name\=be.xxx.portal.website.form.CustomDDLFormEmailNotificationSender)"
因此基本上说:DDLFormEmailNotificationSender(是那里的参考名称)应该是:be.xxx.portal.website.form.CustomDDLFormEmailNotificationSender。
确保正确部署组件,因为一旦配置,就不会退回到原始实现。 (如果删除该配置,则osgi将回退)。
希望这对某人有帮助。