在Kentico 10

时间:2017-07-12 14:40:40

标签: kentico

我们已经升级了一个使用AutomaticContactMerger class的Kentico 8.2网站,直到Kentico 10不再包含该类。 API更改了Kentico 10中的参考指南notes the class as being removed,但没有提出使用其合并功能的替代方法或解决方法。

TL; DR摘要

我们正在寻找一种方法来移植我们的Contact Management自定义合并逻辑,并在Kentico运行其默认合并逻辑时将其集成到Kentico 10中,就像我们在Kentico 8中所做的那样,如本文(如下)所示。 / p>

在入侵Kentico 10 API之前 - 无论看起来如何 - 我都在寻找建议或解决方法,以便最好地使用Kentico 10 API来实现相同的结果:注册自定义合并将参加Kentico 10默认合并流程。

合并逻辑的自定义

具体来说,我们的项目会覆盖Kentico 8 AutomaticContactMerger类,并提供自定义逻辑,如以下C#.NET Kentico 8代码段所示。 (此代码已经过简化和清理,以传达基本方案。)

要理解此代码:

  • 我们在Kentico Contact类上有一个名为EXTERNAL_REFERENCE_VALUE的自定义字段(字符串字段),它最终的值是从外部系统填充但不是立即(可能是空的),因此我们将一些逻辑键入此字段值的存在(是否为空)当然还包含它包含的值,以便自定义我们选择覆盖默认合并逻辑的联系人。
  • 提及K8和K10的源代码评论分别表示Kentico版本8和10。
/* In Kentico 8 we derive from the CMS.OnlineMarketing.AutomaticContactMerger class 
to provide custom merge logic
based on custom contact fields and rules ... */

public class CUSTOM_ContactMerger : AutomaticContactMerger /* K10 Removed ACM class */ { 

  // ==============================================
  // In K8 OVERRIDE the default Merge with our custom logic. 

  protected override ContactInfo MergeWithinSite(ContactInfo contact, List<ContactInfo> contacts, string siteName) {

    if (!base.ContactIsMergedByColumn(FieldNames.Contact.EXTERNAL_REFERENCE_VALUE)) {

      /* Custom logic determines which contacts will be merged */
      var contacts = CUSTOM_GetAllTheContactsIWantToMergeBasedOnCustomRules(..);

      /* Find or make a master contact - more custom rules wrapped up */
      ContactInfo masterContact = CUSTOM_GetMyPreferredMasterContactOrMakeANewOne();

      /* Use Kentico's ContactHelper class to merge all our picked Contacts into the master contact.*/
      ContactHelper.Merge(masterContact, contacts, null, null); // however the .Merge methods are gone in K10 

      return masterContact; // custom selection


  // ==============================================
  // in K8 OVERRIDE the Where Condition for when merge should be ignored (for example).

  protected override string GetWhereCondition(ContactInfo contact) {
    if (CUSTOM_ShouldIgnoreMerge(contact)) {
      return string.Empty;
    }
    return base.GetWhereCondition(contact) ?? string.Empty;
  }

我们在上面的Kentico 8代码片段中使用的类和方法的简短列表提供了自定义合并行为,并且Kentico 10 API中不再存在这些类和方法:

CMS.OnlineMarketing名称空间 -

  • AutomaticContactMerger课程 - 从Kentico 10中移除,包括:
    • .MergeWithinSite(..)虚拟方法被覆盖
    • .GetWhereCondition(..)虚拟方法被覆盖
    • .ContactIsMergedByColumn(..)实例方法称为
  • ContactHelper类 - 存在于Kentico 10中但是:
    • .Merge(..)使用静态方法,Kentico 10中不再存在

使用Kentico 8

注册自定义合并逻辑

此外,我们通过以下标准方式通过提供商向Kentico 8注册我们自己的CustomContactMerger课程。 Kentico 8中也不再存在Kentico 8方法CMS.OnlineMarketing.ContactInfoProvider.AddAutomaticContactMerger(..),因此我们需要一种在Kentico 10中注册自定义合并的方法.Kentico 8将此方法描述为 /// Registers automatic contact merger that gets ran when method SetContactInfo is called.

[assembly: RegisterCustomProvider(typeof(CustomContactInfoProvider))]
public partial class CustomContactInfoProvider : ContactInfoProvider

    static CustomContactInfoProvider()
    {
        var myCustomMerger = new CustomContactMerger(..);

        // Note: we do NOT use Kentico's own email settings, because they will be picked up
        // by Kentico's private method and give email higher priority (than our own merger logic)

        var emailMerger = new CustomContactMerger("ContactEmail", CustomContactMerger.SETTING_MERGE_BY_EMAIL);

        var mergers = new List<CustomContactMerger>()  { merger, emailMerger };
        foreach (var m in mergers)
        {
            // Kentico 8 registration point. Kentico 10 does not have this method call.
            base.AddAutomaticContactMerger(m);
        }

其他参考信息

Kentico 10发行说明核心产品中与联系人管理相关的更改,因为它与CMS Desk功能相关:

  

默认情况下,系统仅自动合并联系人   导致以下变化:

     
      
  • 不再可能合并   帐户并拆分联系人管理中的合并帐户   应用。
  •   
  • 无法再手动合并联系人和   拆分联系人管理应用程序中的合并联系人。
  •   
  • 是的   无法再克隆克隆帐户中的合并帐户   对话框和克隆联系人对话框中的合并联系人。
  •   
  • 的   自动合并联系人设置类别与以下内容   设置已从“设置”中删除 - &gt;在线营销 - &gt;联系   管理 - &gt;全球数据&amp;合并:      
        
    • 合并相同的联系人   电子商务客户;合并相同电子邮件广告系列的联系人   用户;合并具有相同电子邮件地址的联系人   访客有更多的联系方式,使用。
    •   
  •   

https://docs.kentico.com/k10/release-notes-kentico-10#Releasenotes-Kentico10-Contactmanagement

1 个答案:

答案 0 :(得分:0)

Kentico第10版中的联系人发生了重大变化。我会在这里参考发行说明:https://docs.kentico.com/k10/release-notes-kentico-10#Releasenotes-Kentico10-Contactmanagement

查看以

开头的段落
  

默认情况下,系统仅自动合并联系人,...

就建议而言,我会尝试一个没有自定义的测试网站,以了解联系人和活动的工作方式,新的开箱即用设置可能对您有用。

或者,如果您共享合并逻辑,我们可能会提供更多帮助。