使用指令碼自訂表單範本

重要:  本文係由機器翻譯而成,請參閱免責聲明。本文的英文版本請見這裡,以供參考。

如果您熟悉指令碼的撰寫,則可以使用 Microsoft JScript 或 Microsoft Visual Basic Scripting Edition (VBScript) 指令碼語言,將指令碼新增至 Microsoft Office InfoPath 表單範本。您可以透過新增指令碼,自訂規則、公式、資料驗證或設定格式化條件無法達成之作業的表單範本。例如,您可以新增指令碼建立電子郵件訊息,並在使用者於以您的表單範本為基礎的表單中切換檢視時傳送電子郵件訊息。您可以設定表單範本,只使用指令碼來建立和傳送電子郵件訊息。

本文內容

概觀

相容性注意事項

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

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

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

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

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

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

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

新增其他事件的指令碼

概觀

您可以使用規則、公式、資料驗證和設定格式化條件,自訂 InfoPath 表單範本。雖然這些功能十分具彈性,而且可以處理絕大部分的工作,但是它們仍然無法處理某些工作。例如,您無法利用規則,在使用者於表單的文字方塊中輸入值時傳送電子郵件訊息。如果您需要透過這些功能無法處理的方式來自訂表單範本,但是您已熟悉使用 JScript 或 VBScript 指令碼語言來撰寫指令碼,則可以新增指令碼,以在使用者開啟新表單或修改以您的表單範本為基礎的現有表單時執行。

將指令碼新增至表單範本時,InfoPath 會啟動 Microsoft Script Editor (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 Script Editor 和 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 中填寫其表單的表單範本,才可以新增指令碼。此外,您只能使用 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 隨即啟動,同時游標會落在 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 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. 若要測試這個事件中的程式碼,請發佈表單範本、建立多個以這個表單範本為基礎的表單,然後合併表單範本。

    附註: 如需發佈表單範本的詳細資訊連結,請瀏覽「請參閱」一節中的連結。

頁面頂端

新增用來更新現有表單的指令碼

如果您已更新先前發佈的表單範本,而且想要更新以該表單範本為基礎的現有表單,則可以將指令碼新增至已更新的表單範本,讓它在使用者開啟其中一個現有表單時執行。使用者開啟現有的表單時,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. 若要測試這個事件中的程式碼,請發佈表單範本、建立多個以這個表單範本為基礎的表單、修改和發佈表單範本的更新版本,然後開啟以舊版表單範本為基礎的現有表單。

    附註: 如需發佈表單範本的詳細資訊連結,請瀏覽「請參閱」一節中的連結。

頁面頂端

新增其他事件的指令碼

這個程序可以用來將下列事件處理常式新增至您的表單範本中:

  • OnAfterChange

  • OnBeforeChange

  • OnContextChange

  • OnLoad

  • OnSwitchView

  • OnSign

  • OnValidate

  • 指向 [工具] 功能表上的 [程式設計],然後按一下要新增至事件處理常式的事件。Microsoft Script Editor 隨即啟動,同時游標會落在所選取的事件處理常式上。

  • 使用您的程式碼來取代註解 Write your code here

頁面頂端

附註: 機器翻譯免責聲明︰本文係以電腦系統翻譯而成,未經人為介入。Microsoft 提供此等機器翻譯旨在協助非英語系使用者輕鬆閱讀 Microsoft 產品、服務及技術相關內容。基於本文乃由機器翻譯而成,因此文中可能出現詞辭、語法、文法上之錯誤。

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

這項資訊有幫助嗎?

感謝您的意見反應!

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

×