Отключен раскрывающийся список “Отфильтрованный параметр” в пользовательской веб-части с подключениями
-
16-10-2019 - |
Вопрос
Я пишу веб-часть, которая должна использовать соединения для обработки значений, относящихся к бизнес-объекту, называемому "Программный объект".Предполагается, что он принимает идентификатор, предоставленный подключенной веб-частью, выполняет некоторую обработку, затем выдает "токен" для использования другой подключенной веб-частью.Токен - это просто идентификатор в другом формате.
У меня выпадающее меню корректно отображается следующим образом:
Connections -> Send Program Entity Token To -> ... -> Get Program Entity ID From -> ...
Когда я выбираю веб-часть в разделе "Получить идентификатор объекта программы из", появляется диалоговое окно для выбора отфильтрованного параметра.Однако выпадающий список параметров выделен серым цветом и просто говорит "Нет параметров".Примечание:веб-часть, к которой я пытаюсь подключиться, также является пользовательской и, возможно, не была полностью завершена и протестирована на предмет предоставления значения через соединение.
Есть ли что-нибудь, что объясняет, почему я не могу установить соединение?Вот код для моей веб-части:
public class ProgramEntityTokenConverter : WebPart, ITransformableFilterValues
{
public bool AllowAllValue
{
get { return true; }
}
public bool AllowEmptyValue
{
get { return false; }
}
public bool AllowMultipleValues
{
get { return false; }
}
public string ParameterName
{
get { return "ProgramEntityToken"; }
}
public ReadOnlyCollection<string> ParameterValues
{
get { return new ReadOnlyCollection<string>(ConvertProgramEntityIDs()); }
}
[ConnectionProvider("Program Entity Token", "ProgramEntityToken", AllowsMultipleConnections = false)]
public ITransformableFilterValues SetConnectionInterface()
{
return this;
}
private IList<string> ConvertProgramEntityIDs()
{
return null; // TODO
}
[ConnectionConsumer("Program Entity ID", "ProgramEntityID", AllowsMultipleConnections = false)]
public void SetFilter(IFilterValues filterValues)
{
if (filterValues != null)
{
EnsureChildControls();
List<ConsumerParameter> parameters = new List<ConsumerParameter>();
parameters.Add(new ConsumerParameter("ProgramEntityID", ConsumerParameterCapabilities.SupportsSingleValue));
filterValues.SetConsumerParameters(new ReadOnlyCollection<ConsumerParameter>(parameters));
}
}
}
Решение
Теперь исправлено путем изменения этой строки:
parameters.Add(new ConsumerParameter("ProgramEntityID",
ConsumerParameterCapabilities.SupportsSingleValue));
к этой строке:
parameters.Add(new ConsumerParameter("ProgramEntityID",
ConsumerParameterCapabilities.SupportsSingleValue |
ConsumerParameterCapabilities.SupportsAllValue));
Веб-часть, к которой я пытался подключиться, имела AllowAllValue
свойству присвоено значение true, которое было явно исключено ConsumerParameterCapabilities
.
Кроме того, я тоже пытался:
parameters.Add(new ConsumerParameter("ProgramEntityID",
ConsumerParameterCapabilities.SupportsMultipleValues |
ConsumerParameterCapabilities.SupportsAllValue));
...однако веб-часть, к которой я подключаюсь, имеет AllowMultipleValues
установите значение false!Кажется странным, что ConsumerParameterCapabilities
обеспечивает выполнение возможных подключений в соответствии с AllowAllValue
но AllowMultipleValues
не делает этого.