我开始处理我的第一个 InfoPath 表单。我有一个三个下拉列表(Global Function
、Major Task
和Subtask
),它们需要查询 SQL 数据库并根据之前下拉列表中的选定值过滤它们的数据。
到目前为止我做了什么
我已经添加了数据连接(对于每个表和相应的下拉列表),它只是在数据库中查询表中的所有记录。对于离线模式,每个连接都设置为“在表单模板中存储数据的副本”。
然后在下拉列表框属性中,我将列表框选项设置为“从外部数据源获取选择”并设置条目字段以选择适当表/下拉列表组合的列。
但是,当我向数据添加过滤器并尝试预览表单时,“级联”下拉列表中的数据永远不会改变。它仍然有所有的记录。
因此,我尝试为其中一个级联下拉菜单添加新规则。例如,我为
Major Task
下拉菜单创建了一个新规则并将其设置如下:- 条件为
Global Function is not blank
- 规则类型
Action
- 运行这些操作:
- 使用数据连接查询:主要任务(仅获取所有记录)
我在规则/操作中看不到任何地方来过滤数据。
- 条件为
编辑我刚刚尝试了一个新的数据连接,它具有正确设置关系的所有三个表(
GlobalFunctions
、、MajorTasks
和Subtasks
)(即 GlobalFunctions.Id = MajorTasks.GlobalFunction)。然后我将下拉列表的数据源设置为这个新连接。但是,这也根本不过滤数据。它们的条目和值如下:- 全局功能:
- 参赛作品:
/dfs:myFields/dfs:dataFields/d_1:GlobalFunctions
- 筛选:
<None>
- 价值:
@Id
- 显示名称:
@Summary
- 参赛作品:
- 主要任务:
- 参赛作品:
/dfs:myFields/dfs:dataFields/d_1:GlobalFunctions/d_1:MajorTasks
- 筛选:
GlobalFunction = Id
- 价值:
@Id
- 显示名称:
@Summary
- 参赛作品:
- 子任务:
- 参赛作品:
/dfs:myFields/dfs:dataFields/d_1:GlobalFunctions/d_1:MajorTasks/d_1:SubTasks
- 筛选:
MajorTask = Id
- 价值:
@Id
- 显示名称:
@Summary
- 参赛作品:
- 全局功能:
限制
- 我不能有任何代码(因为它不能在浏览器中工作,对吧?)
- 表格必须能够在 Web 或本地计算机上填写(工作站上保存的副本)
- 当没有连接到 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)
);