如何停止“发送订单通知”&在kentico的代码端,在结帐过程中发送“付款通知”

时间:2016-12-08 13:08:59

标签: kentico

我知道kentico管理员设置中有选项可以停止发送通知电子邮件。但我想在我的自定义代码中检查这一点。那么请你建议我在哪里可以得到kentico的代码。

postgres vs mongodb

3 个答案:

答案 0 :(得分:1)

请参阅官方documentation

您需要使用SettingsKeyInfoProvider

SettingsKeyInfoProvider.SetValue("CMSSettingName", "SiteName", value);

如果要全局设置,请忽略站点名称参数。

您要查找的设置名称为CMSStoreSendOrderNotificationCMSStoreSendPaymentNotification

您可以通过查询数据库找到更多设置:

SELECT * FROM [CMS_SettingsKey] where keyname like '%cmsstoresend%'

答案 1 :(得分:1)

如果您希望在发送通知时拦截某个操作,可以使用EmailInfo对象的全局事件,如下所示:

[assembly: RegisterModule(typeof(GlobalEventsModule))]
public class GlobalEventsModule : Module
{
    public GlobalEventsModule() : base (typeof(GlobalEventsModule).Name)
    {
    }

    protected override void OnInit()
    {
        base.OnInit();

        EmailInfo.TYPEINFO.Events.Insert.Before += Insert_Before;
    }

    private void Insert_Before(object sender, ObjectEventArgs e)
    {
         // executed before an e-mail is inserted into DB
         var email = (EmailInfo)e.Object;
    }
}

要取消代码中的执行,您可以调用Cancel()方法(尽管在这种情况下您可能会遇到异常 - 您必须在自己的方案中自行测试):

private void Insert_Before(object sender, ObjectEventArgs e)
{
    var email = (EmailInfo)e.Object;

    e.Cancel();
}

仅当您使用电子邮件队列(无论如何强烈推荐)并且将针对所有传出电子邮件执行此操作时,此功能也将有效,而不仅仅是通知。

答案 2 :(得分:1)

使用CMS.Ecommerce库,您可以通过API检查这些设置

SiteInfoIdentifier sii = new SiteInfoIdentifier(SiteContext.CurrentSiteID); bool sendOrderNotificationEmail = CMS.Ecommerce.ECommerceSettings.SendOrderNotification(sii);

如果要以编程方式设置它们,则必须使用SettingsKeyInfoProvider     SettingsKeyInfoProvider.SetValue("CMSStoreSendOrderNotification ", false);