Los enganches de notificación desencadenan acciones adicionales después de confirmar un conjunto de cambios en la base de datos. Por ejemplo, puede enviar una notificación de correo electrónico a uno o más usuarios, o modificar registros relacionados. (También puede crear una regla de correo electrónico para enviar mensajes de correo electrónico. Consulte el apartado Creating e-mail rules.)
Cada vez que realice cambios en un enganche de notificación de correo electrónico, debe detener y reiniciar el servicio de correo de Rational ClearQuest.
En el ejemplo siguiente se abre una ventana para cada campo del defecto que se ha modificado. También puede utilizar un enganche de notificación para generar un mensaje de correo electrónico y enviarlo a una lista de distribución adecuada.
Una acción que se inicia desde un enganche no desencadena una notificación a menos que la variable de sesión CQHookExecute se establezca en un valor de 1 en el script de enganche. Esta variable es un tipo de datos Long en VBScript y long scalar en 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"); }