Ejemplo de enganche de notificación de acción

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 Creación de reglas de correo electrónico.)

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.

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