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

重要:  本文是由机器翻译的,请参阅免责声明。请在 此处 中查找本文的英文版本以便参考。

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

本文内容

概述

兼容性的注意事项

设置表单模板的脚本语言

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

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

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

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

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

添加脚本来更新现有表单

添加其他事件脚本

概述

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

向表单模板添加脚本时,InfoPath 即启动 Microsoft 脚本编辑器 (MSE),用于在表单模板中添加、编辑和调试脚本,并将光标放在所选事件上。InfoPath 会自动向该脚本添加一个事件处理程序。事件处理程序是 InfoPath 表单模板中的函数代码,用于响应表单中的用户操作或对 XML 数据所做的更改。例如,如果您希望用户将其表单保存在若干网络位置中,可以向 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 自动为下列所有事件添加事件处理程序,但其中一个事件除外。

Event handler

Description

Steps for creating

OnAfterChange

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

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

OnAfterImport

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

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

OnBeforeChange

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

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

OnClick

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

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

OnContextChange

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

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

OnLoad

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

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

OnMergeRequest

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

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

OnSaveRequest

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

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

OnSign

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

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

OnSubmitRequest

当用户提交他或她表单数据时,将运行此事件。例如,您可以在用户单击文件菜单上的提交时提交表单数据发送到安全 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 脚本编辑器将启动,且光标位于 OnSubmitRequest 事件处理程序上。

    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

返回页首

注意: 机器翻译免责声明:本文是由无人工介入的计算机系统翻译的。Microsoft 提供机器翻译是为了帮助非英语国家/地区用户方便阅读有关 Microsoft 产品、服务和技术的内容。由于机器翻译的原因,本文可能包含词汇、语法或文法方面的错误。

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

此信息是否有帮助?

谢谢您的反馈!

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

×