<?xml version="1.0"?>
<feed xmlns="http://www.w3.org/2005/Atom" xml:lang="en">
	<id>https://rt-wiki.bestpractical.com/api.php?action=feedcontributions&amp;feedformat=atom&amp;user=Greatquux</id>
	<title>Request Tracker Wiki - User contributions [en]</title>
	<link rel="self" type="application/atom+xml" href="https://rt-wiki.bestpractical.com/api.php?action=feedcontributions&amp;feedformat=atom&amp;user=Greatquux"/>
	<link rel="alternate" type="text/html" href="https://rt-wiki.bestpractical.com/wiki/Special:Contributions/Greatquux"/>
	<updated>2026-08-22T23:08:51Z</updated>
	<subtitle>User contributions</subtitle>
	<generator>MediaWiki 1.41.1</generator>
	<entry>
		<id>https://rt-wiki.bestpractical.com/index.php?title=OnCreateAddGroupCc&amp;diff=27176</id>
		<title>OnCreateAddGroupCc</title>
		<link rel="alternate" type="text/html" href="https://rt-wiki.bestpractical.com/index.php?title=OnCreateAddGroupCc&amp;diff=27176"/>
		<updated>2023-07-27T19:42:34Z</updated>

		<summary type="html">&lt;p&gt;Greatquux: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;= On Create Add Group Cc =&lt;br /&gt;
&lt;br /&gt;
I needed to add several [[CCs]] at an OEM partner whenever someone from the partner opened a ticket. It would be problematic if I skipped the entire group because one of them was already a CC or requestor, so I reworked the [[OnCreateSetDeptHeadCc]] scrip to eliminate the bug mentioned therein. The solution was to refactor so that the main loop iterates through the members of the group to add, and adds them if they are not already [[CCs]] or Requestors -- instead of iterating through the CC and Requestor lists to see if any of the principals are members of the group to add.&lt;br /&gt;
&lt;br /&gt;
* &amp;lt;nowiki&amp;gt;Description: &#039;&#039;01 On Create Add Group &amp;lt;/nowiki&amp;gt;[[CCs]]&amp;lt;nowiki&amp;gt;&#039;&#039; &amp;lt;/nowiki&amp;gt;&lt;br /&gt;
* &amp;lt;nowiki&amp;gt;Condition: &#039;&#039;On Create&#039;&#039; &amp;lt;/nowiki&amp;gt;&lt;br /&gt;
* &amp;lt;nowiki&amp;gt;Action: &#039;&#039;User Defined&#039;&#039; &amp;lt;/nowiki&amp;gt;&lt;br /&gt;
* &amp;lt;nowiki&amp;gt;Template: &#039;&#039;Global template: Blank&#039;&#039; &amp;lt;/nowiki&amp;gt;&lt;br /&gt;
* &amp;lt;nowiki&amp;gt;Stage: &#039;&#039;&amp;lt;/nowiki&amp;gt;[[TransactionCreate]]&amp;lt;nowiki&amp;gt;&#039;&#039; &amp;lt;/nowiki&amp;gt;&lt;br /&gt;
&lt;br /&gt;
* Custom condition: (blank)&lt;br /&gt;
* Custom action preparation code:&lt;br /&gt;
&lt;br /&gt;
 &amp;lt;pre&amp;gt;&lt;br /&gt;
  $RT::Logger-&amp;amp;gt;debug(&amp;quot;On Create Add Group CCs: entering custom action prep&amp;quot;);&lt;br /&gt;
 my $ticket = $self-&amp;amp;gt;TicketObj;&lt;br /&gt;
 my $transaction = $self-&amp;amp;gt;TransactionObj;&lt;br /&gt;
 my $derivedGroupName = &#039;partner-OEM-CClist&#039;;&lt;br /&gt;
 &lt;br /&gt;
 # match any ticket created with a Requestor list that includes @*oem.com addresses&lt;br /&gt;
 my $OEMregex = &#039;(?i).*@oem.com[,$]|.*@[\w\-]\.oem.com[,$]&#039;;&lt;br /&gt;
 if ($ticket-&amp;amp;gt;RequestorAddresses =~ m/$OEMregex/) {&lt;br /&gt;
     $RT::Logger-&amp;amp;gt;debug(&amp;quot;On Create Add Group CC: matched an OEM address in Requestor list&amp;quot;);&lt;br /&gt;
 } else {&lt;br /&gt;
     $RT::Logger-&amp;amp;gt;debug(&amp;quot;On Create Add Group CC: no match: &#039;&amp;quot; . $ticket-&amp;amp;gt;RequestorAddresses . &amp;quot;&#039;&amp;quot;);&lt;br /&gt;
     return undef;&lt;br /&gt;
 }&lt;br /&gt;
 &lt;br /&gt;
 # instantiate a group object&lt;br /&gt;
 my $addGroupObj = RT::Group-&amp;amp;gt;new($RT::SystemUser);&lt;br /&gt;
 $addGroupObj-&amp;amp;gt;LoadUserDefinedGroup($derivedGroupName);&lt;br /&gt;
 return undef unless $addGroupObj;&lt;br /&gt;
 my $addGroupMembersObj = $addGroupObj-&amp;amp;gt;UserMembersObj;&lt;br /&gt;
 &lt;br /&gt;
 my $userObj;&lt;br /&gt;
 # walk through members of group to add; if a given member is not already on the ticket, add to the CC list&lt;br /&gt;
 while ($userObj = $addGroupMembersObj-&amp;amp;gt;Next) {&lt;br /&gt;
     if (($ticket-&amp;amp;gt;IsRequestor($userObj-&amp;amp;gt;PrincipalId)) or ($ticket-&amp;amp;gt;IsCc($userObj-&amp;amp;gt;PrincipalId))) {&lt;br /&gt;
         $RT::Logger-&amp;amp;gt;debug(&amp;quot;On Create Add Group CC: &#039;&amp;quot; . $userObj-&amp;amp;gt;Name . &amp;quot;&#039; is already a ticket watcher; not adding Cc on ticket \#&amp;quot; . $ticket-&amp;amp;gt;id );&lt;br /&gt;
     } else {&lt;br /&gt;
 	$RT::Logger-&amp;amp;gt;debug(&amp;quot;On Create Add Group CC: Adding &#039;&amp;quot; . $userObj-&amp;amp;gt;Name .&amp;quot;&#039; to ticket \#&amp;quot; .$ticket-&amp;amp;gt;id);&lt;br /&gt;
 	my ($success, $msg)= $ticket-&amp;amp;gt;AddWatcher(&lt;br /&gt;
 						  Type =&amp;amp;gt; &amp;quot;Cc&amp;quot;,&lt;br /&gt;
 						  PrincipalId =&amp;amp;gt; $userObj-&amp;amp;gt;PrincipalId);&lt;br /&gt;
 	if (! $success) {&lt;br /&gt;
 	    $RT::Logger-&amp;amp;gt;info(&amp;quot;On Create Add Group CC: couldn&#039;t add &#039;&amp;quot; . $userObj-&amp;amp;gt;Name . &amp;quot;&#039; to &amp;quot; . $ticket-&amp;amp;gt;id . &amp;quot;&#039;: got &#039;&amp;quot; . $msg .&amp;quot;&#039;&amp;quot;);&lt;br /&gt;
 	}&lt;br /&gt;
     }&lt;br /&gt;
 }&lt;br /&gt;
 return 1;&lt;br /&gt;
 &lt;br /&gt;
 &lt;br /&gt;
 &amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
* Custom action cleanup code: (blank)&lt;br /&gt;
&lt;br /&gt;
Ole Craig Fri Sep 14 17:19:00 MDT 2007&lt;br /&gt;
&lt;br /&gt;
= RT 3.8.6 =&lt;br /&gt;
&lt;br /&gt;
Worked as is - great recipe. Thanks for sharing.&lt;br /&gt;
&lt;br /&gt;
= RT 5.0.4 =&lt;br /&gt;
For some reason, surely related to regex black magic, I had to modify the regex to remove the [,$] and then it worked great:&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
my $OEMregex = &#039;(?i).*@the-domain.com|.*@[\w\-]\.the-domain.com&#039;;&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
Thanks!&lt;/div&gt;</summary>
		<author><name>Greatquux</name></author>
	</entry>
</feed>