Liferay Form发送的自定义电子邮件

时间:2018-11-12 08:01:07

标签: liferay liferay-7

我正在尝试覆盖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。

1 个答案:

答案 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将回退)。

来源:https://dev.liferay.com/en/develop/tutorials/-/knowledge_base/7-0/overriding-service-references#find-the-component-and-service-reference

希望这对某人有帮助。