[rt-users] Custom Scrip | AutoAssign Code Sample

Ken Bantoft ken at freeswan.ca
Mon Sep 8 14:57:57 EDT 2003


On Mon, 8 Sep 2003, Daryl G. Jurbala wrote:

> > -----Original Message-----
> > From: Gary Rule [mailto:grule at bbn.com] 
> > Sent: Monday, September 08, 2003 2:03 PM
> > To: rt-users at lists.fsck.com
> > Subject: [rt-users] Custom Scrip
> > 
> > 
> > Hello,
> >      I'm looking for either a scrip to notify a particular 
> > email address when a new ticket his the queue or a good place 
> > with documentation on how to write custom scrips. 
> > 
> > 
> > Basically I want an email to go to our department email list 
> > when a new ticket is generated. I'm assuming to write this 
> > myself I will need to whip up some perl but I'm not sure how 
> > involved it will be. Are there any resources out there for 
> > beginning scrip writers?
> [...]
> 
> I recently asked a similar question (except I want to send a stipped
> down template to a pager's email address) and it was suggested that I
> use AdminCC.  For me, that won't work, as I'm using both CC's and
> AdminCC's for other purposes.
> 
> Hopefully someone can answer this question....I'm sure more than just
> the two of us could use this information.
> 
> Daryl

I won't directly answer it, but I'll post some code that should do the 
trick with some modifications.

---
Problem: I needed to autoassign tickets to individuals based on a 
CustomField (eg: Server, Desktop, VPN, Phone System, etc...).  So I wrote 
this... it seems to work okay for us on 3 queues.  RT 3.0.3

Description:  AutoAssign
Condition: On Create
Custom Condition: 
Action: User Defined

Custom action preparation code:
my $retval = undef;
if ( defined( $self->TicketObj->OwnerObj->id ) ){
    # Only change tickets where ID is *not* already set - eg: New Tickets
    if( $self->TicketObj->OwnerObj->Id == $RT::Nobody->Id ){
        $RT::Logger->info("AutoAssign: New Ticket with no owner - Autoassigning");
	$retval = 1;
    }
}
return ($retval);


Custom action cleanup code:

use RT::Ticket;
use RT::User;
use RT::CustomField;
use RT::AutoAssign;

my $retval = undef;

my $handle = DBIx::SearchBuilder::Handle->new();

# Change to your DB info.  Should probably rewrite to pull from 
# RT_SiteConfig.pm - patches welcome.
$handle->Connect( 'Driver' => 'mysql','Database' => 'rt3', 
'Host' => 'localhost', 'User' => 'rt_user','Password' => 'rt_pass');


my $s = new AutoAssign($handle);

# Get the list of Custom Fields
my $CustomFields = $self->TicketObj->QueueObj->CustomFields();

# Use the 1st field for our purposes
my $CustomField = $CustomFields->Next();

# List of *value* of the custom field.
my $Values  = $self->TicketObj->CustomFieldValues($CustomField->id);

# List of valid values for this custom field
my $CustomFieldValues = $CustomField->Values();

my $assigned = 0;
# Cycle through possible values...
while (my $value = $CustomFieldValues->Next) {
        # If we match up...
        if ($Values->HasEntry($value->Name)) {
                # Do stuff
                my $name = $value->Name;
                my $id = $value->id;
                $s->LoadByCol('SubQueueid', $id);
                $retval = $self->TicketObj->SetOwner($s->Userid());
                $RT::Logger->info("AutoAssign: Result code is $retval");
                $assigned = 1;
        }
}
if ($assigned != 1) {
        # AutoAssign to dlaskey (67) for no match
        $retval = $self->TicketObj->SetOwner(67);
        $RT::Logger->info("AutoAssign: Result code is $retval");
}

                                        
return ($retval);


Template: Global Template: Blank

---
I've got a module (AutoAssign.pm) defined to describe the table I used, 
which is basically just Users.id -> CustomFieldValues.id mapping.  Email 
me if you want/need a copy - it's a bit uglier that I'd like to admit :)

For your needs, just change the CleanUp Code to like:

$retval = $self->TicketObj->AddWatcher(Type => 'Cc', Email => 'user at host.com')

Or if, as you indicated you can't use the AdminCCm and just want a one-off 
email, then:

use RT::Action::SendEmail;

and then run perldoc /opt/rt3/lib/RT/Actions/SendEmail.pm to see the 
functions to set the To/CC/Subject/Content etc...


Ken





More information about the rt-users mailing list