Почему шина интеграции выполняется 3 раза для события CreateObject и почему sitename имеет значение null во время исходящей синхронизации в Kentico? - PullRequest
0 голосов
/ 08 февраля 2019

Я установил свежую новую версию Kentico v12 и использую базовый шаблон козла.

Я хотел бы иметь возможность синхронизировать создание пользователей и обновление личной информации этих пользователей.в веб-приложении с веб-сервисом SAP.

Я добавил новое пользовательское поле в пользовательский объект «SAPID» и создал соединитель для управления синхронизацией с веб-сервисами SAP.

Здеськод моего документа:

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проблемы.

  • Почему параметр sitename имеет значение null?
  • Почему он выполняется 3 раза подряд для каждого события CreateObject?

Я проверял этот пост: Kentico 12 DancingGoat MVC SiteName пусто или равно нулю

Добавление «localhost» в псевдоним домена домена не сработало.

Заранее спасибо!

1 Ответ

0 голосов
/ 08 февраля 2019

С комментарием Энна я понял, что моя проблема возникла из этой инструкции "UserInfoProvider.SetUserInfo (user);"Я подписался, чтобы применять логику к любым новым объектам пользователя и обновлять ее снова в логике, поэтому он выполнялся более одного раза.

Чтобы решить эту проблему, я применил предложение Михала

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

Спасибо!

...