Using CAL methods in HCL Compass hook scripts

This section shows how to include CAL (VersionVault Automation Library) methods in hook scripts to customize the behavior of the HCL Compass integration with UCM.

This example is a modified version of the UCM_CQActBeforeChact Visual Basic script, which implements the Perform HCL Compass 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 VersionVault.Application COM object

' Create a VersionVault application object. A VersionVault 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("VersionVault.Application")

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

On Error Resume Next

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

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

On Error Resume Next

' Create a VersionVault 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 "VersionVault.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 "VersionVault.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 "VersionVault.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 "VersionVault.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