0

初めての InfoPath フォームのいくつかに着手しています。SQL データベースにクエリを実行し、その前のドロップダウン リストで選択した値に基づいてデータをフィルター処理する必要がある 3 つのドロップダウン リスト ( Global FunctionMajor Task、および) があります。Subtask

これまでに行ったこと

  1. テーブル内のすべてのレコードについてデータベースにクエリを実行するだけのデータ接続 (各テーブルと対応するドロップダウン リスト) を既に追加しました。各接続は、オフライン モードの「データのコピーをフォーム テンプレートに保存する」に設定されています。

    次に、[ドロップダウン リスト ボックスのプロパティ]で、リスト ボックスの選択肢を [外部データ ソースから選択肢を取得する] に設定し、エントリフィールドを設定して、適切なテーブルとドロップダウン リストの組み合わせの列を選択します。

    ただし、データにフィルターを追加してフォームをプレビューしようとすると、「カスケード」ドロップダウン リストのデータは変更されません。それはまだすべてのレコードを持っています。

  2. そこで、カスケード ドロップダウンの 1 つに新しいルールを追加しようとしました。たとえば、Major Taskドロップダウンの新しいルールを作成し、次のように設定しました。

    • する条件Global Function is not blank
    • ルールの種類Action
    • 次のアクションを実行します。
    • データ接続を使用したクエリ: 主なタスク (すべてのレコードを取得するだけ)

    ルール/アクションのどこにもデータをフィルター処理する場所がありません。

  3. 編集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)
);
4

1 に答える 1

1

OK、この記事で解決策を見つけました。

基本的に私の問題は、現在のドロップダウン リストでフィルタリングするときに、前のドロップダウン リストで正しい値 (実際に選択された値) を選択していなかったことです。代わりに、データベースのデータに基づいてオプションの値を選択しました。

これらは、問題を解決するために私が取った手順です (問題が発生した場合に備えて、記事から再掲します)。

  1. 最初のドロップダウン リストを右クリックし、[ドロップダウン リストのプロパティ] をクリックして、データ ソースを適切に設定します。
  2. カスケードする次のドロップダウン リストを右クリックし、[ドロップダウン リストのプロパティ] をクリックします。
  3. データ ソースを適切に設定します。
  4. 2 番目のドロップダウン リストで、[エントリ] ボックスの横にある[XPath を選択] ボタンをクリックします。
  5. [データのフィルター] をクリックし、[追加] をクリックします。
  6. 最初のドロップダウン ボックスで、[フィールドまたはグループを選択... ] を選択します。
  7. [データ ソース] ドロップダウン リストで、[メイン] を選択します。
  8. ドロップダウン シリーズの最初の " Global Function " フィールドを選択します (" myFields " の次に " dataFields " の下にある場合があります)。
  9. 真ん中のドロップダウン リストで等値演算子を設定します。
  10. 最後のドロップダウンで、[フィールドまたはグループを選択... ] を選択します。
  11. MajorTasksSelect :GlobalFunction(グローバル関数テーブルへの FK リレーションシップ) の下で、データ ソースを変更しません。
  12. すべてのダイアログ ボックスで [OK] を選択し、[サブタスク] ドロップダウン リスト (シリーズの最後) について繰り返します。
于 2011-08-09T17:25:07.630 に答える