InfoPath では、マスター/詳細リレーションシップを持つテーブルに、連鎖削除のためのスクリプトの使用方法

文書翻訳 文書翻訳
文書番号: 892952 - 対象製品
すべて展開する | すべて折りたたむ

概要

カスケード削除操作を Microsoft Office InfoPath では、マスター/詳細リレーションシップを持つテーブル内のスクリプトを使用する方法について説明します。 このコードを使用するマスター アイテムを削除したキー フィールドを使用してマスター アイテムにリンクされている詳細項目を削除できます。

詳細

マイクロソフトは提供プログラミング言語の使用方法の一例としてのみ、姿表現または暗黙に提供します。 これはに含まれますに、黙示または商品性および特定目的に対する適合性の黙示保証は一切制限はありません。 この資料ではであると見なすは、例示されているプログラミング言語を作成したりプロシージャをデバッグするためのツールと使い慣れた。 マイクロソフト サポート エンジニアに、特定のプロシージャの機能について説明する役立ちますが追加機能を提供する構築手順、特定の要件を次の例は変更されません。 マスター アイテムが削除されたときの関連する詳細アイテムは削除をマスター/詳細リレーションシップを持つテーブルを作成するには、次の手順に従います。
  1. InfoPath を起動して、新しい空白のフォームを開きます。 これを行うには、次の手順を実行します。

    InfoPath 2007 用
    1. フォームの入力 ] ダイアログ ボックスの左側のウィンドウでは 、フォーム テンプレートのデザイン をクリックします。
    2. フォーム テンプレートのウィンドウのデザイン、 空白 をクリックし、 [OK]
    InfoPath 2003 の
    1. フォームの入力 ] ダイアログ ボックスの左側のウィンドウでは 、フォームのデザイン をクリックします。
    2. 右ペインで 新しい空白のフォーム をクリックします。
  2. 2 つの繰り返しテーブルを挿入します。 これを行うには、次の手順を実行します。

    InfoPath 2007 用
    1. [ 挿入 ] の [ 繰り返しテーブル ] をクリックします。
    2. 列の数を 2 に設定し、 [OK] を実行します。
    3. 繰り返し手順、および手順 b. を別の繰り返しテーブルを挿入します。
    InfoPath 2003 の
    1. [ 挿入 ] をクリックします。
    2. [ コントロール ] 作業ウィンドウの [ コントロールの挿入 ] </a0> を、 繰り返しテーブル ] をクリックします。
    3. 列の数を 2 に設定し、 [OK] を実行します。
    4. 手順 c. を別の繰り返しテーブルを挿入して手順 b. を繰り返します。
  3. 複数繰り返しテーブルの 2 つを作成し、2 つの新しいテーブルの最初の 2 つの繰り返しテーブルと同じデータにバインドします。 これを行うには、次の手順を実行します。
    1. [ 表示 ] メニューの [ データ ソース ] をクリックします。
    2. データ ソース のタスク ペインで group1 を展開します。
    3. group2 ] を右クリックし、 [繰り返しテーブル を実行します。
    4. データ ソース のタスク ペインで group3 を展開します。
    5. group4 ] を右クリックし、 [繰り返しテーブル を実行します。
  4. 手順 3 で作成した 2 つのテーブル間のマスター/詳細リレーションシップを作成します。 これを行うには、次の手順を実行します。
    1. 先テーブルを右クリックして、[ テーブル プロパティの [繰り返し ] をクリックします。

      メモ このテーブルは、フォームの上端から 3 番目のテーブルです。
    2. [ 繰り返しテーブルのプロパティ ] ダイアログ]、 マスター/詳細 ] タブを選択します。
    3. マスター/詳細の設定 、[ マスターとして設定 をクリックします。
    4. [ マスター ID ] ボックスで Master1 、入力を [OK] をクリックします。
    5. 次テーブルを右クリックして、[ テーブルのプロパティの [繰り返し ] をクリックします。

      メモ このテーブルは、フォームの上端から 4 番目のテーブルです。
    6. [ 繰り返しテーブルのプロパティ ] ダイアログ]、 マスター/詳細 ] タブを選択します。
    7. マスター/詳細の設定 、[ 詳細として設定 をクリックします。
    8. マスター ID にリンクする </a0>] Master1 を選択します。
    9. [ リンクのマスターと詳細 ] キー フィールドをクリックします。
    10. キー フィールド (マスター) </a0>] ボックスの右側に ある (XPath の選択) アイコンをクリックし、 フィールド 1 を実行します。
    11. キー フィールド (詳細) ] ボックスの右側に ある (XPath の選択) アイコン、 field3 、[ OK] をクリック します。
  5. 詳細テーブルのキー フィールドの OnAfterChange イベントの連鎖削除を強制するコードを挿入します。 これを行うには、次の手順を実行します。

    InfoPath 2007 用
    1. [ データ ソース ] 作業ウィンドウ、 フィールド 1 group2 でを右クリックして プログラミング ] をクリックし の後に変更イベント ] をクリックします。
    2. 次のコード ウィンドウを追加スクリプトを編集します。

      メモ フィールドのプレースホルダーとグループのプレースホルダーをグループと、使用するフィールドの名に置き換える。
      function msoxd_my_field1::OnAfterChange(eventObj)
      {
       // Write code here to restore the global state.
       
       if (eventObj.IsUndoRedo)
       {
        // An undo operation or a redo operation has occurred, and the DOM is read-only.
        return;
       }
       
       //Delete corresponding details if a delete operation has occurred on source group2.
       if(eventObj.Operation == "Delete" && eventObj.Source.nodeName == "my:group2")
       {
        //Block the view update feature to improve performance.
        thisXDocument.View.DisableAutoUpdate();
        
        //Obtain the  value of the keyfield of that row that you want to delete (set as field1 in Designer).
        var nodeKeyFieldMaster = eventObj.Source.selectSingleNode("my:field1");
                
        //Set the selection on all nodes in Detail.
        var nodesDetail = XDocument.DOM.selectNodes("/my:myFields/my:group3/my:group4");
       
        //View each row in Detail, and then delete the row if the key field in the detail matches the key field in the master.
        for (i=0; i< nodesDetail.length; i++)
        {
         //Obtain the row.
         var row = nodesDetail.item(i);
         
         //Obtain the  value of the keyfield for the current row  (set as field3 in Designer).
         var nodeKeyFieldDetail = row.selectSingleNode("my:field3");
       
         //Delete the row if the keyfield in the detail matches the keyfield of the deleted row in the master.
         if(nodeKeyFieldDetail.text == nodeKeyFieldMaster.text)
         {
          row.parentNode.removeChild(row); 
         }
      
        //Re-enable the view update.
        thisXDocument.View.EnableAutoUpdate();
      
        }
       } 
      }
      
    3. [ ファイル ] の [ 保存 ] をクリックします。
    4. [ ファイル ] メニューの [ 終了 ] をクリックします。
    InfoPath 2003 の
    1. [ データ ソース ] 作業ウィンドウ、 フィールド 1 group2 でを右クリックし、 プロパティ
    2. フィールドまたはグループのプロパティ ] ダイアログ ボックスで、[ 入力規則とイベント ハンドラー ] タブをクリックします。
    3. イベント の一覧、 OnAfterChange ] をクリックし、 編集 します。
    4. 次のコード ウィンドウを追加スクリプトを編集します。

      メモ フィールドのプレースホルダーとグループのプレースホルダーをグループと、使用するフィールドの名に置き換える。
      function msoxd_my_field1::OnAfterChange(eventObj)
      {
       // Write code here to restore the global state.
       
       if (eventObj.IsUndoRedo)
       {
        // An undo operation or a redo operation has occurred, and the DOM is read-only.
        return;
       }
       
       //Delete corresponding details if a delete operation has occurred on source group2.
       if(eventObj.Operation == "Delete" && eventObj.Source.nodeName == "my:group2")
       {
        //Block the view update feature to improve performance.
        thisXDocument.View.DisableAutoUpdate();
        
        //Obtain the  value of the keyfield of that row that you want to delete (set as field1 in Designer).
        var nodeKeyFieldMaster = eventObj.Source.selectSingleNode("my:field1");
                
        //Set the selection on all nodes in Detail.
        var nodesDetail = XDocument.DOM.selectNodes("/my:myFields/my:group3/my:group4");
       
        //View each row in Detail, and then delete the row if the key field in the detail matches the key field in the master.
        for (i=0; i< nodesDetail.length; i++)
        {
         //Obtain the row.
         var row = nodesDetail.item(i);
         
         //Obtain the  value of the keyfield for the current row  (set as field3 in Designer).
         var nodeKeyFieldDetail = row.selectSingleNode("my:field3");
       
         //Delete the row if the keyfield in the detail matches the keyfield of the deleted row in the master.
         if(nodeKeyFieldDetail.text == nodeKeyFieldMaster.text)
         {
          row.parentNode.removeChild(row); 
         }
      
        //Re-enable the view update.
        thisXDocument.View.EnableAutoUpdate();
      
        }
       } 
      }
      
    5. [ ファイル ] メニューの [編集ウィンドウを閉じるには、 終了 ] をクリックします。
    6. フィールドまたはグループのプロパティ ] ダイアログ ボックスを閉じます [OK] をクリックします。

これをコード works.To 方法をデモンストレーションを次の手順に従いますフォームをプレビューします。
  1. InfoPath 2007 用

    [ ファイル ] メニューの [ プレビュー ] をポイントし、[ フォーム ] をクリックします。

    InfoPath 2003 の

    [ ファイル ] メニューの [ フォームのプレビュー ] をポイントして [ 既定 </a0>] をクリックしてください
  2. いくつかのテスト値をフォーム上の最初の表に挿入します。 このテーブルは、マスター テーブルです。 これを行うには、次の手順を実行します。
    1. 最初の行の列、最初に、 Test1 を入力します。
    2. 最初の行の列、2 番目に、 Master1 を入力します。
    3. 入力したデータの行 [最初の表に、新しい行を追加の 項目の挿入 をクリックします。
    4. 2 番目の行の列、最初に、 Test2 を 入力します。
    5. 2 番目の行の列、2 番目に、 Master2 を 入力します。
    6. 複数の行を追加する場合は、手順 2 c 〜 2e を繰り返します。
  3. いくつかのテスト値をフォーム上の 2 番目の表に挿入します。 このテーブルは [明細] テーブルです。 これを行うには、次の手順を実行します。
    1. 最初の行の列、最初に、 Test1 を入力します。
    2. 最初の行の列、2 番目に、 Detail1 を入力します。
    3. 入力したデータの行 [ 項目の挿入 </a0> の 2 番目の表に、新しい行を追加をクリックします。
    4. 2 番目の行の列、最初に、 Test2 を 入力します。
    5. 2 番目の行の列、2 番目に、 Detail2 を 入力します。
    6. 複数の行を追加する場合は、手順 2 c 〜 2e を繰り返します。
  4. マスター/詳細テーブルをテストします。 1 つずつ 3 番目、テーブル内の各行を選択します。 4 番目の表は、最初の列の 3 番目の表は、選択した行として同じ値を持つ、2 番目のテーブルから行だけです。
  5. マスターから行を削除テーブル。 これを行うには、次の手順を実行します。
    1. 3 番目のテーブルで"Test2"の最初の列の格納第 2 行を選択します。
    2. 選択した行の横の矢印をクリックし、 group2 を削除 します。

      メモ 最初の列で、同じテキストを含む行は、サンプル コードで、4 番目のテーブルから自動的に削除されます。 たとえば、"Test2"が削除されます。

プロパティ

文書番号: 892952 - 最終更新日: 2007年1月30日 - リビジョン: 2.2
この資料は以下の製品について記述したものです。
  • Microsoft Office InfoPath 2003
  • Microsoft Office InfoPath 2003, Service Pack 1 (SP1)
  • Microsoft Office InfoPath 2007
キーワード:?
kbhowto kbcodesnippet kbprogramming kbxml kbcode kbmt KB892952 KbMtja
機械翻訳の免責
重要: このサポート技術情報 (以下「KB」) は、翻訳者による翻訳の代わりに、マイクロソフト機械翻訳システムによって翻訳されたものです。マイクロソフトは、お客様に、マイクロソフトが提供している全ての KB を日本語でご利用いただけるように、翻訳者による翻訳 KB に加え機械翻訳 KB も提供しています。しかしながら、機械翻訳の品質は翻訳者による翻訳ほど十分ではありません。誤訳や、文法、言葉使い、その他、たとえば日本語を母国語としない方が日本語を話すときに間違えるようなミスを含んでいる可能性があります。マイクロソフトは、機械翻訳の品質、及び KB の内容の誤訳やお客様が KB を利用されたことによって生じた直接または間接的な問題や損害については、いかなる責任も負わないものとします。マイクロソフトは、機械翻訳システムの改善を継続的に行っています。
英語版 KB:892952
Microsoft Knowledge Base の免責: Microsoft Knowledge Baseに含まれている情報は、いかなる保証もない現状ベースで提供されるものです。Microsoft Corporation及びその関連会社は、市場性および特定の目的への適合性を含めて、明示的にも黙示的にも、一切の保証をいたしません。さらに、Microsoft Corporation及びその関連会社は、本文書に含まれている情報の使用及び使用結果につき、正確性、真実性等、いかなる表明・保証も行ないません。Microsoft Corporation、その関連会社及びこれらの権限ある代理人による口頭または書面による一切の情報提供またはアドバイスは、保証を意味するものではなく、かつ上記免責条項の範囲を狭めるものではありません。Microsoft Corporation、その関連会社 及びこれらの者の供給者は、直接的、間接的、偶発的、結果的損害、逸失利益、懲罰的損害、または特別損害を含む全ての損害に対して、状況のいかんを問わず一切責任を負いません。(Microsoft Corporation、その関連会社 またはこれらの者の供給者がかかる損害の発生可能性を了知している場合を含みます。) 結果的損害または偶発的損害に対する責任の免除または制限を認めていない地域においては、上記制限が適用されない場合があります。なお、本文書においては、文書の体裁上の都合により製品名の表記において商標登録表示、その他の商標表示を省略している場合がありますので、予めご了解ください。

フィードバック

 

Contact us for more help

Contact us for more help
Connect with Answer Desk for expert help.
Get more support from smallbusiness.support.microsoft.com