Мое поле добавляется, но отображается только первый вариант, который отображается как флажок. Я вижу это в серверной части и вижу варианты выбора.
Если я изменю другое встроенное поле, например ограничения, изменив его с переключателя на раскрывающийся список, это будет отображаться правильно, но мое поле — нет.
Я использую .NET 4.8 — sf v15.3
Полный код приведен ниже, и я запускаю его в совершенно новой настройке проекта, никаких других модификаций или настроек не существует. кроме динамического модуля. Обратите внимание, что на представленном снимке экрана отсутствуют варианты выбора, поскольку я пробовал разные варианты.
Код: Выделить всё
public class Global : System.Web.HttpApplication
{
protected void Application_Start(object sender, EventArgs e)
{
Bootstrapper.Bootstrapped += Bootstrapper_Bootstrapped;
}
private void Bootstrapper_Bootstrapped(object sender, EventArgs e)
{
ObjectFactory.Container.RegisterType("CrmWorkflowConnectorExtender");
ObjectFactory.Container.RegisterType(typeof(CrmWorkflowConnectorExtenderConnectionStatus).FullName, new ContainerControlledLifetimeManager());
}
}
public class CrmWorkflowConnectorExtender : FormsConnectorDefinitionsExtender
{
public override int Ordinal
{
get { return 1; }
}
public override string ConnectorName => "CrmConnectorModule";
public override string ConnectorTitle => "CRM Connector";
public override string SectionTitle => "Send data to dynamics CRM";
public override void AddConnectorSettings(ConfigElementDictionary sectionFields)
{
var CRMWorkflowField = new ChoiceFieldElement(sectionFields)
{
Title = "Select CRM Workflow",
FieldName = "CRMWorkflowSelection",
DataFieldName = "CRMWorkflowSelection",
DisplayMode = FieldDisplayMode.Write,
FieldType = typeof(Telerik.Sitefinity.Web.UI.Fields.ChoiceField),
RenderChoiceAs = RenderChoicesAs.DropDown,
ID = "CRMWorkflowSelectionID"
};
//foreach (var workflow in GetWorkflowDefinitions())
//{
// var choice = new ChoiceElement(CRMWorkflowField.ChoicesConfig)
// {
// Text = workflow.WorkflowName,
// Value = workflow.WorkflowName
// };
// CRMWorkflowField.ChoicesConfig.Add(choice);
//}
var mychoices = new List();
mychoices.Add(new ChoiceDefinition()
{
Text = "MVCOnly",
ResourceClassId = typeof(FormsResources).Name,
Value = "0"
});
mychoices.Add(new ChoiceDefinition()
{
Text = "WebFormsOnly",
ResourceClassId = typeof(FormsResources).Name,
Value = "1"
});
CRMWorkflowField.Choices.AddRange(mychoices);
sectionFields.Add(CRMWorkflowField.ID, CRMWorkflowField);
}
private IEnumerable GetWorkflowDefinitions()
{
var manager = DynamicModuleManager.GetManager();
var type = TypeResolutionService.ResolveType("Telerik.Sitefinity.DynamicTypes.Model.CrmWorkflows.WorkflowDefinition");
IEnumerable workflows = manager.GetDataItems(type)
.Where(w => w.Status == ContentLifecycleStatus.Live && w.Visible)
.Select(w => new WorkflowDefinitionDto
{
WorkflowName = w.GetValue("WorkflowName")
});
return workflows;
}
private class WorkflowDefinitionDto
{
public string WorkflowName { get; set; }
}
}
public class CrmWorkflowConnectorExtenderConnectionStatus : IModuleConnectionStatus
{
public string ModuleName => "CrmConnector.CrmConnectorModule";
public void ExecuteIfConfigured(Action action)
{
// Add code to check that the connector is connected
// ex. if (this.connector.IsConnected())
if (action != null)
action();
}
// IMPORTANT: This callback is not invoked as part of Forms connectors. You still need to implement it, as it is used elsewhere.
public void ExecuteIfNotConfigured(Action action)
{
// Add code to check that the connector is not configured
// ex. if (!this.connector.IsConnected())
if (action != null)
action();
}
}
Тип: System.ArgumentException, mscorlib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089
Сообщение: элемент с таким ключом уже добавлен.
Источник: mscorlib
Ссылка на справку: ParamName: Data: System.Collections.ListDictionaryInternal
TargetSite: void ThrowArgumentException(System.ExceptionResource)
HResult: -2147024809
Stack Trace:
at System.ThrowHelper.ThrowArgumentException(ExceptionResource) ресурс)
в System.Collections.Generic.Dictionary 2.Insert(ключ TKey, значение TValue, логическое добавление)
в Telerik.Sitefinity.Web.Api.Strategies.Forms.Connectors.FormConnectorService.ResolveUIField(поля списка 1, FieldDefinitionElement fieldDefinitionElement, ConnectorDataMappingExtender MappingExtender,sectionFieldWrapperпредшественникField)
at Telerik.Sitefinity.Web.Api.Strategies.Forms.Connectors.FormConnectorService.AdjustFields(List`1
fields,sectionFieldWrapper previousField)

Подробнее здесь: https://stackoverflow.com/questions/797 ... ettings-se
Мобильная версия