如何将Kentico 12 XP与PIM系统集成

问题描述

需要将Kentico 12 XP与外部PIM系统集成在一起。 我希望能够在计划的作业中处理PIM收到的信息,以便在Kentico中创建或更新元素。 我尝试使用本机Integration Bus并在Kentico中创建自定义计划任务来实现POC。根据我对文档的了解,可以通过扩展BaseIntegrationConnector基类并覆盖PrepareInternalObject方法来进入总线集成管道:

public override ICMSObject PrepareInternalObject(object obj,TaskTypeEnum taskType,TaskDataTypeEnum dataType,string siteName)
{
    var pimObj = (dynamic)obj;
    var node = new Product
    {
        DocumentName = pimObj.Name,DocumentCulture = "en-us",Name = pimObj.Name,Family = pimObj.Family,NodeParentID = 2
    };
            
    return node;
}

首先,我实现了一个连接器并覆盖了上述方法,以便在通过其API从PIM读取数据后,它可以创建一个新的Product实例。

最后一步,我创建了一个自定义任务,如下所示:

public class CustomSyncTask : CMS.Scheduler.ITask
{
    public string Execute(TaskInfo task)
    {

       ...

       try
       {
           IntegrationHelper.ProcessExternalTask("CustomIntegrationConnector",pimObject,IntegrationProcesstypeEnum.SkipOnError,TaskTypeEnum.CreateDocument,TaskDataTypeEnum.Simple,SiteContext.CurrentSite.SiteName);
                
       }
       catch (Exception ex) {
           return ex.Message;
       }

       return null;
    }
}

我没想到会有任何特定的错误,因为实现非常简单,但是不幸的是,运行任务时我总是会遇到相同的错误

Message: Object reference not set to an instance of an object.

Exception type: System.NullReferenceException
Stack trace:
at CMS.DataEngine.TranslationHelper.RegisterRecord(BaseInfo infoObject)
at CMS.DocumentEngine.DocumentSynchronizationHelper.GetDocumentDataSet(TreeNode node,TranslationHelper th,TaskParameters taskParams,String siteName)
at CMS.DocumentEngine.DocumentSynchronizationHelper.GetDocumentXML(TreeNode node,TreeProvider tree,String siteName)
at CMS.DocumentEngine.DocumentSynchronizationHelper.LogExternalIntegration(TreeNode node,IntegrationProcesstypeEnum result,String connectorName,String siteName)

我对Kentico源代码进行了深入研究,发现在尝试调用RegisterRecord时,将Site属性(null)作为参数传递。在Kentico中创建“产品”项时,将设置“站点属性。因此存在矛盾:如果意图创建对象,那么该对象应该如何被创建?难道我做错了什么?我是否误解了整个过程?

解决方法

暂无找到可以解决该程序问题的有效方法,小编努力寻找整理中!

如果你已经找到好的解决方法,欢迎将解决方案带上本链接一起发送给小编。

小编邮箱:dio#foxmail.com (将#修改为@)