通过使用脚本自定义表单模板

注意:  我们希望能够尽快以你的语言为你提供最新的帮助内容。 本页面是自动翻译的,可能包含语法错误或不准确之处。我们的目的是使此内容能对你有所帮助。可以在本页面底部告诉我们此信息是否对你有帮助吗? 请在此处查看本文的 英文版本 以便参考。

如果您熟悉编写脚本,您可以通过使用 Microsoft JScript 或 Microsoft Visual Basic Scripting Edition (VBScript) 脚本语言添加到您的 Microsoft Office InfoPath 表单模板脚本。添加脚本使您能够自定义表单模板之外使用规则、 公式、 数据有效性或条件格式。例如,可以添加一个脚本,创建和发送电子邮件,当用户基于表单模板的窗体中切换视图。您可以配置表单模板来创建和发送电子邮件只能通过使用脚本。

本文内容

概述

兼容性的注意事项

设置表单模板的脚本语言

每次发生事件时显示一条消息

添加用户保存表单数据时运行的脚本

添加用户提交表单数据时运行的脚本

添加用户单击按钮时运行的脚本

添加现有表单合并时运行的脚本

添加脚本来更新现有表单

添加其他事件脚本

概述

通过使用规则、 公式、 数据有效性和条件格式,可以自定义 InfoPath 表单模板。虽然这些功能非常灵活,并且可以处理各种任务,某些任务是超出这些功能的功能。例如,您无法使用规则以发送电子邮件,当用户在窗体上的文本框中输入的值。如果您需要自定义表单模板的方式之外的这些功能,您熟悉使用 JScript 或 VBScript 脚本语言编写脚本,那么您可以添加运行时用户打开新表单或修改以前的脚本基于表单模板的 isting 窗体。

当您向表单模板添加脚本时,InfoPath 将启动 Microsoft 脚本编辑器 (MSE),以便您可以添加、 编辑和调试表单模板中的脚本,并将光标放在您选择的事件。InfoPath 会自动添加到该脚本的事件处理程序。事件处理程序响应用户操作或对窗体中的 XML 数据更改为 InfoPath 表单模板中的函数代码。例如,如果您希望用户将表单保存到多个网络位置,您可以添加一个脚本到OnSaveRequest事件处理程序。当您添加脚本运行时用户保存基于表单模板的表单时,InfoPath 启动脚本编辑器,并将以下代码之一添加到该脚本。

注意: InfoPath 中添加代码取决于您选择的脚本语言。

JScript

//=======
// The following function handler is created by Microsoft Office InfoPath.
// Do not modify the name of the function, or the name and number of arguments.
//=======
function XDocument::OnSaveRequest(eventObj)
{
// Write the code to be run before saving here.
eventObj.IsCancelled = eventObj.PerformSaveOperation();
// Write the code to be run after saving here.
eventObj.ReturnStatus = true;
}

VBScript

'=======
' The following function handler is created by Microsoft Office InfoPath.
' Do not modify the name of the function, or the name and number of arguments.
'=======
Sub XDocument_OnSaveRequest(eventObj)
' Write the code to be run before saving here.
eventObj.IsCancelled = eventObj.PerformSaveOperation
' Write the code to be run after saving here.
eventObj.ReturnStatus = True
End Sub

您可以添加代码中的适当位置事件处理程序,将表单保存到不同的网络位置中。当用户保存基于该表单模板的表单时,InfoPath 将运行OnSaveRequest事件处理程序中的代码。

注意: 本文提供了在表单模板中创建脚本的高级视图。若要了解有关 Microsoft 脚本编辑器和特定对象、 方法、 事件和在 InfoPath 中,使用属性,请参阅 InfoPath 开发人员参考。

InfoPath 会自动为除下列事件之一添加事件处理程序。

事件处理程序

说明

创建的步骤

OnAfterChange

用户指定的控件绑定到的字段中的值更改后,将运行此事件。例如,您可以自定义 HTML 任务窗格后显示在用户选择列表框控件中的项目。OnValidate事件之后运行此事件。

右键单击窗体模板或数据源任务窗格中的字段上的控件,在快捷菜单上,指向编程,然后单击在之后更改事件

OnAfterImport

用户成功将多个表单合并到一个窗体后,将运行此事件。

使用手动添加OnAfterImport事件处理程序声明直接到的脚本文件 MSE。在设计模式中无法创建此事件处理程序。

OnBeforeChange

用户在控件中的值更改后,在将值添加到指定的字段绑定到该控件之前执行该事件。例如,您可以防止用户填写重复表中的最后一行之前添加的其他行。

右键单击窗体模板或数据源任务窗格中的字段上的控件,在快捷菜单上,指向编程,然后单击在之前更改事件

OnClick

用户单击与该事件关联的按钮时,将运行此事件。表单模板中添加一个按钮后,此事件才可用。例如,您可以执行复杂计算主数据源中的字段中使用的值,当用户单击按钮。

双击该按钮控件,然后单击按钮属性对话框中的常规选项卡上的编辑表单代码

OnContextChange

当焦点更改窗体中时,将运行此事件。例如,当用户从文本框中导航到日期选取器,或者当用户切换视图执行该事件。在所有其他事件发生后,将发生此事件。

工具菜单上,指向编程,,然后单击上下文更改事件

OnLoad

此事件,只要用户创建一个新的窗体或打开现有窗体基于表单模板上运行。例如,您可以将复制项目的列表从辅助数据源向主数据源用户打开该窗体时。

工具菜单上,指向编程,,然后单击加载事件

OnMergeRequest

基于表单模板的表单合并时,将运行此事件。例如,您可以显示已合并在一起以合并操作期间授予用户的状态的窗体的数目。

工具菜单上,单击表单选项。在类别列表中,单击高级。在合并表单选择使用自定义代码复选框,然后单击编辑

OnSaveRequest

当用户保存基于表单模板的表单时,将运行此事件。例如,您可以保存用户保存窗体时基于到多个位置此表单模板的表单。InfoPath 将两个附加代码行添加到此事件: 保存窗体和其他行的行告诉您是否 InfoPath 成功保存窗体。

工具菜单上,单击表单选项。在类别列表中,单击打开和保存。下保存行为,请选择使用自定义代码复选框,然后单击编辑

OnSign

此事件运行时用户适用于窗体的数字签名。例如,可以将其他数据添加到用金报销单的数字签名中,当用户对其进行签名。

工具菜单上,指向编程,,然后单击上登录事件

一起

当用户提交他或她表单数据时,将运行此事件。例如,您可以在用户单击文件菜单上的提交时提交表单数据发送到安全 Web 服务。由于 InfoPath 不支持安全的 Web 服务数据连接,您需要添加与安全的 Web 服务配合工作的自定义数据连接。

工具菜单上,单击提交选项。选择允许用户提交此表单复选框,单击自定义使用代码执行操作,然后单击编辑代码

OnSwitchView

此事件运行用户打开基于表单模板的表单时,或切换到窗体中的另一个视图。例如,当用户切换到的特定视图,您可以创建电子邮件,其中包含从窗体的主数据源中的字段的数据。

工具菜单上单击编程,,然后单击切换视图事件

OnValidate

用户在控件绑定到的字段值更改时,将运行此事件。例如,当用户更改特定控件中的值,您可以使用用户输入的数字和脚本中的数字计算新值的另一个控件。OnBeforeChange事件处理程序运行之后,将发生此事件。

右键单击窗体模板或数据源任务窗格中的字段上的控件,在快捷菜单上,指向编程,然后单击在之后验证事件

OnVersionUpgrade

此事件运行时用户打开现有窗体和使用现有窗体的窗体模板的版本号低于发布位置中的表单模板的版本号。当用户打开现有窗体时,InfoPath 将检查与现有窗体关联的表单模板的版本号。如果表单模板具有较新的版本号,InfoPath 将用户打开现有窗体时运行OnVersion事件处理程序。例如,假设新字段添加到现有表单模板和重新发布它,并想要添加到主数据源,如果用户打开现有窗体的新字段。用户打开现有窗体时,此事件将新字段添加到主数据源。

工具菜单上,单击表单选项。在类别列表中,单击版本控制。在在版本升级列表中,单击使用自定义事件,,然后单击编辑

返回页首

兼容性的注意事项

不能向浏览器兼容的表单模板添加脚本。您可以仅对其窗体将在 InfoPath 中填写的表单模板添加脚本。只能通过使用托管的代码,可以自定义浏览器兼容的表单模板。

返回页首

为表单模板设置脚本语言

使用自定义表单模板的脚本,您可以使用 Microsoft JScript 或 Microsoft Visual Basic Scripting Edition (VBScript)。默认情况下,InfoPath 配置要使用 JScript 添加脚本。如果表单模板不包含任何脚本或托管的代码,并且您希望使用 VBScript 作为脚本语言,您可以更改 VBScript 到表单模板的脚本语言。不能在同一个表单模板中使用两种脚本语言。

如果表单模板已包含的一种语言中的脚本,并且您想要使用其他语言版本,您需要保存现有脚本,以便您可以将该脚本转换为其他语言版本,该脚本删除表单模板通过表单选项对话框框,然后再将转换后的脚本添加回表单模板。InfoPath 不能将脚本转换为新的脚本语言。更改在表单选项对话框中的脚本语言只会影响此表单模板。其他表单模板将具有 JScript 作为默认脚本语言。

  1. 工具菜单上,单击表单选项

  2. 类别列表中,在表单选项对话框中,单击编程

  3. 表单模板代码语言列表下编程语言,单击VBScript

    注意: 

    • 设置脚本语言并创建表单模板的一个或多个事件处理程序后,您无法更改表单模板的脚本语言。

    • 如果您安装了 Microsoft Visual Studio 2005 Tools,应用程序,默认语言的语言是 Microsoft Visual Basic.NET。您仍然可以使用此过程更改为 VBScript 的脚本语言。

返回页首

每次发生事件时显示一条消息

如果您想要了解事件处理程序在响应操作或其他事件的运行,您可以添加临时代码以显示一个消息框时运行事件处理程序。应使用此代码仅以确定事件处理程序运行时。添加此代码后,您可以使用预览以查看基于该表单模板的表单或发布表单模板,然后创建新的表单模板。仅当您创建窗体发布表单模板之后,将运行某些事件处理程序。然后可以执行的操作,您认为可能会运行事件处理程序。事件处理程序运行时,您将看到一个消息框。

确定哪些操作或事件运行事件处理程序后,删除代码,然后继续设计表单模板。如果您不会删除该代码,则发布表单模板,您的用户将看到此消息框事件处理程序运行。

  1. 添加事件处理程序。

  2. 若要在 JScript 中添加代码,请键入XDocument.UI.Alert ("事件名称事件刚刚运行");将替换为事件处理程序的名称。例如,如果将此代码添加到OnValidate事件处理程序,则应键入XDocument.UI.Alert ("OnValidate 刚刚运行事件处理程序");

  3. 要在 VBScript 中添加代码,例如,键入XDocument.UI.Alert ("事件名称事件刚刚运行") ,如果将此代码添加到OnSaveRequest事件处理程序,请键入XDocument.UI.Alert ("OnSaveRequest 刚刚运行事件处理程序")

  4. 若要测试的代码,在文件菜单上,单击预览或按 CTRL + SHIFT + B,然后执行可以启动事件的用户操作。使用的代码行事件发生时,一个消息框显示您的消息。

    注意: 某些事件可能要求您发布表单模板,然后创建基于此表单模板,才能执行启动事件的用户操作的窗体。

  5. 发布表单模板和允许用户填写表单基于此表单模板之前,请删除您用来显示消息框中的代码。

返回页首

添加用户保存表单数据时运行的脚本

  1. 工具菜单上,单击表单选项

  2. 类别列表中,在表单选项对话框中,单击打开和保存

  3. 保存行为,请选择使用自定义代码复选框,然后单击编辑。Microsoft 脚本编辑器将启动并将光标置于OnSaveRequest事件处理程序。

    JScript

    //=======
    // The following function handler is created by Microsoft Office InfoPath.
    // Do not modify the name of the function, or the name and number of arguments.
    //=======
    function XDocument::OnSaveRequest(eventObj)
    {
    // Write the code to be run before saving here.
    eventObj.IsCancelled = eventObj.PerformSaveOperation();
    // Write the code to be run after saving here.
    eventObj.ReturnStatus = true;
    }

    VBScript

    '=======
    ' The following function handler is created by Microsoft Office InfoPath.
    ' Do not modify the name of the function, or the name and number of arguments.
    '=======
    Sub XDocument_OnSaveRequest(eventObj)
    ' Write the code to be run before saving here.
    eventObj.IsCancelled = eventObj.PerformSaveOperation
    ' Write the code to be run after saving here.
    eventObj.ReturnStatus = True
    End Sub
  4. 请执行下列一项或全部操作:

    • 若要添加一个脚本,InfoPath 将表单保存之前运行,请将批注Write the code to be run before saving here.替换代码。

    • 若要添加运行之后,InfoPath 将表单保存的脚本,请将批注Write the code to be run after saving here.替换代码。

  5. 要测试所做的更改,请单击“常用”工具栏上的“预览”,或者按 Ctrl+Shift+B。

    注意: 如果事件处理程序运行仅在创建基于表单模板的表单之后,通过单击文件菜单上的发布发布表单模板,然后完成发布向导。发布表单模板后,创建窗体,然后执行操作以运行该事件处理程序。

返回页首

添加用户提交表单数据时运行的脚本

  1. 工具菜单上,单击提交选项

  2. 提交选项对话框中,选择允许用户提交此表单复选框。

  3. 单击自定义使用代码执行操作,然后单击编辑代码。Microsoft 脚本编辑器将启动并将光标置于一起事件处理程序。

    JScript

    //=======
    // The following function handler is created by Microsoft Office InfoPath.
    // Do not modify the name of the function, or the name and number of arguments.
    //=======
    function XDocument::OnSubmitRequest(eventObj)
    {
    // If the submit operation is successful, set
    // eventObj.ReturnStatus = true;
    // Write your code here
    }

    VBScript

    '=======
    ' The following function handler is created by Microsoft Office InfoPath.
    ' Do not modify the name of the function, or the name and number of arguments.
    '=======
    Sub XDocument_OnSubmitRequest(eventObj)
    ' If the submit operation is successful, set
    ' eventObj.ReturnStatus = True
    ' Write your code here
    End Sub
  4. 将批注If the submit operation is successful, set eventObj.ReturnStatus = true Write your code here替换为您的代码。

  5. 要测试所做的更改,请单击“常用”工具栏上的“预览”,或者按 Ctrl+Shift+B。

返回页首

添加用户单击按钮时运行的脚本

  1. 向表单模板中,在视图中添加新的按钮,然后双击该按钮。

    注意: 如果要向现有的按钮来添加脚本,请改为双击现有的按钮。

  2. 单击“常规”选项卡。

  3. 单击编辑表单代码。Microsoft 脚本编辑器将启动并将光标置于该按钮OnClick事件处理程序。

    JScript

    //=======
    // The following function handler is created by Microsoft Office InfoPath.
    // Do not modify the name of the function, or the name and number of arguments.
    //=======
    function Button Name::OnClick(eventObj)
    {
    // Write your code here
    }

    VBScript

    '=======
    ' The following function handler is created by Microsoft Office InfoPath.
    ' Do not modify the name of the function, or the name and number of arguments.
    '=======
    Sub Button Name_OnClick(eventObj)
    ' Write your code here
    End Sub
  4. 将批注Write your code here替换为您的代码。

  5. 要测试所做的更改,请单击“常用”工具栏上的“预览”,或者按 Ctrl+Shift+B。

返回页首

添加现有表单合并时运行的脚本

  1. 工具菜单上,单击表单选项

  2. 类别列表中,在表单选项对话框中,单击高级

  3. 合并表单中,选择启用表单合并复选框。

  4. 选择使用自定义代码复选框,然后单击编辑。Microsoft 脚本编辑器将启动并将光标置于OnMergeRequest事件处理程序。

    JScript

    //=======
    // The following function handler is created by Microsoft Office InfoPath.
    // Do not modify the name of the function, or the name and number of arguments.
    //=======
    function XDocument::OnMergeRequest(eventObj)
    {
    // Write the code that handles each form being merged here.
    XDocument.ImportDOM(eventObj.DOM);
    eventObj.ReturnStatus = true;
    }

    VBScript

    '=======
    ' The following function handler is created by Microsoft Office InfoPath.
    ' Do not modify the name of the function, or the name and number of arguments.
    '=======
    Sub XDocument_OnMergeRequest(eventObj)
    ' Write the code that handles each form being merged here.
    XDocument.ImportDOM(eventObj.DOM)
    eventObj.ReturnStatus = True
    End Sub
  5. 将批注Write the code that handles each form being merged here. 替换为您的代码。

  6. 测试此事件中的代码、 发布表单模板,创建基于表单模板中,多个窗体,然后将合并的表单模板。

    注意: 查找有关在另请参阅部分中发布表单模板的详细信息的链接。

返回页首

添加脚本来更新现有表单

如果您更新以前发布的表单模板,并且您想要更新现有表单基于该表单模板,您可以向用户打开一个现有窗体时运行的更新的表单模板添加脚本。当用户打开现有窗体时,InfoPath 将检查在发布位置及其关联的表单模板的版本号。如果在发布位置的表单模板的版本号比现有窗体中的版本号,指示该它已更新,InfoPath 运行中的代码此事件以更新现有窗体。

  1. 工具菜单上,单击表单选项

  2. 类别列表中,在表单选项对话框中,单击版本控制

  3. 在版本升级列表中,单击使用自定义事件,,然后单击编辑。Microsoft 脚本编辑器将启动并将光标置于OnVersionUpgrade事件处理程序。

    JScript

    //=======
    // The following function handler is created by Microsoft Office InfoPath.
    // Do not modify the name of the function, or the name and number of arguments.
    //=======
    function XDocument::OnVersionUpgrade(eventObj)
    {
    // Write your code here
    }

    VBScript

    '=======
    ' The following function handler is created by Microsoft Office InfoPath.
    ' Do not modify the name of the function, or the name and number of arguments.
    '=======
    Sub XDocument_OnVersionUpgrade(eventObj)
    ' Write your code here
    End Sub
  4. 将批注Write your code here替换为您的代码。

  5. 若要测试此事件中的代码,发布表单模板创建多个表单基于该表单模板、 修改和发布表单模板中,更新的版本以及然后打开现有窗体基于该表单模板的较旧版本。

    注意: 查找有关在另请参阅部分中发布表单模板的详细信息的链接。

返回页首

添加其他事件脚本

可以使用此过程将以下事件处理程序添加到您的表单模板:

  • OnAfterChange

  • OnBeforeChange

  • OnContextChange

  • OnLoad

  • OnSwitchView

  • OnSign

  • OnValidate

  • 工具菜单上,指向编程,,然后单击事件添加到事件处理程序。Microsoft 脚本编辑器将启动并将光标置于所选的事件处理程序。

  • 将批注Write your code here替换为您的代码。

返回页首

扩展你的 Office 技能
了解培训
抢先获得新功能
加入 Office 预览体验计划

此信息是否有帮助?

谢谢您的反馈!

谢谢你的反馈! 可能需要转接到 Office 支持专员。

×