0

最初のInfoPathフォームの一部を開始しています。私は3つのドロップダウンリスト(Global FunctionMajor Task、およびSubtask)を持っており、SQLデータベースを照会し、その前にドロップダウンリストで選択した値に基づいてデータをフィルタリングする必要があります。私はこれまでInfoPath 2010のSQL Server 2008でのカスケードドロップダウンリスト

  1. をやった

    私はすでに、単純にすべてのレコードをデータベースに照会(ドロップダウンリスト対応テーブル&のそれぞれの)データ接続を追加しました表。各接続は、オフラインモードの「フォームテンプレートにデータのコピーを保存する」に設定されています。そして、ドロップダウンリストボックスのプロパティで、私は適切なのために列を選択すると、セットアップエントリフィールドを「外部データソースから選択肢を取得」するリストボックスの選択肢を設定している

    テーブル/ドロップダウンリストの組み合わせ。

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

  2. それで、カスケードドロップダウンの1つに新しいルールを追加しようとしました。

    • 条件を実行し、これらのアクションAction
    • ルールのタイプ
    • Global Function is not blankに:
    • クエリデータ接続を使用して、例えば以下のように、私はダウンMajor Taskドロップのための新しいルールを作成し、それを設定します:メジャータスク(すべてのレコードを取得するだけ)

    データをフィルタリングするルール/アクションのどこにも表示されません。私はすべての3つのテーブル(GlobalFunctionsMajorTasks、およびSubtasks)を持つ新しいデータ接続を試してみた

  3. EDITそれを正しくセットアップ関係(すなわち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

制限

  • それはブラウザでは動作しませんので、私は(背後にある任意のコードを持つことができません
  • フォームはウェブ上で記入することができなければなりません。ローカルマシン(ワークステーション上に保存されたコピー)
  • はまだ動作すべきSQLデータベースへの接続がない

私は、複数のカスケードドロップダウンリストを実装するにはどうすればよいの質問

InfoPath 2010には、ブラウザで動作しInfoPath Filler(後者はデータベースに接続できない可能性があります)を使用できるMS SQLデータベースへのデータ接続があります。ここで

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) 
); 

答えて

1

OK、私はthis articleに私の解決策を見つけました。

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

  1. これらは私が私の問題を解決するために取った手順(それがダウンした場合の記事から再生)していますデータソースを適切に設定します。

  2. カスケードする次のドロップダウンリストを右クリックし、「ドロップダウンリストのプロパティ」をクリックします。
  3. データソースを適切に設定します。
  4. 2番目のドロップダウンリストで、[エントリ]ボックスの横にある[]を選択します。[XPath]をクリックします。
  5. フィルタデータ」をクリックし、次に追加します。
  6. 最初のドロップダウンボックスで、「フィールドまたはグループを選択...」を選択します。
  7. "データソース"ドロップダウンリストで "メイン"を選択します。
  8. は「グローバル関数」フィールドを選択し、一連のドロップダウンの最初の(「マイフィールド」、次いで「dataFields」であってもよいです)。
  9. 中間ドロップダウンリストに等価演算子を設定します。
  10. 最後のドロップダウンで、「フィールドまたはグループを選択...」を選択します。
  11. データソースを変更しないで、MajorTasksを選択します。:GlobalFunction(グローバル機能テーブルとのFK関係)。
  12. サブタスクのドロップダウンリスト(このシリーズの最後のサブセット)のうち、すべてのダイアログボックスはOKです。