使用指令碼自訂表單範本

附註:  我們想要以您的語言,用最快的速度為您提供最新的說明內容。 本頁面是經由自動翻譯而成,因此文中可能有文法錯誤或不準確之處。讓這些內容對您有所幫助是我們的目的。希望您能在本頁底部告訴我們這項資訊是否有幫助。 此為 英文文章 出處,以供參考。

如果您熟悉撰寫指令碼,您可以新增至您的 Microsoft Office InfoPath 表單範本的指令碼使用 Microsoft JScript 或 Microsoft Visual Basic Scripting Edition (VBScript) 的指令碼語言。新增指令碼,可讓您自訂表單範本 」 可使用規則、 公式、 資料驗證],或設定格式化的條件。例如,您可以新增的指令碼,會建立並傳送電子郵件訊息,當使用者表單範本為基礎的表單中切換檢視。您可以設定表單範本來建立及傳送電子郵件使用指令碼。

本文內容

概觀

相容性注意事項

設定表單範本的指令碼語言

每次事件發生時顯示的訊息

新增使用者儲存表單資料時所執行指令碼

新增使用者送出表單資料時所執行指令碼

新增使用者按一下按鈕時執行指令碼

新增現有的表單合併時執行指令碼

新增指令碼,以更新現有的表單

新增其他事件的指令碼

概觀

使用規則、 公式、 資料驗證及設定格式化的條件,您可以自訂 InfoPath 表單範本。雖然這些功能是非常有彈性,而且可以處理各種工作,請幾項工作並不討論這些功能的功能。例如,您無法使用規則來傳送電子郵件訊息,當使用者在文字方塊中輸入的值,表單上。如果您需要自訂表單範本的方式,這些功能,而且您的功能不熟悉使用 JScript 或 VBScript 指令碼語言撰寫指令碼,您可以新增時的使用者開啟新的表單或修改 e x 執行指令碼表單範本為基礎的 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 表單範本中加入指令碼。您可以只使用 managed 程式碼自訂瀏覽器相容表單範本。

頁面頂端

設定表單範本的指令碼語言

若要使用指令碼自訂表單範本,您可以使用 Microsoft JScript 或 Microsoft Visual Basic Scripting Edition (VBScript)。根據預設,InfoPath 設定為使用 JScript 新增指令碼。如果表單範本不包含任何指令碼或 managed 程式碼,而且您想要使用 VBScript 指令碼語言為,您可以變更的表單範本的指令碼語言到 VBScript。您無法使用這兩種指令碼語言相同的表單範本中。

如果表單範本在已包含一種語言的指令碼,且您想要使用其他語言的版本,您需要儲存的現有的指令碼,以便您可以將指令碼轉換成其他語言的版本,移除透過表單選項的表單範本的指令碼對話方塊] 方塊中,,,然後將已轉換的指令碼新增至表單範本。InfoPath 無法轉換為新的指令碼語言的指令碼。變更 [表單選項] 對話方塊中的指令碼語言時,只會影響此表單範本。其他表單範本會有 JScript 指令碼語言的預設值。

  1. 在 [工具] 功能表上按一下 [表單選項]。

  2. 在 [類別] 清單的 [表單選項] 對話方塊中,按一下 [程式]。

  3. 表單範本的程式碼語言] 清單中,程式設計語言,按一下 [ VBScript

    附註: 

    • 設定的指令碼語言後,當您建立的表單範本的一或多個事件處理常式時,您無法變更的表單範本的指令碼語言。

    • 如果您已安裝 Microsoft Visual Studio 2005 Tools for Applications,預設語言會是 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 Script Editor 開頭的游標位於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 Script Editor 開頭的游標位於搭配事件處理常式。

    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 Script Editor 開頭的游標位於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 Script Editor 開頭的游標位於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. 若要測試的程式碼,在這種情況,發佈表單範本,建立多個此表單範本為基礎的表單,然後合併的表單範本。

    附註: Find links to more information about publishing your form template in the See Also section.

頁面頂端

新增指令碼,以更新現有的表單

如果您更新先前已發佈的表單範本,且您想要更新現有的表單範本為基礎的表單,您可以新增指令碼更新的表單範本使用者開啟現有的表單時執行。當使用者開啟現有的表單時,InfoPath 就會檢查其相關聯的表單範本的發佈位置的版本號碼。如果現有的表單中的版本號碼比更新表單範本的發佈位置的版本號碼,指出,它已更新,InfoPath 程式碼中執行此事件來更新現有的表單。

  1. 在 [工具] 功能表上按一下 [表單選項]。

  2. 在 [類別] 清單的 [表單選項] 對話方塊中,按一下 [版本設定]。

  3. [版本升級] 清單中,按一下 [使用自訂的事件,然後按一下編輯。Microsoft Script Editor 開頭的游標位於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. 若要測試的程式碼,在這種情況、 發佈表單範本,建立多個表單範本為基礎此表單、 修改及發佈表單範本的更新的版本,然後開啟現有的表單較舊版本的表單範本。

    附註: Find links to more information about publishing your form template in the See Also section.

頁面頂端

新增其他事件的指令碼

此程序可用於將下列事件處理常式新增至表單範本:

  • OnAfterChange

  • OnBeforeChange

  • OnContextChange

  • OnLoad

  • OnSwitchView

  • OnSign

  • OnValidate

  • 在 [工具] 功能表上指向程式設計,然後再按一下 [新增事件處理常式事件。Microsoft Script Editor 開頭的游標位於您所選的事件處理常式。

  • 註解Write your code here換成您的程式碼。

頁面頂端

增進您的 Office 技巧
探索訓練
優先取得新功能
加入 Office 測試人員

這項資訊有幫助嗎?

感謝您的意見反應!

感謝您的意見反應! 我們將協助您與其中一位 Office 支援專員連絡以深入了解您的意見。

×