글로벌 스크립트를 사용하면 스키마의 후크에서 호출할 수 있는 공통 기능을 정의할 수 있습니다. 글로벌 스크립트는 일종의 서브루틴 라이브러리입니다. Rational® ClearQuest® 소프트웨어는 글로벌 스크립트를 직접 호출하지 않습니다.
글로벌 스크립트는 여러 레코드 유형이 동일한 후크 코드를 호출할 때 유용합니다. 이 스크립트를 사용하면 후크 코드를 중앙에서 유지보수할 수 있으며 후크 코드를 여러 곳에 복사하는 것을 방지할 수 있습니다. 예를 들어, Rational ClearQuest Email 패키지에 포함된 글로벌 스크립트를 사용하면 여러 조치에서 하나의 글로벌 스크립트를 호출하여 알림을 보낼 수 있습니다.
글로벌 스크립트는 다른 스크립트에서만 호출할 수 있습니다. 그러나 글로벌 스크립트에 대한 호출은 궁극적으로 필드 후크, 조치 후크 또는 레코드 스크립트와 같은 레코드 기반 후크에 대한 호출로 역추적되어야 합니다. 글로벌 스크립트에 대한 호출은 항상 레코드 기반 후크로 추적될 수 있으므로 각 글로벌 스크립트에는 호출을 처음 생성한 레코드 기반 후크로 전달된 내재적인 엔티티 오브젝트가 제공됩니다.
스크립트는 VBScript 및 Perl로 모두 작성할 수 있지만 하나의 언어 유형이 다른 언어 유형을 호출할 수는 없습니다. 글로벌 스크립트를 작성하는 경우, 이를 호출하는 스크립트와 동일한 언어로 작성하십시오.
글로벌 후크에서만 함수를 사용하십시오. 글로벌 스크립트의 모든 코드가 함수에 포함되지 않아야 실행되기 때문입니다.
자세한 정보는 스크립트 작성 및 스크립트 사용을 위한 운영 컨텍스트를 참조하십시오.
관련 스크립트 예제는 글로벌 스크립트 예제를 참조하십시오.
Perl의 경우, 변수 $entity 및 $session은 후크가 실행될 때 활성화되는 글로벌 변수입니다. 이 변수는 런타임에서 정의되며 글로벌 스크립트 코드에서 사용할 수 있습니다. 그러나 이러한 변수는 글로벌 스크립트의 컨텍스트에서 Entity 또는 Session 오브젝트 메소드를 호출하는 데 사용하지 않습니다.
$info = $session->GetProductInfo();이 코드는 글로벌 서브루틴에 $session 호출을 배치하는 데 충분하지 않습니다. 예를 들어, 다음 코드는 컴파일할 때 $productInfo를 분석하기 때문에 마찬가지로 실패합니다.
$productInfo = GetProductInfo(); sub GetProductInfo { return $session->GetProductInfo(); }
$productInfo와 같은 글로벌 변수를 사용하는 대신에 GetProductInfo()를 호출하여 값을 검색하십시오.
Perl 후크를 실행하는 동안 $session이 항상 현재 세션에 설정됩니다. 그러나 Session 또는 Entity 오브젝트 데이터에 민감한 글로벌 변수를 정의하지 않는 것이 가장 좋습니다. 대신에 글로벌 액세서 함수(예: GetUserLoginName())를 작성하여 값을 검색하십시오.
글로벌 스크립트는 다른 후크(예: 액세스 제어 후크, 초기화 후크 및 유효성 검증 후크)에서 호출할 수 있는 서브루틴의 콜렉션으로 사용됩니다. 이를 위해서, 모든 글로벌 스크립트 코드는 모든 후크 실행에 사용되는 Perl 코드의 일부로 포함됩니다. 그러나 글로벌 스크립트 코드에는 서브루틴 범위(파일 범위) 이외의 명령문이 포함될 수 있습니다.
버전 7.0.1부터는 글로벌 스크립트를 복제하는 개선된 새 Perl 후크를 사용할 수 있습니다. 개선된 이 기능을 사용할 때 Perl 후크 환경이 작성됩니다. 즉 모든 글로벌 스크립트 코드를 컴파일한 후 복제하여 새 후크 환경을 작성합니다. 복제 과정을 거치면 코드를 다시 컴파일하지 않고 후크 환경에서 구문 분석 트리를 공유할 수 있습니다. 스크립트를 복제하면 Perl 후크 환경별로 시간과 메모리가 절약되므로 성능Rational ClearQuest 웹에 대한 중요한 개선사항 포함)이 향상됩니다.
스키마 개발자는 글로벌 스크립트를 작성할 때 복제 사용 방법을 고려해야 합니다. 글로벌 후크에 복제를 사용하는 경우에는 글로벌 스크립트의 파일 범위 명령문이 한번만 실행됩니다. 실행된 결과는 후속 Perl 해석기에 복제됩니다. 복제를 사용할 수 없는 경우에는 후크 환경을 작성할 때마다 이 코드가 실행됩니다(레코드 조치별로 한 번, 레코드 스크립트 호출별로 한 번).
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 웹 다중 스레드 환경 외부에서 사용될 수 있습니다. 예를 들어,
require Win32::OLE; import Win32::OLE;글로벌 스크립트 내에서 위의 코드를 사용하여 Win32::OLE 모듈이 복제되지 않도록 막을 수 있지만 이 모듈은 Rational ClearQuest 웹에서 사용되는 스키마에서 사용될 수 없습니다.