Gli hook di notifica avviano ulteriori operazioni dopo l'esecuzione del commit di una serie di modifiche sul database. Ad esempio, è possibile inviare una notifica di e-mail a uno o più utenti o modificare i record correlati. (È inoltre possibile creare una regola e-mail che permette di inviare messaggi e-mail. Consultare Creazione di regole e-mail .)
È necessario arrestare e riavviare Rational ClearQuest Mail Service ogni volta che si apportano modifiche a un hook della notifica e-mail.
Il seguente esempio apre una finestra per ogni campo nel difetto modificato. È inoltre possibile utilizzare un hook di notifica per generare un messaggio e-mail e inviarlo ad un elenco di distribuzione appropriato.
Un'azione inizializzata da un hook non avvia una notifica se non impostando la variabile di sessione CQHookExecute sul valore 1 nello script hook. Questa variabile è un tipo di dati Long in VBScript e 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"); }