<div dir="ltr">Hi Ruslan,<div><br></div><div>Firstly, thank you!  This worked remarkably well.  I customized things a little to have it not be used unless it's the right type of notification etc but otherwise it was pretty much right on and works well.  My Scrips are all now deleted and there's just one in there now for this purpose and the template is properly selected based on the criteria used to make the $name variable.</div>

<div><br></div><div style>I have one question however…  What is the reason for the foreach loop in this code you provided.</div><div style><br></div><div style><br></div><div style><br></div></div><div class="gmail_extra">

<br><br><div class="gmail_quote">On 3 October 2013 04:27, Ruslan Zakirov <span dir="ltr"><<a href="mailto:ruz@bestpractical.com" target="_blank">ruz@bestpractical.com</a>></span> wrote:<br><blockquote class="gmail_quote" style="margin:0 0 0 .8ex;border-left:1px #ccc solid;padding-left:1ex">

<div dir="ltr">Hi,<div><br></div><div>You can do this by inserting custom TemplateObj method into RT/Action/SendMail.pm</div><div><br></div><div>It should be like this:</div><div>1) behave like original method, so copy it from lib/RT/Action.pm</div>


<div>2) change template on call when Ticket and Txn are available</div><div>3) mark that change was done</div><div><br></div><div>For example:</div><div><br></div><div>sub TemplateObj {</div><div>    my $self = shift;</div>


<div>    return $self->{TemplateObj} if !$self->{TemplateObj}</div><div>        || $self->{our_custom_code_has_made_the_change};</div><div class="im"><div><br></div><div>    my $ticket = $self->TicketObj;</div>

</div><div>    return $self->{TemplateObj} unless $ticket;</div>
<div><br></div><div>    my $orig_name = $self->{TemplateObj}->Name;</div><div><br></div><div>    my $lang = $ticket->FirstCustomFieldValue('Language');</div><div>    my $case_type = $ticket->FirstCustomFieldValue('Category');</div>


<div>    foreach my $name ("$orig_name $case_type $lang", "$orig_name $case_type $lang") {</div><div>         my $tmp = RT::Template->new( $self->CurrentUser );</div><div>         $tmp->Load( $name ); # queue should be here and fallback to global!</div>


<div>         unless ($tmp->id) {</div><div>             RT->Logger->debug("No custom template $name");</div><div>         } else {</div><div>             $self->{TemplateObj} = $tmp;</div><div>         }</div>


<div>    }</div><div>    $self->{our_custom_code_has_made_the_change} = 1;</div><div>    return $self->{TemplateObj};</div><div>}</div><div><br></div><div><br></div><div>Note that the code is not tested in any way, just typed it in mail client.</div>


</div><div class="gmail_extra"><br><br><div class="gmail_quote"><div><div class="h5">On Thu, Oct 3, 2013 at 12:59 AM, Landon Stewart <span dir="ltr"><<a href="mailto:lstewart@iweb.com" target="_blank">lstewart@iweb.com</a>></span> wrote:<br>


</div></div><blockquote class="gmail_quote" style="margin:0 0 0 .8ex;border-left:1px #ccc solid;padding-left:1ex"><div><div class="h5"><div dir="ltr">Hello,<div><br></div><div>This is not an easy issue to work out - I'm sorry for repeating this question but last time I answered myself and then realized the answer wasn't going to work out.  Anyway here goes...</div>




<div><br></div><div>I have a CF called "Classification" where we classify a ticket based on a scoring system for keywords in fields like From:, Subject: and Content of an incoming email report.  The incident report might be classified as one of "Phishing", "Open Recursive DNS" or "Malware" etc.  There are currently 12 different classifications and more may need to be added.  When opening an Investigation for an issue the CF "Classification" is used to determine the template to send to the client containing some helpful information and what is required of them.</div>




<div><div><br></div><div>Not only are we dealing with multiple templates but also each one has its own language.  English, French and Spanish.  It is very cumbersome to have 3 Scrips for each classification.</div><div>

<br></div><div><b><u>Below is 1 example for the "Open Recursive DNS" classification in all three languages and how it is dealt with currently:</u></b></div><div><br></div><div><b>Desc:</b> On Create Customer Open Recursive DNS English<br>




</div><div><b>Condition:</b> User Defined</div><div><b>Action:</b> Autoreply To Requestor</div><div><b>Template:</b> Open Recursive DNS (en)</div><div><b>Stage:</b> TransactionCreate</div><div>

<b>Custom Condition:</b><br></div><div><div>my $trans = $self->TransactionObj;</div><div>my $ticket = $self->TicketObj;</div><div>return 0 unless $trans->Type eq "Create";</div><div>return 0 unless $ticket->FirstCustomFieldValue('Classification') eq "Open Recursive DNS";<br>




</div><div>## If English or no language choose English below...<br></div><div>if ($ticket->FirstCustomFieldValue('PreferredLanguage') eq 'English' || $ticket->FirstCustomFieldValue('PreferredLanguage') eq "") {</div>




<div><br></div><div>    return 1;</div><div>}</div><div><br></div><div><div><b>Desc:</b> On Create Customer Open Recursive DNS French<br></div><div><b>Condition:</b> User Defined</div><div><b>Action:</b> Autoreply To Requestor</div>




<div><b>Template:</b> Open Recursive DNS (fr)</div><div><b>Stage:</b> TransactionCreate</div><div><b>Custom Condition:</b><br></div><div><div>my $trans = $self->TransactionObj;</div><div>my $ticket = $self->TicketObj;</div>




<div>return 0 unless $trans->Type eq "Create";</div><div>return 0 unless $ticket->FirstCustomFieldValue('Classification') eq "Open Recursive DNS";<br></div><div>if ($ticket->FirstCustomFieldValue('PreferredLanguage') eq 'French') {</div>




<div>    return 1;</div><div>}</div></div></div><div><br></div><div><div><b>Desc:</b> On Create Customer Open Recursive DNS Spanish<br></div><div><b>Condition:</b> User Defined</div><div><b>Action:</b> Autoreply To Requestor</div>




<div><b>Template:</b> Open Recursive DNS (es)</div><div><b>Stage:</b> TransactionCreate</div><div><b>Custom Condition:</b><br></div><div><div>my $trans = $self->TransactionObj;</div><div>my $ticket = $self->TicketObj;</div>




<div>return 0 unless $trans->Type eq "Create";</div><div>return 0 unless $ticket->FirstCustomFieldValue('Classification') eq "Open Recursive DNS";<br></div><div>if ($ticket->FirstCustomFieldValue('PreferredLanguage') eq 'Spanish') {</div>




<div>    return 1;</div><div>}</div></div></div><div><br></div><div>"OK!?  So what's the problem?" you might ask…</div><div><br></div><div>Can anyone tell me how to roll this into one Scrip without making the templates themselves a mess of spaghetti code?</div>




<div><br></div><div><u><b>Pseudo code might be:</b></u></div></div><div><div><b>Desc:</b> On Create Customer Open Recursive DNS<br></div><div><b>Condition:</b> User Defined</div><div><b>Action:</b> Autoreply To Requestor</div>




<div><b>Template:</b> Global template: Blank</div><div><b>Stage:</b> TransactionCreate</div><div><b>Fake Code Custom Condition:</b><br></div><div><div>my $trans = $self->TransactionObj;</div><div>my $ticket = $self->TicketObj;</div>




<div>return 0 unless $trans->Type eq "Create";</div><div>my $class = $self->FirstCustomFieldValue('Classification');</div><div>my $lang = $ticket->FirstCustomFieldValue('PreferredLanguage');</div>




<div>my $template = $class." (".$lang.")";                                           ## Eg: Open Recursive DNS (French)</div><div>if (SetTheTemplateTo($template)) {<br></div><div>  return 1;</div>

<div>}</div><div>return 0;</div><div><br></div></div></div><div>I know SetTheTemplateTo() is not a real function… But that's what I want to work out how to do.  Basically override or supplement the template set on the Scrip form.</div>


<span><font color="#888888">

<div><br></div><div><br></div>-- <br><div dir="ltr"><div><span style="font-family:arial;font-size:small">Landon Stewart :: </span><a href="mailto:lstewart@iweb.com" style="font-family:arial;font-size:small" target="_blank">lstewart@iweb.com</a><br>




</div><span style="font-family:arial;font-size:small">Lead Specialist, Abuse and Security Management</span><br style="font-family:arial;font-size:small"><span style="font-family:arial;font-size:small">Spécialiste principal, gestion des abus et sécurité</span><br style="font-family:arial;font-size:small">




<span style="font-family:arial;font-size:small"><a href="http://iweb.com" target="_blank">http://iweb.com</a> :: <a href="tel:%2B1%20%28888%29%20909-4932" value="+18889094932" target="_blank">+1 (888) 909-4932</a></span><br>

<div><span style="font-family:arial;font-size:small"><br></span></div><div><span style="font-family:arial;font-size:small"><br>


</span></div></div>
</font></span></div></div>
<br><br></div></div><span class="HOEnZb"><font color="#888888">
--<br>
RT Training in New York, October 8th and 9th: <a href="http://bestpractical.com/training" target="_blank">http://bestpractical.com/training</a><br></font></span></blockquote></div><span class="HOEnZb"><font color="#888888"><br>

<br clear="all"><div><br></div>-- <br>Best regards, Ruslan.
</font></span></div>
</blockquote></div><br><br clear="all"><div><br></div>-- <br><div dir="ltr"><div><span style="font-family:arial;font-size:small">Landon Stewart :: </span><a href="mailto:lstewart@iweb.com" style="font-family:arial;font-size:small" target="_blank">lstewart@iweb.com</a><br>

</div><span style="font-family:arial;font-size:small">Lead Specialist, Abuse and Security Management</span><br style="font-family:arial;font-size:small"><span style="font-family:arial;font-size:small">Spécialiste principal, gestion des abus et sécurité</span><br style="font-family:arial;font-size:small">

<span style="font-family:arial;font-size:small"><a href="http://iweb.com" target="_blank">http://iweb.com</a> :: +1 (888) 909-4932</span><br><div><span style="font-family:arial;font-size:small"><br></span></div><div><span style="font-family:arial;font-size:small"><br>

</span></div></div>
</div>