알림 후크는 변경 세트가 데이터베이스에 커미트되면 추가 조치를 트리거합니다. 예를 들어, 한 명 이상의 사용자에게 이메일 알림을 보내거나 관련 레코드를 수정할 수 있습니다. (이메일 메시지를 발송하기 위한 이메일 규칙을 작성할 수도 있습니다. 이메일 규칙 작성의 내용을 참조하십시오.)
이메일 알림 후크를 변경할 때마다 Rational ClearQuest Mail Service를 중지한 다음 다시 시작해야 합니다.
다음 예제는 수정된 결함의 각 필드 창을 엽니다. 또한 알림 후크를 사용하여 이메일 메시지를 생성하여 적절한 분배 목록으로 보낼 수도 있습니다.
후크에서 시작된 조치는 후크 스크립트의 CQHookExecute 세션 변수를 1 값으로 설정한 경우 알림을 트리거합니다. 이 변수의 데이터 유형은 VBScript의 경우 Long이고 Perl의 경우 long scalar입니다.
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");
}