Я начинаю работу над некоторыми из своих первых форм InfoPath. У меня есть три раскрывающихся списка (Global Function
, Major Task
и Subtask
), которые должны запрашивать базу данных SQL и фильтровать свои данные на основе выбранного значения в раскрывающемся списке перед ним.
Что я уже сделал
Я уже добавил подключения к данным (для каждой из таблиц и соответствующего раскрывающегося списка), которые просто запрашивают базу данных для всех записей в таблице. Для каждого соединения установлено значение «Хранить копию данных в шаблоне формы» для автономного режима.
Затем в Свойствах раскрывающегося списка я установил для параметра Варианты списка значение «Получить варианты из внешнего источника данных» и настроил Записи< /strong>, чтобы выбрать столбцы для соответствующей комбинации таблицы и раскрывающегося списка.
Однако, когда я добавляю фильтр к данным и пытаюсь просмотреть форму, данные в «каскадном» раскрывающемся списке никогда не меняются. В нем все еще есть ВСЕ записи.
Затем я попытался добавить новое правило для одного из каскадных раскрывающихся списков. Например, я создал новое правило для раскрывающегося списка
Major Task
и настроил его следующим образом:- Condition to
Global Function is not blank
- Тип правила
Action
- Выполните следующие действия:
- Запрос с использованием подключения к данным: Основные задачи (который просто получает ВСЕ записи)
Я не вижу нигде в правиле/действии для фильтрации данных.
- Condition to
EDIT Я только что попробовал новую связь данных, в которой есть все три таблицы (
GlobalFunctions
,MajorTasks
иSubtasks
), которые правильно настраивают отношения (т. е. GlobalFunctions.Id = MajorTasks.GlobalFunction). Затем я устанавливаю источник данных раскрывающихся списков на это новое соединение. Однако это тоже не фильтрует данные вообще. Их записи и значения следующие:- Global Function:
- Entries:
/dfs:myFields/dfs:dataFields/d_1:GlobalFunctions
- Фильтр:
<None>
- Значение:
@Id
- Отображаемое имя:
@Summary
- Entries:
- Major task:
- Entries:
/dfs:myFields/dfs:dataFields/d_1:GlobalFunctions/d_1:MajorTasks
- Фильтр:
GlobalFunction = Id
- Значение:
@Id
- Отображаемое имя:
@Summary
- Entries:
- Subtask:
- Entries:
/dfs:myFields/dfs:dataFields/d_1:GlobalFunctions/d_1:MajorTasks/d_1:SubTasks
- Фильтр:
MajorTask = Id
- Значение:
@Id
- Отображаемое имя:
@Summary
- Entries:
- Global Function:
Ограничения
- У меня не может быть никакого кода (потому что он не будет работать в браузере, верно?)
- Форма должна быть заполнена в Интернете или на локальном компьютере (сохраненная копия на рабочей станции).
- Должен по-прежнему работать, когда нет подключения к базе данных SQL.
Вопрос
Как реализовать несколько каскадных раскрывающихся списков в InfoPath 2010 с подключениями данных к базе данных MS SQL, которые могут работать в браузере и с помощью InfoPath Filler (последний из которых может не иметь подключения к базе данных).
Таблицы SQL
Вот как выглядят таблицы:
CREATE TABLE GlobalFunctions (
Id SMALLINT NOT NULL IDENTITY(1,1),
Summary varchar(MAX) NOT NULL UNIQUE,
PRIMARY KEY (Id)
);
CREATE TABLE MajorTasks (
Id SMALLINT NOT NULL IDENTITY(1,1),
Summary varchar(MAX) NOT NULL UNIQUE,
GlobalFunction SMALLINT NOT NULL,
PRIMARY KEY (Id),
FOREIGN KEY (GlobalFunction) REFERENCES GlobalFunctions(Id)
);
CREATE TABLE SubTasks (
Id SMALLINT NOT NULL IDENTITY(1,1),
Summary varchar(MAX) NOT NULL UNIQUE,
MajorTask SMALLINT NOT NULL,
PRIMARY KEY (Id),
FOREIGN KEY (MajorTask) REFERENCES SubTasks(Id)
);