Using CAL methods in Rational ClearQuest hook scripts

This section shows how to include CAL (ClearCase Automation Library) methods in hook scripts to customize the behavior of the Rational ClearQuest integration with UCM.

This example is a modified version of the UCM_CQActBeforeChact Visual Basic script, which implements the Perform ClearQuest Action Before Changing Activity policy. When this policy is set, the integration executes the script when a developer initiates a Finish Activity operation, either from the GUI or by entering the command cleartool chactivity -cqact.

The modified script uses CAL methods to determine whether the developer is working in a single-stream project or a multiple-stream project. If the developer is working in a single-stream project, the script allows the Finish Activity operation. Otherwise, the script returns an error message and cancels the Finish Activity operation.

VBScript

REM Start of Global Script UCM_CQActBeforeChact

Function UCM_CQActBeforeChact (entity_type, entity_id, project_info, stream_info)

' This is the script that implements the "Perform Action Before
' Changing Activity" policy. When initially installed, it invokes a 
' default script. If users want to customize this policy, they should
' edit this script to use their code rather than invoking the default
' script. The default script code can be used as an example.
'
' INPUT:
' - entity_type: name of the type of entity on which action 
'                will be executed (for example, "defect")
' - entity_id: id (e.g. "SAMPL0000001") of entity on which action will
'              be executed

' OUTPUT:
' - If the action was successfully executed, this must return an empty
' string

' - If the action was not successfully executed, this must return a
' string to be displayed as an error message.

' Allow chact only if activity is in a single stream project

proj_model = "DEFAULT"

' Get hook's session context

Set session = GetSession()

' Get the entity

Set entity = session.GetEntity(entity_type, entity_id)

' Get the entity's ucm_vob_object field value. This value is a string
' that includes the UCM project's object ID and the PVOB's UUID. 

ucm_vob_object = entity.GetFieldValue("ucm_vob_object").GetValue()

Dim pvob_uuid

' Strip the project's object ID from the string and return the PVOB's
' UUID.

pvob_uuid = Right(ucm_vob_object, 40)

' Initialize ClearCase.Application COM object

' Create a ClearCase application object. A ClearCase application
' object must exist before you can use CAL methods. The remaining
' steps in the script use CAL methods.

On Error Resume Next

Set CC = CreateObject("ClearCase.Application")

If Err.Number <> 0 Then
   MsgBox "ClearCase.Application Error 1:" & Err.Description
End if

On Error Resume Next

' Using the PVOB's UUID, get a ClearCase PVOB object of the activity.
Set PVOB = CC.ProjectVOB(pvob_uuid)

If Err.Number <> 0 Then
   MsgBox "ClearCase.Application Error 2:" & Err.Description
End if

On Error Resume Next

' Create a ClearCase activity object (CCActivity) based on the PVOB and
' entity ID (equals UCM activity name).

Set Act = PVOB.Activity(entity_id)

If Err.Number <> 0 Then
   MsgBox "ClearCase.Application Error 3:" & Err.Description
End if

On Error Resume Next

' Return the stream in which the activity was created.
set stream = Act.Stream

If Err.Number <> 0 Then
   MsgBox "ClearCase.Application Error 4:" & Err.Description
End if

On Error Resume Next

' Return the project that contains the stream.
set project = stream.Project

If Err.Number <> 0 Then
  MsgBox "ClearCase.Application Error 5:" & Err.Description
End if

On Error Resume Next

' Return the project model.
proj_model = project.Model

If Err.Number <> 0 Then
   MsgBox "ClearCase.Application Error 6:" & Err.Description
End if

' Test the value of the project model.
' model = SIMPLE: single stream project

' If it is SIMPLE, meaning single-stream, the script returns an 
' empty string and the developer is allowed to complete the Finish 

' Activity operation.

' model = DEFAULT: hierarchical project

' If it is DEFAULT, meaning multiple-stream, the script returns an 
' error message and cancels the Finish Activity operation.

If proj_model = "SIMPLE" Then
' single stream model, allow change act
   UCM_CQActBeforeChact = ""
Else
' hierarchical project, fail
UCM_CQActBeforeChact = "Must be in a single stream project."
End if   

End Function

REM End of Global Script UCM_CQActBeforeChact 

Commentaires