글로벌 스크립트를 사용하여, 스키마의 후크에서 호출할 수 있는 공통 함수를 정의할 수 있습니다. 글로벌 스크립트는 서브루틴의 라이브러리와 유사합니다. Rational® ClearQuest 소프트웨어는 이 스크립트를 직접 호출하지 않습니다.
글로벌 스크립트는 동일한 후크 코드를 호출하는 레코드 유형이 여러 개인 경우에 유용합니다. 이 스크립트를 사용하여 후크 코드 유지보수를 중앙 집중화하고 후크 코드를 여러 위치에 복사할 수 있습니다. 예를 들어, Rational ClearQuest 이메일 패키지에 포함된 글로벌 스크립트에서는 하나의 글로벌 스크립트를 호출하여 여러 조치에서 알림을 송신할 수 있습니다.
글로벌 스크립트를 실행할 유일한 방법은 다른 스크립트에서 호출하는 것입니다. 그러나 궁극적으로, 글로벌 스크립트에 대한 호출은 필드 후크, 조치 후크 또는 레코드 스크립트와 같은 레코드 기반 후크에 대한 호출로 역추적해야 합니다. 글로벌 스크립트에 대한 호출은 항상 레코드 기반 후크로 추적할 수 있으므로, 각각의 글로벌 스크립트에는 호출이 시작된 레코드 기반 후크로 전달된 내재된 엔티티 오브젝트가 함께 제공됩니다.
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 Web 멀티스레드 환경 외부에서 사용할
수 있습니다. 예를 들어, require Win32::OLE; import Win32::OLE;
를 글로벌 스크립트
내에서 사용하여 Win32::OLE 모듈이 복제되지 못하게 할 수 있지만,
Rational ClearQuest
Web과 함께 사용되는 스키마에서 모듈을 사용하면 안됩니다.