如何使用脚本,为具有在 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. 大纲 ID 框中键入 Master1,然后单击 确定
    5. 用鼠标右键单击下一个表,然后单击 重复表属性

      注意此表是第四个表从窗体的顶部。
    6. 重复表属性 对话框中单击 大纲/细节 选项卡。
    7. 大纲/细节设置 中,单击 设置为细节
    8. 关联到大纲 ID 框中选择 $ 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. 数据源 任务窗格中 field1group2 中, 用鼠标右键单击,然后单击 属性
    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
机器翻译
注意:这篇文章是由无人工介入的微软自动的机器翻译软件翻译完成。微软很高兴能同时提供给您由人工翻译的和由机器翻译的文章, 以使您能使用您的语言访问所有的知识库文章。然而由机器翻译的文章并不总是完美的。它可能存在词汇,语法或文法的问题,就像是一个外国人在说中文时总是可能犯这样的错误。虽然我们经常升级机器翻译软件以提高翻译质量,但是我们不保证机器翻译的正确度,也不对由于内容的误译或者客户对它的错误使用所引起的任何直接的, 或间接的可能的问题负责。
点击这里察看该文章的英文版: 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