为什么集成总线在CreateObject事件上执行3次,为什么在Kentico中的传出同步期间站点名称为null?

时间:2019-02-08 10:04:30

标签: sap kentico

我已经安装了Kentico v12的新版本,并且使用的是基本的山羊模板。

我希望能够使用SAP Web服务在前端应用程序中同步用户的创建和这些用户的个人信息的更新。

我在用户对象“ SAPID”中添加了一个新的自定义字段,并创建了一个连接器来管理与SAP Web服务的同步。

这是我的poc代码:

public class CMSIntegrationConnector : BaseIntegrationConnector
{
    /// <summary>
    /// Initializes the connector name.
    /// </summary>
    public override void Init()
    {
        // Initializes the connector name (must match the code name of the connector object in the system)
        // GetType().Name uses the name of the class as the ConnectorName
        ConnectorName = GetType().Name;
         SubscribeToObjects(TaskProcessTypeEnum.AsyncSimple, PredefinedObjectType.USER);
    }
    public override IntegrationProcessResultEnum ProcessInternalTaskAsync(GeneralizedInfo infoObj, TranslationHelper translations, TaskTypeEnum taskType, TaskDataTypeEnum dataType, string siteName, out string errorMessage)
    {
        try
        {
            if (siteName == "DancingGoat")
            {
                if (infoObj.TypeInfo.ObjectType == PredefinedObjectType.USER.ToString())
                {
                    if (taskType == TaskTypeEnum.CreateObject)
                    {
                        EventLogProvider.LogInformation("Connector", "CreateUser", "User created on SAP !!!!!");
                        UserInfo user = infoObj.MainObject as UserInfo;
                        // Call SAP webservice
                        user.SetValue("SAPID", Guid.NewGuid());
                        UserInfoProvider.SetUserInfo(user);
                    }
                    else if (taskType == TaskTypeEnum.UpdateObject)
                    {
                        EventLogProvider.LogInformation("Connector", "CreateUser", "User updated on SAP !!!!!");
                        // Call SAP webservice
                    }
                }
            }
        }
        catch (Exception ex)
        {
            EventLogProvider.LogException("Connector", "CreateUser", ex);
            errorMessage = ex.Message;
            return IntegrationProcessResultEnum.Error;
        }
        errorMessage = null;
        return IntegrationProcessResultEnum.OK;
    }
}

这是我在createobject事件上调试时得到的参数值的转储: enter image description here

我有2个问题。

  • 为什么参数站点名称为空?
  • 为什么在每个CreateObject事件上连续执行3次?

我已经查看了该帖子:Kentico 12 DancingGoat MVC SiteName is empty or null

在站点的域别名中添加“ localhost”无效。

先谢谢您!

1 个答案:

答案 0 :(得分:1)

使用Enn的注释,我了解到我的问题来自此指令“ UserInfoProvider.SetUserInfo(user);”。 我订阅了对任何新的User对象应用逻辑并在逻辑中再次对其进行更新的原因,这就是为什么我多次执行了该逻辑的原因。

为了解决这个问题,我采用了Michal的命题

using (CMSActionContext context = new CMSActionContext())
{
    context.LogWebFarmTasks = false;
    context.LogEvents = false;
    context.LogExport = false;
    context.LogIntegration = false;
    context.LogSynchronization = false;

    UserInfo user = infoObj.MainObject as UserInfo;
    user.SetValue("SAPID", Guid.NewGuid());
    UserInfoProvider.SetUserInfo(user);
}

谢谢!