Scan-and-set
Jump to navigation
Jump to search
#!/usr/bin/perl -w # # Sample script to scan RT ticket attachments for a 4 digit number # following the string "important number" and add the value to # a custom field called "CustomField" # # It's an example of scanning attachchments and setting a custom field # from an external Perl script # # author rmeden@yahoo.com # use strict; use lib ("/path/to/rt/lib"); # Change this to your RT lib path! use RT::Interface::CLI qw(CleanEnv GetCurrentUser GetMessageContent loc); use RT::Tickets; select STDERR; $|=1; select STDOUT; $|=1; # Clean our environment CleanEnv(); # Load the RT configuration RT::LoadConfig(); RT::Init(); my $tickets = new RT::Tickets($RT::SystemUser); # Used to store Ticket search results $tickets->LimitStatus(VALUE => 'new'); $tickets->LimitStatus(VALUE => 'open'); $tickets->LimitCustomField(CUSTOMFIELD => 'CustomField', OPERATOR => "is", VALUE => "NULL"); # Loop through tickets while (my $Ticket = $tickets->Next) { my $NUM=""; # # Scan attachments and keep latest value # my $txns = $Ticket->Transactions; while (my $txn = $txns->Next ) { my $attachments = RT::Attachments->new($txn->CurrentUser); $attachments->Limit( FIELD => 'TransactionID', VALUE => $txn->id ); $attachments->OrderBy( FIELD => 'Id', ORDER => 'ASC' ); while ( my $a = $attachments->Next ) { next unless $a->ContentEncoding eq "none"; $NUM=$1 if $a->Content =~ /important number (\d{4})/m; } } next unless $NUM; # nothing found? printf "Setting Ticket %d Important Number %d\n",$Ticket->id,$NUM; $Ticket->AddCustomFieldValue(Field=>"CustomField",Value=>$NUM,RecordTransaction=>0); } # Ticket loop $RT::Handle->Disconnect(); exit;