您可以使用廣域 Script 來定義您可以從綱目中任何連結鉤呼叫的一般函數。廣域 Script 就像子常式的程式庫;Rational® ClearQuest® 軟體不直接呼叫它們。
當您有多個記錄類型呼叫相同的連結鉤程式碼時,廣域 Script 很有幫助。它們可讓您集中連結鉤程式碼維護,並避免將連結鉤程式碼複製到多個位置。例如,包含在 Rational ClearQuest 電子郵件套件中的廣域 Script,容許多個動作呼叫一個廣域 Script 來傳送通知。
執行廣域 Script 的唯一方式是從另一個 Script 呼叫它。不過,廣域 Script 的呼叫最後仍必須回溯至記錄型連結鉤(例如欄位連結鉤、動作連結鉤或記錄 Script)的呼叫。因為廣域 Script 的呼叫可一律追蹤至記錄型連結鉤,所以會提供每一個廣域 Script 一個隱含的實體物件,該物件會傳遞至產生該呼叫的記錄型連結鉤。
您可以使用 VBScript 和 Perl 撰寫 Script,但一個語言類型無法呼叫另一個語言類型。撰寫廣域 Script 時,請以呼叫它的 Script 的相同語言來撰寫它。
只在廣域連結鉤中使用函數,因為除非程式碼是在函數中,否則會執行廣域 Script 中的所有程式碼。
如需相關資訊,請參閱撰寫 Script 和使用 Script 作業環境定義。
如需相關 Script 的範例,請參閱廣域 Script 範例。
對於 Perl,$entity 和 $session 變數是廣域變數,當連結鉤執行時,它們會變成作用中。這些變數是在執行時期定義,可使用於廣域 Script 程式碼中。不過,在廣域 Script 的環境定義內,您並不使用這些變數來呼叫 Entity 或 Session 物件方法。
$info = $session->GetProductInfo();將 $session 呼叫置於廣域子常式中還不夠。例如,下列程式碼基於相同原因而失敗,因為它嘗試在編譯時期解決 $productInfo。
$productInfo = GetProductInfo(); sub GetProductInfo { return $session->GetProductInfo(); }
不使用廣域變數(例如 $productInfo 而呼叫 GetProductInfo())來擷取此值。
在執行 Perl 連結鉤時,$session 一律設定為目前的階段作業。不過,為達到最佳效能,請避免定義對 Session 或 Entity 物件資料敏感的廣域變數;相反的,請撰寫廣域存取元函數 (例如 GetUserLoginName())來擷取值。
廣域 Script 主要是作為可從其他連結鉤(例如:存取控制連結鉤、起始設定連結鉤和驗證連結鉤) 呼叫的子常式集合。若如此做,所有的廣域 Script 程式碼皆納入成為 Perl 程式碼(用以執行每一個連結鉤)的一部分。不過,廣域 Script 程式碼可以包含在子常式範圍之外的陳述式(檔案範圍)。
從 7.0.1 版開始,新增的 Perl 連結鉤加強功能可用來複製廣域 Script。當啟用這項加強功能時,會建立 Perl 連結鉤環境;所有的廣域 Script 程式碼會經過編譯和複製,以建立新的連結鉤環境。複製程序會避免重新編譯程式碼,並可讓連結鉤環境共用剖析樹狀結構。複製 Script 可節省每一個 Perl 連結鉤環境的時間和記憶體,提供更好的效能(尤其是對 Rational ClearQuest Web 的改進更為明顯)。
綱目開發人員在撰寫廣域 Script 時應考量如何使用複製作業。如果已對廣域連結鉤啟用複製作業,廣域 Script 中的檔案範圍陳述式只會執行一次。結果將複製到後續的 Perl 直譯器。如果複製作業已失效,每次建立連結鉤環境時都會執行此程式碼(對每個記錄動作執行一次,對每個記錄 Script 呼叫執行一次)。
our $run_once; sub DoSetup { return if defined($run_once); $run_once = 1; # do setup here }
sub Defect_Initialization { DoSetup(); # … # … #reset of Defect_Initialization code…. # … }
在此程式碼範例中,建立連結鉤環境時並未定義 $run_once 變數。在複製此變數之後,它仍然未定義。當連結鉤第一次執行及呼叫 DoSetup() 時,會執行設定程式碼。
use Win32::OLE;不應使用於複製的連結鉤程式碼中(但可使用於非複製的連結鉤程式碼,包括動作連結鉤、欄位連結鉤和記錄連結鉤)。Win32::OLE 不是安全執行緒,但可在 ClearQuest Web 多執行緒環境外使用。例如,您可以在廣域 Script 內使用
require Win32::OLE; import Win32::OLE;來避免複製 Win32::OLE 模組,但該模組不應用在搭配 Rational ClearQuest Web 使用的綱目中。