Как добавить раскрывающийся список полей выбора в раздел настроек соединителей конструктора форм в sitefinity с помощью C#

Место общения программистов C#
Ответить
Anonymous
 Как добавить раскрывающийся список полей выбора в раздел настроек соединителей конструктора форм в sitefinity с помощью

Сообщение Anonymous »

Я пытаюсь добавить раскрывающийся список в раздел «Настройки соединителей» в конструкторе форм с помощью FormsConnectorDefinitionsExtender.
Мое поле добавляется, но отображается только первый вариант, который отображается как флажок. Я вижу это в серверной части и вижу варианты выбора.
Если я изменю другое встроенное поле, например ограничения, изменив его с переключателя на раскрывающийся список, это будет отображаться правильно, но мое поле — нет.
Я использую .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
Ответить

Быстрый ответ

Изменение регистра текста: 
Смайлики
:) :( :oops: :roll: :wink: :muza: :clever: :sorry: :angel: :read: *x)
Ещё смайлики…
   
К этому ответу прикреплено по крайней мере одно вложение.

Если вы не хотите добавлять вложения, оставьте поля пустыми.

Максимально разрешённый размер вложения: 15 МБ.

Вернуться в «C#»