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

如何在kentico的代码端停止结账过程中的“发送订单通知”和“发送付款通知”,kentico,Kentico,我知道kentico管理员设置中有停止发送通知电子邮件的选项。但是我想在我的定制代码中检查这个。那么你能告诉我在肯蒂科哪里可以得到代码吗 请向官方咨询 您需要使用SettingSkeyInfo提供程序: SettingsKeyInfoProvider.SetValueCMSSettingName、SiteName、value; 如果要全局设置site name参数,请省略该参数 您要查找的设置名称是CMSStoreSendOrderNotification和CMSStoreSendPayment

我知道kentico管理员设置中有停止发送通知电子邮件的选项。但是我想在我的定制代码中检查这个。那么你能告诉我在肯蒂科哪里可以得到代码吗


请向官方咨询

您需要使用SettingSkeyInfo提供程序:

SettingsKeyInfoProvider.SetValueCMSSettingName、SiteName、value; 如果要全局设置site name参数,请省略该参数

您要查找的设置名称是CMSStoreSendOrderNotification和CMSStoreSendPaymentNotification

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

从[CMS_SettingsKey]中选择*键,其中的键名为“%cmsstoresend%”
如果您希望在发送通知时拦截操作,则可以对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();
}

仅当您使用强烈建议的电子邮件队列,并且将对所有发出的电子邮件(而不仅仅是通知)执行此操作时,此操作才有效。

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

SiteInfoIdentifier sii=新的SiteInfoIdentifierSiteContext.CurrentSiteID; bool sendOrderNotificationEmail=CMS.Ecommerce.ecommercestettings.SendOrderNotificationsii

如果要以编程方式设置它们,则必须使用SettingSkeyInfo提供程序 SettingsKeyInfoProvider.SetValueCMSStoreSendOrderNotification,false