후크는 지정된 시간에 사용자가 Rational® ClearQuest 환경에서 작업을 수행하는 방법을 제어하기 위해 실행되는 스크립트의 시작점으로 트리거와 유사합니다.
후크는 수퍼유저 권한으로 실행되므로 일반 액세스 제어나 필드 동작 제한의 적용을 받지 않습니다. 후크를 사용하여 일반적으로 읽기 전용 상태인 필드에서 값을 설정하고 다시 설정할 수 있습니다.(히스토리 필드와 같은 시스템 필드는 다시 설정할 수 없습니다.) 필수 필드는 필수 상태를 계속 유지합니다. 자세한 정보는 IBM Rational ClearQuest API 참조서 및 조치 및 액세스 제어를 참조하십시오.
네 가지 유형의 후크가 지원됩니다.
필드 후크는 런타임에서 필드 값을 확인하고 필요에 따라 다른 필드를 조정하는 방법을 제공합니다. 예를 들어, 필드 컨텐츠의 유효성을 검증하고 기본값으로 지정할 수 있습니다.
조치 후크는 레코드 라이프사이클에서 중요한 시점에 태스크를 수행하는 방법을 제공합니다. 일반적으로 조치 후크는 전체 레코드에 영향을 주는 이벤트와 연관됩니다. 예를 들어, 전체 레코드의 유효성을 검증하고 조치가 완료되면 알림을 보낼 수 있습니다.
레코드 스크립트는 런타임에서 특정 태스크를 수행하는 방법을 제공합니다. 레코드 스크립트는 레코드 유형에 따라 다르며 일반적으로 양식 제어 도구와 연관됩니다.
글로벌 스크립트는 스키마의 모든 레코드 유형이 공유할 수 있는 루틴의 라이브러리를 정의하는 방법을 제공합니다. 예를 들어, 이메일 알림과 같이 레코드 유형과 후크에 관계 없이 호출할 수 있는 서브루틴을 작성할 수 있습니다.
후크는 VBScript(Windows)와 Perl(UNIX 시스템 및 Windows)로 작성할 수 있습니다. 후크는 기본적으로 Windows에서 VBScript로 실행됩니다. Windows에서 Perl로 후크를 실행하는 방법에 대한 정보는 스크립팅 언어를 참조하십시오.
필드 및 조치 후크에 VBScript 또는 Perl로 작성된 스크립트를 추가할 수 있습니다. 글로벌 스크립트 또는 레코드 스크립트를 작성하는 경우, VBScript 또는 Perl을 사용해야 합니다.
저장 및 참조를 용이하게 하기 위해 동일한 스키마에 VBScript 및 Perl 스크립트를 모두 작성할 수 있습니다. 단, 스키마는 해당 스키마에 지정된 언어로만 스크립트를 실행합니다. 자세한 정보는 스크립팅 언어를 참조하십시오.
스크립트 편집기로 스크립트를 작성하거나 편집하십시오. 새 스크립트를 정의하는 경우, 디자이너는 해당 후크의 호출 구문을 스크립트 편집기 창에 추가합니다. 호출 구문은 편집할 수 없습니다. 디자이너는 또한 필요에 따라 편집할 수 있는 샘플 본문 텍스트를 추가합니다.(이 초기 본문 텍스트에는 주석 표시가 추가되며 해당 주석 마커를 제거해야 실행됩니다.)
디자이너는 VBScript와 Perl에 다른 스크립트 편집기를 제공하며 창의 제목 표시줄에 편집기 유형을 표시합니다. 코드를 작성하기 전에 올바른 편집기인지 확인하십시오.
오퍼레이션 컨텍스트가 일치하므로 VBScript 및 Perl 후크 작성 프로세스는 단순화됩니다. 후크에서 VBScript 또는 Perl 스크립트를 호출하기 전에 Rational ClearQuest 소프트웨어에서는 세션 오브젝트를 작성하고 사용자에 로그인합니다. 글로벌 스크립트를 포함하는 모든 후크는 현재 레코드의 컨텍스트에서 실행되므로 해당 레코드에 해당하는 Entity 오브젝트를 제공합니다.(글로벌 스크립트는 호출한 후크와 연관된 Entity 오브젝트를 공유합니다).
스크립트에서 선행 ID를 지정하지 않고 Entity 메소드를 호출할 수 있습니다. 예를 들어, 다음과 같은 방법으로 Entity의 GetSession 메소드 호출할 수 있습니다.
set curSession = GetSession
메소드를 이런 방식으로 호출하면 Rational ClearQuest 소프트웨어에서 후크로 전달된 내재적 Entity 오브젝트 메소드를 호출하는 것으로 가정합니다. 이 Entity 오브젝트를 명시적으로 참조하려면 레코드 유형의 이름을 오브젝트의 ID로 사용할 수 있습니다. 이 ID를 사용하면 다음 예제와 같이 한 번에 여러 Entity 오브젝트를 오퍼레이션하는 코드를 명시하여 하나의 엔티티를 다른 엔티티의 중복 엔티티로 표시할 수 있습니다.
set curSession = GetSession
idName = GetFieldValue("id").GetValue
set currentObj = curSession.GetEntity("defect", idName)
' Mark the entity with ID="SAMPL00000031" as a duplicate of this entity.
' Use the action named "duplicate".
set dupEntityObj = curSession.GetEntity("defect", "SAMPL00000031")
curSession.MarkEntityAsDuplicate dupEntityObj, currentObj, "duplicate"
스크립트는 필드 동작에 영향을 줄 수 있으므로 후크 코드를 주의 깊게 디자인하고 테스트하십시오. 예를 들어, 후크에서 필드에 특정 값이 필요한 경우, 해당 동작을 MANDATORY로 설정하지 않아도 해당 필드가 필수로 됩니다.
후크 코드를 올바르게 작성하지 않으면 런타임에서 포착하기 어려운 오류가 발생할 수 있습니다. 스키마의 유효성을 검증할 때 후크가 컴파일되어 구문 또는 문법 오류가 표시됩니다. 스키마를 체크인하기 전에 테스트 데이터베이스로 스키마를 테스트하고 스키마 변경사항을 적용하기 전에 사용자 데이터베이스를 백업하십시오. 자세한 정보는 테스트 데이터베이스로 스키마 테스트를 참조하십시오.
후크 계획 시 다음 문제를 고려하십시오.
복제된 환경에서 실행되는 후크와 관련된 여러 문제는 단일 사이트 데이터베이스 잠금 문제와 같습니다. 후크의 기능 테스트도 단일 사이트 또는 복제 환경에서와 같습니다. 그러나 복제된 환경에서 몇몇 ClearQuest 후크의 실행 방식이 단일 사이트 환경에서와 다를 수 있습니다. 예를 들어, 다른 레코드가 현재 사이트에서 마스터되지 않아 수정 가능하지 않은 경우 레코드 조치 컨텍스트에서 다른 레코드를 업데이트하는 후크에 오류가 발생할 수 있습니다.
각 데이터베이스 레코드는 현재 마스터된 사이트에서만 업데이트될 수 있습니다(레코드의 ratl_mastership 필드에서 복제 사이트 이름으로 표시됨). 복합 애플리케이션에서 여러 레코드가 하나의 복합 트랜잭션의 일부로 업데이트될 수 있습니다. 복제 환경의 후크를 디자인 및 테스트할 때 해당 원칙을 고려해야 합니다.
레코드 잠금 및 스키마 유효성 검증을 참조하십시오.
패키지를 설치하면 필드 후크 또는 레코드 스크립트가 스키마에 추가됩니다. 이러한 스크립트는 후크 코드의 일부가 아닌 패키지의 일부입니다.
패키지 소유 스크립트를 삭제하거나 수정할 수 없습니다. 이 스크립트는 스키마가 소유한 코드의 파트가 아닙니다. 따라서 후크 코드로 선택한 기본 언어 설정과 패키지 소유의 후크가 구현되는 언어 사이에는 아무런 관계가 없습니다.