初めての InfoPath フォームのいくつかに着手しています。SQL データベースにクエリを実行し、その前のドロップダウン リストで選択した値に基づいてデータをフィルター処理する必要がある 3 つのドロップダウン リスト ( Global Function
、Major Task
、および) があります。Subtask
これまでに行ったこと
テーブル内のすべてのレコードについてデータベースにクエリを実行するだけのデータ接続 (各テーブルと対応するドロップダウン リスト) を既に追加しました。各接続は、オフライン モードの「データのコピーをフォーム テンプレートに保存する」に設定されています。
次に、[ドロップダウン リスト ボックスのプロパティ]で、リスト ボックスの選択肢を [外部データ ソースから選択肢を取得する] に設定し、エントリフィールドを設定して、適切なテーブルとドロップダウン リストの組み合わせの列を選択します。
ただし、データにフィルターを追加してフォームをプレビューしようとすると、「カスケード」ドロップダウン リストのデータは変更されません。それはまだすべてのレコードを持っています。
そこで、カスケード ドロップダウンの 1 つに新しいルールを追加しようとしました。たとえば、
Major Task
ドロップダウンの新しいルールを作成し、次のように設定しました。- する条件
Global Function is not blank
- ルールの種類
Action
- 次のアクションを実行します。
- データ接続を使用したクエリ: 主なタスク (すべてのレコードを取得するだけ)
ルール/アクションのどこにもデータをフィルター処理する場所がありません。
- する条件
編集
GlobalFunctions
関係を正しくセットアップする 3 つのテーブル ( 、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)
);