为什么集成总线执行上的CreateObject事件3倍,为什么网站名称在Kentico传出同步过程中为空?

问题描述 投票:0回答:1

我已经安装了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;
    }
}

下面是参数值的转储当我调试在创建对象时,我得到:enter image description here

我有2个问题。

  • 为什么参数站点名称为空?
  • 为什么它的执行先后3次在每个创建对象的事件吗?

我检查了这个帖子:Kentico 12 DancingGoat MVC SiteName is empty or null

在该网站的域别名添加“localhost”的没有工作。

谢谢你的前进!

sap kentico
1个回答
1
投票

随着新奥的评论我明白了我的问题,从这个指令来“UserInfoProvider.SetUserInfo(用户);”我订阅了任何新的用户对象的逻辑再次应用逻辑和更新,这就是为什么我被执行的不止一次。

为了解决这个问题,我申请米哈尔的命题

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);
}

谢谢 !

© www.soinside.com 2019 - 2024. All rights reserved.