알림 후크는 변경 세트가 데이터베이스에 확약되면 추가 조치를 트리거합니다. 예를 들면, 한 명 이상의 사용자에게 이메일 알림을 보내거나 관련 레코드를 수정할 수 있습니다. (이메일 메시지를 발송하기 위한 이메일 규칙을 작성할 수도 있습니다. 이메일 규칙 작성을 참조하십시오.)
이메일 알림 후크를 변경할 때마다 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");
}