Notification hooks trigger additional actions after a set of changes are committed to the database. For example, you can send an e-mail notification to one or more users or modify related records. (You can also create an e-mail rule to send e-mail messages. See Creating e-mail rules .)
You must stop and restart the Rational ClearQuest Mail Service every time you make changes to an e-mail notification hook.
The following example opens a window for each field in the defect that was modified. You might also use a notification hook to generate an e-mail message and send it to an appropriate distribution list.
An action that is initiated from a hook does not trigger a notification unless you set the session variable CQHookExecute to a value of 1 in the hook script. This variable is a Long data type in VBScript and long scalar in Perl.
Sub swbug_Notification(actionname, actiontype) ' actionname As String ' actiontype As Long ' action = modify ' Note: don't use MsgBox for web-based databases MsgBox "Modify action completed, notification hook started" fieldnames = GetFieldNames If IsArray(fieldnames) Then I = LBound(fieldnames) limit = UBound(fieldnames) + 1 ' Get three kinds of values Do While I < limit onename = fieldnames(I) Set oldinfo = GetFieldOriginalValue(onename) Set newinfo = GetFieldValue(onename) oldstat = oldinfo.GetValueStatus If oldstat = AD_HAS_NO_VALUE Then oldempty = True Else oldempty = False oldval = oldinfo.GetValue End If newstat = newinfo.GetValueStatus If newstat = AD_HAS_NO_VALUE Then newempty = True Else newempty = False newval = newinfo.GetValue End If ' Compare the values If oldstat = AD_VALUE_UNAVAILABLE Then MsgBox "Field " & onename & ": original value unknown" Else If newempty And Not oldempty Then MsgBox "Field " & onename & " had its value deleted" ElseIf oldempty And Not newempty Then MsgBox "Field " & onename & " now= " & newval ElseIf oldval <> newval Then MsgBox "Field " & onename & " was= " & oldval MsgBox "Field " & onename & " now= " & newval Else MsgBox "Field " & onename & " is unchanged" End If End If I = I + 1 Loop End If MsgBox "Modify action and notification hook completed" End Sub
sub swsub_Notification { my($actionname, $actiontype) = @_; # $actionname as string scalar # $actiontype as long scalar # action is Submit # Post-commit notifications about actions may be handled here my ($fieldnames, $session, $fieldname, $oldinfo, $newinfo, $newstat, $oldstat, $oldval, $oldempty, ); $session = $entity->GetSession(); $fieldnames = $entity->GetFieldNames(); # Get three kinds of values foreach $fieldname (@$fieldnames) { $oldinfo = $entity->GetFieldOriginalValue($fieldname); $newinfo = $entity->GetFieldValue($fieldname); $oldstat = $oldinfo->GetValueStatus(); if ($oldstat == $CQPerlExt::CQ_HAS_NO_VALUE) { $oldempty = 1; } else { $oldempty = 0; $oldval = $oldinfo->GetValue(); } $newstat = $newinfo->GetValueStatus(); if ($newstat == $CQPerlExt::CQ_HAS_NO_VALUE) { $newempty = 1; } else { $newempty = 0; $newval = $oldinfo->GetValue(); } # Compare the values if ($oldstat == $CQPerlExt::CQ_VALUE_UNAVAILABLE) { $session->OutputDebugString("Field " . $fieldname . ": original value unknown\n"); } else { if ($newempty && !$oldempty) { $session->OutputDebugString ("Field " & $fieldname . " had its value deleted\n"); } elsif ($oldempty && !$newempty) { $session->OutputDebugString ("Field " . $fieldname . " now = " . $newval. "\n"); } elsif ($oldval != $newval) { $session->OutputDebugString ("Field " . $fieldname . " was = " . $oldval. "\n"); $session->OutputDebugString ("Field " . $fieldname . " now = " . $newval. "\n"); } else { $session->OutputDebugString ("Field " . $fieldname . " is unchanged\n"); } } } $session->OutputDebugString ("Modify action & notification hook completed\n"); }