如何使用指令碼的串接刪除功能在 InfoPath 中有主要/詳細關係的資料表中

文章翻譯 文章翻譯
文章編號: 892952 - 檢視此文章適用的產品。
全部展開 | 全部摺疊

簡介

本文將告訴您,如何使用指令碼,針對在 Microsoft Office InfoPath 中有主要/詳細關係的資料表中的串接式刪除。您可以使用這個程式碼來刪除詳細資料會連結至主版的項目,刪除母片的項目時,使用索引鍵欄位的項目。

其他相關資訊

Microsoft 僅,為了說明提供程式設計範例,不提供任何明示或默示的保證。這包括,但不限於適售性或適合某特定用途之默示擔保責任。本文假設您已熟悉使用我們所示範的程式設計語言以及建立和偵錯程序所使用的工具。Microsoft 技術支援工程師可以協助解釋特定程序的功能,但它們不會修改這些範例以提供附加功能或建構程序,以符合您特定需求。若要建立具有主要/詳細關係刪除母片的項目時,其中刪除相關的詳細資料的項目資料表,請依照下列步驟執行:
  1. 啟動 InfoPath],然後開啟新的空白表單。要這麼做,請您執行下列步驟:

    InfoPath 2007
    1. 在 [填寫表單] 對話方塊左邊的窗格中, 按一下 [設計表單範本]。
    2. 在表單範本視窗設計中按一下 [空白,然後按一下 [[確定]
    InfoPath 2003
    1. 按一下 [填寫表單] 對話方塊左方的 [設計表單]。
    2. 在右窗格中按一下 [新空白表單]。
  2. 插入兩個重複的表格。要這麼做,請您執行下列步驟:

    InfoPath 2007
    1. 在 [插入] 功能表上按一下 [重複表格]。
    2. 將資料行數設定成 2,然後按一下 [確定]
    3. 重複步驟一及步驟 b 插入另一個重複的表格。
    InfoPath 2003
    1. 在 [插入] 功能表上按一下 [其他控制項]。
    2. 在 [控制項] 工作窗格中的 [插入控制項],] 之下按一下 [重複表格]。
    3. 將資料行數設定成 2,然後按一下 [確定]
    4. 重複步驟 b 並步驟 c 插入另一個重複的表格。
  3. 建立兩個更多的重複表格,並再將兩個新表格繫結至前兩個重複的表格與相同的資料。 要這麼做,請您執行下列步驟:
    1. 在 [檢視] 功能表上按一下 [資料來源]。
    2. 在 [資料來源] 工作窗格中,展開 group1
    3. group2,] 上按一下滑鼠右鍵,然後按一下 [重複表格]。
    4. 在 [資料來源] 工作窗格中,展開 group3
    5. group4,] 上按一下滑鼠右鍵,然後按一下 [重複表格]。
  4. 建立您在步驟 3 中建立的兩個資料表之間的主從式關聯性。要這麼做,請您執行下列步驟:
    1. 第一個資料表上按一下滑鼠右鍵,然後按一下 [重複表格內容]。

      附註這個資料表是第三個的資料表,從表單的上方。
    2. 在 [重複表格內容] 對話方塊按一下 [主要/詳細] 索引標籤。
    3. 在 [主要/詳細設定,按一下 [設成母片]。
    4. 主要識別碼] 方塊中輸入 Master1,],然後再按一下 [確定]]。
    5. 下一個資料表上按一下滑鼠右鍵,然後按一下 [重複表格內容]。

      附註這個資料表是從表單的上方第四個的資料表。
    6. 在 [重複表格內容] 對話方塊按一下 [主要/詳細] 索引標籤。
    7. 在 [主要/詳細設定,按一下 [設成詳細資料]。
    8. 在 [連結至主要識別碼] 方塊中,選取 Master1
    9. 在 [連結主要和詳細,按一下 [根據索引鍵欄位]。
    10. 按一下 [選取 XPath] 圖示,以 索引鍵欄位 (主要)] 方塊右邊的然後按一下 [field1
    11. 按一下 [選取 XPath] 圖示,以 索引鍵欄位 (詳細)] 方塊右邊的按一下 [field3,然後再按一下 [確定]
  5. 插入程式碼,以強制 OnAfterChange 事件中的索引鍵欄位詳細資料] 資料表中的串接刪除功能。要這麼做,請您執行下列步驟:

    InfoPath 2007
    1. 資料來源] 工作窗格 group2field1] 上按一下滑鼠右鍵、 按一下 程式設計,然後按一下 [開啟之後變更事件]。
    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. 資料來源] 工作窗格 group2 中, field1] 上按一下滑鼠右鍵,然後按一下 [內容]。
    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. 按一下 [確定] 以關閉 [欄位或群組內容] 對話方塊。

預覽表單,以示範如何程式碼 works.To 這麼做,請依照下列步驟執行:
  1. InfoPath 2007

    在 [檔案] 功能表上指向 [預覽,然後再按一下 [表單]。

    InfoPath 2003

    在 [檔案] 功能表上指向 [預覽表單],],再按 預設值
  2. 在表單上在第一個資料表中插入某些測試值。 這個資料表是在主資料表。要這麼做,請您執行下列步驟:
    1. 在第一列的第一欄中,鍵入 Test1
    2. 在第一列的第二欄中,鍵入 Master1
    3. 您剛才輸入資料的位置之資料列] 下按一下 [第一個資料表中加入新列的 [插入項目]。
    4. 在第二個資料列的第一欄中,鍵入 [Test2]。
    5. 在第二個資料列的第二欄中,鍵入 Master2
    6. 如果想加入更多的資料列重複步驟 2 c 透過 2e。
  3. 在表單上在第二個資料表中插入某些測試值。 這個資料表是詳細資料] 資料表。要這麼做,請您執行下列步驟:
    1. 在第一列的第一欄中,鍵入 Test1
    2. 在第一列的第二欄中,鍵入 Detail1
    3. 您剛才輸入資料的位置之資料列] 下按一下 [第二個資料表中加入新列的 [插入項目]。
    4. 在第二個資料列的第一欄中,鍵入 [Test2]。
    5. 在第二個資料列的第二欄中,鍵入 Detail2
    6. 如果想加入更多的資料列重複步驟 2 c 透過 2e。
  4. 測試主要/詳細資料表。 第三個表格一次一個,以選取每個資料列。 第四個本表只在第二個資料表中的資料列在第一欄中具有相同的值為第三個資料表中選取的資料列。
  5. 從設計主複本刪除一個資料列的資料表。 要這麼做,請您執行下列步驟:
    1. 第三個資料表中選取 [第二個位置的第一欄包含 Test2"的資料列]。
    2. 按一下選定的資料列] 旁的箭號,然後按一下 [移除 group2

      附註第四個資料表中自動刪除資料列的第一個資料行中有相同的文字由範例程式碼。比方說 Test2"會被刪除。

屬性

文章編號: 892952 - 上次校閱: 2007年1月30日 - 版次: 2.2
這篇文章中的資訊適用於:
  • Microsoft Office InfoPath 2003
  • Microsoft Office InfoPath 2003, Service Pack 1 (SP1)
  • Microsoft Office InfoPath 2007
關鍵字:?
kbmt kbxml kbcodesnippet kbcode kbprogramming kbhowto KB892952 KbMtzh
機器翻譯
重要:本文是以 Microsoft 機器翻譯軟體翻譯而成,而非使用人工翻譯而成。Microsoft 同時提供使用者人工翻譯及機器翻譯兩個版本的文章,讓使用者可以依其使用語言使用知識庫中的所有文章。但是,機器翻譯的文章可能不盡完美。這些文章中也可能出現拼字、語意或文法上的錯誤,就像外國人在使用本國語言時可能發生的錯誤。Microsoft 不為內容的翻譯錯誤或客戶對該內容的使用所產生的任何錯誤或損害負責。Microsoft也同時將不斷地就機器翻譯軟體進行更新。
按一下這裡查看此文章的英文版本:892952
Microsoft及(或)其供應商不就任何在本伺服器上發表的文字資料及其相關圖表資訊的恰當性作任何承諾。所有文字資料及其相關圖表均以「現狀」供應,不負任何擔保責任。Microsoft及(或)其供應商謹此聲明,不負任何對與此資訊有關之擔保責任,包括關於適售性、適用於某一特定用途、權利或不侵權的明示或默示擔保責任。Microsoft及(或)其供應商無論如何不對因或與使用本伺服器上資訊或與資訊的實行有關而引起的契約、過失或其他侵權行為之訴訟中的特別的、間接的、衍生性的損害或任何因使用而喪失所導致的之損害、資料或利潤負任何責任。

提供意見

 

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