[rt-users] RT 4.0.2: Custom Condition Fails

Ryan Frantz ryanfrantz at informed-llc.com
Thu Oct 13 22:35:40 EDT 2011



List, 



I recently created a custom condition to match tickets created after hours so that I could use it in a scrip to send a copy of the ticket information to the on-call Support Desk tech.  I first tested it successfully on an old RT 3.8.8 installation and then started testing it in my RT 4.0.2 installation.  I get the following error: 



Oct 13 22:20:57 rt2 RT: Scrip IsApplicable 14 died. - Can't locate object method "new" via package "RT::Condition::OnAfterHoursCreate" at /usr/local/rt/sbin/../lib/RT/ScripCondition.pm line 173.  Stack:   [/usr/local/rt/sbin/../lib/RT/ScripCondition.pm:173]   [/usr/local/rt/sbin/../lib/RT/Scrip.pm:404]   [/usr/local/rt/sbin/../lib/RT/Scrips.pm:225]   [/usr/local/rt/sbin/../lib/RT/Transaction.pm:179]   [/usr/local/rt/sbin/../lib/RT/Record.pm:1447]   [/usr/local/rt/sbin/../lib/RT/Ticket.pm:669]   [/usr/local/rt/sbin/../lib/RT/Interface/Web.pm:1389]   [/usr/local/rt/share/html/Ticket/Display.html:127]   [/usr/local/rt/share/html/Ticket/Create.html:444]   [/usr/local/rt/sbin/../lib/RT/Interface/Web.pm:538]   [/usr/local/rt/sbin/../lib/RT/Interface/Web.pm:285]   [/usr/local/rt/share/html/autohandler:53] (/usr/local/rt/sbin/../lib/RT/Scrip.pm:419) 

The name of the custom condition is OnAfterHoursCreate and it is located under <myRtRoot>/local/lib/RT/Condition/.  What's odd is that when I look at the system condition modules, I don't see a new() method defined so I'm not sure why this error is occuring for me.  For reference, this is the code for the custom condition: 



package RT::Condition::OnAfterHoursCreate; 



use warnings; 
use strict; 

use base 'RT::Condition'; 



sub IsApplicable { 

        my $self = shift; 

        my $weekday = (localtime)[6]; 
        my $min = (localtime)[1]; 
        my $hour = (localtime)[2]; 

        return 1 if $weekday == 6 || $weekday == 0; 
        return 1 if $hour >= 17 || ( $hour <= 8 && $min <= 29); 

        return 0;       # no match 

} 

1; 


I used the following Perl script to register the condition within RT: 



#!/usr/bin/perl 

use strict; 

use lib "/usr/local/rt/lib"; 



use RT; 

use RT::Interface::CLI qw( CleanEnv GetCurrentUser ); 

use RT::ScripCondition; 

CleanEnv(); 

RT::LoadConfig(); 

RT::Init(); 



my $user = GetCurrentUser(); 

unless( $user->Id ) { 

    print "No RT user found. Please consult your RT administrator.\n"; 

    exit 1; 

} 



my $sc = RT::ScripCondition->new($user); 

$sc->Create( Name                 => 'On After Hours Create', 

             Description          => 'A ticket is created after hours', 

             ExecModule           => 'OnAfterHoursCreate', 

             ApplicableTransTypes => 'Create', 

           ); 


I built the custom condition and registration code from an example I found in the 'RT Essentials' book published by O'Reilly.  In fact, it's a 99% lift from that book.  The only difference I noted that was required for custom conditions in RT 4 was the need to change "use base 'RT::Condition:Generic';" to "use base 'RT::Condition';". 



Am I missing something in general?  Or am I missing something specific to RT 4? 



Ryan
-------------- next part --------------
An HTML attachment was scrubbed...
URL: <http://lists.bestpractical.com/pipermail/rt-users/attachments/20111013/60fe2e88/attachment.htm>


More information about the rt-users mailing list