我们已经升级了一个使用AutomaticContactMerger class的Kentico 8.2网站,直到Kentico 10不再包含该类。 API更改了Kentico 10中的参考指南notes the class as being removed,但没有提出使用其合并功能的替代方法或解决方法。
我们正在寻找一种方法来移植我们的Contact Management自定义合并逻辑,并在Kentico运行其默认合并逻辑时将其集成到Kentico 10中,就像我们在Kentico 8中所做的那样,如本文(如下)所示。 / p>
在入侵Kentico 10 API之前 - 无论看起来如何 - 我都在寻找建议或解决方法,以便最好地使用Kentico 10 API来实现相同的结果:注册自定义合并将参加Kentico 10默认合并流程。
具体来说,我们的项目会覆盖Kentico 8 AutomaticContactMerger
类,并提供自定义逻辑,如以下C#.NET Kentico 8代码段所示。 (此代码已经过简化和清理,以传达基本方案。)
要理解此代码:
EXTERNAL_REFERENCE_VALUE
的自定义字段(字符串字段),它最终的值是从外部系统填充但不是立即(可能是空的),因此我们将一些逻辑键入此字段值的存在(是否为空)当然还包含它包含的值,以便自定义我们选择覆盖默认合并逻辑的联系人。 /* 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注册我们自己的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
答案 0 :(得分:0)
Kentico第10版中的联系人发生了重大变化。我会在这里参考发行说明:https://docs.kentico.com/k10/release-notes-kentico-10#Releasenotes-Kentico10-Contactmanagement
查看以
开头的段落默认情况下,系统仅自动合并联系人,...
就建议而言,我会尝试一个没有自定义的测试网站,以了解联系人和活动的工作方式,新的开箱即用设置可能对您有用。
或者,如果您共享合并逻辑,我们可能会提供更多帮助。