Infopath и каскадные раскрывающиеся списки

У меня есть вопрос к вам, светлые души. У меня есть форма Infopath для списка Sharepoint (это означает, что она считается формой списка Infopath), для которой я хотел бы иметь определенное поведение... и я не совсем уверен, как этого добиться.

Суть в том, что у меня есть два раскрывающихся списка в форме, и я хочу, чтобы второй раскрывающийся список менял свои значения на основе выбора первого раскрывающегося списка.

Оба указывают на один и тот же список. Список выглядит так:

ID, ModuleName, SystemName, PayCode, LineOfBusoness
1, Mod1, Sys1, O, LOB1 
2, Mod2, Sys2, O, LOB2
3, Mod3, Sys3, C, LOB3
4, Mod3, Sys4, O, LOB3

Первый раскрывающийся список содержит только коды выплат, то есть в основном «O» и «C».

Теперь второй выпадающий список становится сложным.

Во втором раскрывающемся списке отображаются все направления деятельности (LOB) из этого списка на основе PayCode, выбранного в предыдущем раскрывающемся списке. Если они выберут «O», просто отобразите все LOB с кодом оплаты «O».

НО... если они выберут "C"... ну, тогда в форме также есть выпадающие списки, где они уже выбрали "Система" и "Модуль"... так что тогда будут взяты те значения, которые были выбраны, и выбрано значение в списке у которого есть выбранная ими система, выбранный ими модуль и выбранный ими код оплаты.

Как я могу это сделать? Моей первой мыслью было просто использовать код... но оказалось, что Infopath не позволяет использовать пользовательский код в "форме списка", а это... wtf? Итак, следующий вариант — использовать подход «каскадного выпадающего списка», при котором вы также можете использовать правила и фильтры, чтобы попытаться добиться такого поведения.

Это можно сделать? Что вы думаете о том, как бы вы справились с этой проблемой?

Заранее спасибо, и, пожалуйста, дайте мне знать, если вам нужна дополнительная информация!


person Ryan    schedule 05.03.2013    source источник


Ответы (1)


Один из способов сделать это — в коде позади.

Возьмите первый раскрывающийся список, найдите поле, с которым оно связано, щелкните правой кнопкой мыши и создайте событие «Изменено».

В коде позади события для этого поля будет создано событие Changed. Там вы можете получить значение текущего выбранного элемента из первого раскрывающегося списка. В зависимости от этого значения вы можете изменить содержимое второго раскрывающегося списка.

Сделайте это, захватив исходный список и запустив SPQuery, который выбирает все элементы, имеющие «O» или «C» или любое другое выбранное значение. Вы также можете запустить оператор linq или foreach для всех элементов списка, в зависимости от того, что вы предпочитаете :)

Примечание. Убедитесь, что в свойствах элемента управления раскрывающимся списком выбрано значение «Всегда» на вкладке «Формы браузера» свойств (щелкните правой кнопкой мыши раскрывающийся список, чтобы получить доступ к этим свойствам).

Надеюсь это поможет!

person Meyer Denney    schedule 05.03.2013
comment
Спасибо Мейер. Это было моим первоначальным намерением, и это было бы так легко сделать! Однако это форма списка Sharepoint, а не форма библиотеки форм. Формы списков не позволяют использовать пользовательский код (код позади), что меня и расстроило. Различия между типами форм см. в следующем: blogs.msdn.com/b/infopath/archive/2010/04/22/ - person Ryan; 06.03.2013