Action notification hook example

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.

VBScript

 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 

 

Perl

 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"); 

 

 } 

 


Feedback