Notification Examples

From cqwiki
Revision as of 04:11, 11 December 2008 by Paul (talk | contribs)
(diff) ← Older revision | Latest revision (diff) | Newer revision → (diff)
Jump to navigationJump to search
Examples

Defect state updates

Send notification to submitter ('Submitter' CQ field - reference to users) when Defect is postponed (with action postpone), rejected (with action reject) or closed (action close).
Do not send notification if submitter is the same user that perform action to avoid email flooding.
We have to test notification rule in test database and migrate it to production without changes (database name in http link should be updated automatically).

lets define two functions in database properties:
udb_property records:

Name
nm_value
GetUserLoginName
  return $session->GetUserLoginName();
GetCurrentDatabaseName
  my $dbname = $session->GetSessionDatabase()->GetDatabaseName();
  return $dbname;


Email_Notification_Rule fields:

Form Field Name
(CQ field name)
Value
Name
(name)
State change submitter notification (any unique name)
Record Type
(Entity_Def)
Defect
Actions
(actions)
Postpone
Reject
Close
Condition
(Msg_Condition)
GetUserLoginName() ne $Submitter
To
(Msg_To_Users)
$Submitter.email
Subject
(Msg_Subject)
Your Defect '$ID' has been ${state}.
Body
(Msg_Body)
Your Defect '$ID' has been ${state}.
Defect title: '$Headline'

http://newcqweb-server/cqweb/main?USE_CASE=GO&service=CQ&schema=DBSET&contextid=GetCurrentDatabaseName()&entityID=${dbid}&entityDefName=Defect


Subject will be evaluated when email notification is triggered, for example:
"Your Defect 'SAMPL00000001' has been Rejected."
We use ${State} notation for state field to avoid ambiguity, because it is followed by '.' (valid symbol for variable name).


Using SQL query

Send notification to clearquest user group 'CCB_Approvers' and submitter when request been resolved

Form Field Name
(CQ field name)
Value
Name
(name)
Resolution Notification (any unique name)
Record Type
(Entity_Def)
Defect
Actions
(actions)
Resolve
To
(Msg_To_Users)
$Submitter.email
SQL("SELECT T2.email
FROM parent_child_links T1, groups T3, users T2
WHERE T1.parent_dbid = T2.dbid
AND T1.child_dbid = T3.dbid
AND T3.name = 'CCB_Approvers'
AND T2.is_active = 1")
Subject
(Msg_Subject)
Defect '$ID' has been resolved. Resolution '$Resolution'
Body
(Msg_Body)
Defect '$ID' has been resolved.
Defect title: '$Headline'
Resolution: '$Resolution'
Description:
$Description

http://newcqweb-server/cqweb/main?USE_CASE=GO&service=CQ&schema=DBSET&contextid=GetCurrentDatabaseName()&entityID=${dbid}&entityDefName=Defect


You can also create reusable function and put it into properties
udb_property record

Name
nm_value
GetGroupEmailAddresses
  my ($groupname) = @_;
  my $return_string;

  # SQL statement
  my $result_set = $session->BuildSQLQuery(
    "SELECT  T2.email
       FROM  parent_child_links T1, groups T3, users T2
       WHERE T1.parent_dbid = T2.dbid
         AND T1.child_dbid = T3.dbid
         AND T3.name = '$groupname'
         AND T2.is_active = 1");

  $result_set->Execute();
  # fetch email addresses
  while( $result_set->MoveNext() == $CQPerlExt::CQ_SUCCESS ){
    my $tmp_str = $result_set->GetColumnValue(1);
    $return_string .= "$tmp_str\n";
  }
  # clear 'errors'
  $result_set = undef;
  $@ = '';

  return $return_string;


In this case 'To' field in Notification rule could be changed to:

Form Field Name
(CQ field name)
Value
To
(Msg_To_Users)
$Submitter.email
GetGroupEmailAddresses( 'CCB_Approvers' )



SQL query and dynamically assigned message priority

To simplify defect management, we use assignment or functional group idea.
Defect submitters do not know who is responsible for particular feature, but can guess, what functional area is.
Submitter needs to select Assignment group only.
We need to notify Assignment group manager(s) about new defect assigned to group.
If defect Severity is '1-Critical' or Priority is '1-Resolve Immediately', email message has to be flagged as 'High Priority'.

Possible AssignmentGroups stateless record type implementation:

Name SHORT_STRING
Unique group name
Managers
REFERENCE to users
group managers
Users
REFERENCE to users group members
Active INT
obsolete groups marked as '0', valid groups as '1'


Defect record type has Assigned_To_Group field (reference to AssignmentGroups).

Form Field Name
(CQ field name)
Value
Name
(name)
Notify Group Managers (any unique name)
Record Type
(Entity_Def)
Defect
Field Change
(Field_Change)
Assigned_To_Group
Priority
(Msg_Priority)
$Priority =~ /^1/ || $Severity =~ /^1/
To
(Msg_To_Users)
SQL("SELECT T3.email
FROM parent_child_links T1, fielddef T2, users T3, assignmentgroups T4
WHERE T1.parent_dbid = T4.dbid
AND T1.child_dbid = T3.dbid
AND T1.parent_fielddef_id = T2.id
AND T2.name = 'Managers'
AND T4.name = '${Assigned_To_Group}' ")
Subject
(Msg_Subject)
Defect '$ID' with severity: '$Severity' and priority: '$Priority' has been assigned to your team. Please assign it to somebody in your team.
Body
(Msg_Body)
Defect '$ID' has been assigned to your team.
Please assign Defect to somebody in your team or re-assign it to another team if initial assignment was incorrect.

Defect title: '$Headline'
Severity: '$Severity'
Priority: '$Priority'
Description:
$Description

http://newcqweb-server/cqweb/main?USE_CASE=GO&service=CQ&schema=DBSET&contextid=GetCurrentDatabaseName()&entityID=${dbid}&entityDefName=Defect




Using original field value

Notify assignee that defect priority assigned to him has been raised. Valid priorities are '1- something', '2 - something', etc. That simplifies comparison.
Lets create user-defined function that retrieves previous value for field.
udb_property record

Name
nm_value
GetFieldOriginalValue
  my $name = shift;
  my $value = '' ;
  eval {
    $value = $entity->GetFieldOriginalValue($name)->GetValue();
  };
  $@ = '';
  return $value;


Notification rule:

Form Field Name
(CQ field name)
Value
Name
(name)
Priority has been raised - notify assignee
Record Type
(Entity_Def)
Defect
Field Change
(Field_Change)
Priority
Condition
(Msg_Condition)
$Priority gt GetFieldOriginalValue('Priority')
To
(Msg_To_Users)
$owner.email
Subject
(Msg_Subject)
Priority has been raised for defect '$ID' from 'GetFieldOriginalValue('Priority')' to '$Priority'
Body
(Msg_Body)
Priority has been raised for defect '$ID' from 'GetFieldOriginalValue('Priority')' to '$Priority'

Defect title: '$Headline'
Severity: '$Severity'
Priority: '$Priority'
Description:
$Description

http://newcqweb-server/cqweb/main?USE_CASE=GO&service=CQ&schema=DBSET&contextid=GetCurrentDatabaseName()&entityID=${dbid}&entityDefName=Defect