我正在将Kentico MVC v12与全新安装的DancingGoat(MVC)模板一起使用。
我的解决方案中有2个项目:
我的连接器是C#类,放置在CMSApp项目的文件夹中。
我的连接器的目标是每次创建用户时都要注册以执行自定义逻辑。
这是我的C#连接器代码:
public class CmsUserIntegrationConnector : 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 = nameof(CmsUserIntegrationConnector);
SubscribeToObjects(
TaskProcessTypeEnum.AsyncSimple,
PredefinedObjectType.USER,
TaskTypeEnum.CreateObject);
}
public override IntegrationProcessResultEnum ProcessInternalTaskAsync(GeneralizedInfo infoObj, TranslationHelper translations, TaskTypeEnum taskType, TaskDataTypeEnum dataType, string siteName, out string errorMessage)
{
try
{
if (infoObj.TypeInfo.ObjectType == PredefinedObjectType.USER.ToString())
{
if (taskType == TaskTypeEnum.CreateObject)
{
EventLogProvider.LogInformation(
nameof(CmsUserIntegrationConnector),
nameof(ProcessInternalTaskAsync),
"User created on SAP !!!!!");
UserInfo user = infoObj.MainObject as UserInfo;
// Consume SAP webservice and provider user info
// Save SAPId received from webservice in user custom field
using (CMSActionContext context = new CMSActionContext())
{
context.LogWebFarmTasks = false;
context.LogEvents = false;
context.LogExport = false;
context.LogIntegration = false;
context.LogSynchronization = false;
// code that creates/saves the object goes here
user.SetValue("SAPID", Guid.NewGuid()); // (new Random()).Next(0, 100)
UserInfoProvider.SetUserInfo(user);
}
}
}
}
catch (Exception ex)
{
EventLogProvider.LogException(
nameof(CmsUserIntegrationConnector),
nameof(ProcessInternalTaskAsync),
ex);
errorMessage = ex.Message;
return IntegrationProcessResultEnum.Error;
}
errorMessage = null;
return IntegrationProcessResultEnum.OK;
}
}
现在会发生什么:
我应该创建一个库项目,将C#连接器类放入其中,并将其添加为两个网站中的引用,也许还可以在配置中做更多的事情?
我做错什么了吗?
先谢谢您!
更新:
我测试了DraženJanjiček提出的使用“ IntegrationHelper.ProcessExternalTask”的解决方案,但是没有用(更多信息,请点击https://docs.kentico.com/k12/integrating-3rd-party-systems/using-the-integration-bus/creating-integration-connectors/implementing-incoming-synchronization)
答案 0 :(得分:1)
您在使用单独的库并将其引用到MVC站点和管理的正确轨道上。您正在使用两个应用程序,现在,通过CmsUserIntegrationConnector Init()事件将代码仅注册到其中之一。使用自定义库,这两个应用程序都将能够加载程序集并初始化连接器,因为程序集是通过AssemblyDiscoverable属性按引用加载的。