[rt-users] help in creating Scrips

rmp dmd rmp.dmd1229 at gmail.com
Fri Jun 12 13:14:13 EDT 2009


Thanks Raed.

I tried you're script but am getting error.

Jun 12 13:09:54 data1 RT: Scrip 26 Commit failed: Can't locate object method
"TicketsObj" via package "RT::Action::UserDefined" at (eval 4184) line 1.
Stack:   [(eval 4184):1]   [/opt/rt3/lib/RT/ScripAction_Overlay.pm:241]
[/opt/rt3/lib/RT/Scrip_Overlay.pm:507]
[/opt/rt3/lib/RT/Scrips_Overlay.pm:192]
[/opt/rt3/lib/RT/Transaction_Overlay.pm:170]
[/opt/rt3/lib/RT/Record.pm:1438]   [/opt/rt3/lib/RT/Ticket_Overlay.pm:720]
[/opt/rt3/lib/RT/Interface/Email.pm:765]
[/opt/rt3/share/html/REST/1.0/NoAuth/mail-gateway:58]
(/opt/rt3/lib/RT/Action/UserDefined.pm:81)

there are also errors that are related to syntax (ie missing ; , Ticketobj
instead of ticketsobj).

This is the scrip that I'm running.

Thanks!

scrip:

return undef unless ($self->TicketsObj->Subject =~ / \*\* PROBLEM (\w+) -
(.*) (\w+) \*\*/ ) ;
my $subject = $self->TicketsObj->Subject();
my $TicketsObj = RT::Tickets->new($RT::SystemUser);
$TicketsObj->LimitQueue(VALUE => 'IT');
$TicketsObj->Limit(FIELD => 'Subject' ,VALUE => $subject , OPERATOR =>
'LIKE' ); #This tries to match on the whole subject line
if ($TicketsObj->Count == 0) { return 1; }
my $id = undef;
while (my $ticket = $TicketsObj->Next) {
  next if $self->TicketsObj->Id == $ticket->Id;
 $id = $ticket->Id;
 last;
}
$id || return 1;
$RT::Logger->debug("Merging ticket " . $self->TicketsObj->Id . " into $id
because of OA number match.");
$self->TicketsObj->MergeInto($id);
1;




On Fri, Jun 12, 2009 at 10:31 AM, Raed El-Hames <rfh at vialtus.com> wrote:

> 1- Your error log:
> - If you have not a directory /var/log/rt3 , create it and create the file
> rt.log by touch
> touch /var/log/rt3/rt.log
> then make sure its owned by the user:group running the web server (apache
> or whatever)
> -if you have not already make sure you have the below line in RT_SiteConfig
>  Set($LogDir, '/var/log/rt3');
>
> Then restart httpd
>
> 2- Your scrip
> Why do you need the CF still does n't make since to me?
> In any case for if subject match then merge you can do : Global/Scrips/New
> scrip
>
> Condition: On Create (# so we trigger this when a ticket is created)
> Action: User defined
> Template: Blank
>
> in  Custom action preparation code put:
> return 1;
>
> in
> Custom action cleanup code:
> return undef unless ($self->TicketObj->Subject =~ / \*\* PROBLEM (\w+) -
> (.*) (\w+) \*\*/ ) ;
> my $subject = $self->TicketObj->Subject()
> my $TicketsObj = RT::Tickets->new($RT::SystemUser);
> $TicketsObj->LimitQueue(VALUE => 'IT');
> $TicketsObj->Limit(FIELD => 'Subject' ,VALUE => $subject , OPERATOR =>
> 'LIKE' ); #This tries to match on the whole subject line
> if ($TicketsObj->Count == 0) { return 1; }
> my $id = undef;
> while (my $ticket = $TicketsObj->Next) {
>   next if $self->TicketObj->Id == $ticket->Id;
>  $id = $ticket->Id;
>  last;
> }
> $id || return 1;
> $RT::Logger->debug("Merging ticket " . $self->TicketObj->Id . " into $id
> because of OA number match.");
> $self->TicketObj->MergeInto($id);
> 1;
>
> Regards;
>
> Roy
>
>
> rmp dmd wrote:
>
>>  I just want to merge new tickets with existing tickets with matching
>> subject line.
>>  I have been provided with the script below. But getting errors on this
>> line cause the Custom field is not present.
>>  error $TicketsObj->LimitCustomField(CUSTOMFIELD => 'OAReqNum', OPERATOR
>> => '=', VALUE => $oa);
>>  I need to get the ID of the existing ticket and merge the new ticket with
>> this ID.
>>  The scrip also has $RT::Logger->debug but I can not see anything on
>> /opt/rt3/var/log/rt.log.  I only see errors on /var/log/messages
>>  I already add on /opt/rt3/etc/RT_SiteConfig.pm
>>  Set($LogToFileNamed , "rt.log");
>> Set($LogToFile      , 'debug');
>>  and set permissions for the file:
>> touch /opt/rt3/var/log/rt.log
>> chown apache:apache /opt/rt3/var/log/rt.log
>> Viewing the debug logs will surely help.
>>  Thanks for all the help
>> Roehl
>>  # from
>> http://archives.free.net.ph/message/20040319.180325.27528377.en.html
>> #
>> # If the subject of the ticket matches a pattern suggesting
>> # that an OA request number is in the subject AND there is
>> # an existing ticket is the OAReq queue with a matching
>> # status field, (that is not this ticket)
>> # merge this ticket into that ticket
>> my $oa = undef;
>> my $Transaction = $self->TransactionObj;
>> my $subject = $Transaction->Attachments->First->GetHeader('Subject');
>> if ( $subject =~ /\*\* PROBLEM (\w+) - (.*) (\w+) \*\*/ ) {
>> $oa = $1;
>> $RT::Logger->debug("Found oa: $oa");
>> }
>> else { return 1; }
>>
>> my $TicketsObj = RT::Tickets->new($RT::SystemUser);
>> $TicketsObj->LimitQueue(VALUE => 'IT');
>> $TicketsObj->LimitCustomField(CUSTOMFIELD => 'OAReqNum', OPERATOR => '=',
>> VALUE => $oa);
>> if ($TicketsObj->Count == 0) { return 1; }
>> my $id = undef;
>> while (my $ticket = $TicketsObj->Next) {
>> next if $self->TicketObj->Id == $ticket->Id;
>> $id = $ticket->Id;
>> last;
>> }
>> $id || return 1;
>> $RT::Logger->debug("Merging ticket " . $self->TicketObj->Id . " into $id
>> because of OA number match.");
>> $self->TicketObj->MergeInto($id);
>> 1;
>>
>>
>>   On Fri, Jun 12, 2009 at 9:33 AM, Raed El-Hames <rfh at vialtus.com<mailto:
>> rfh at vialtus.com>> wrote:
>>
>>    You answered you are own question , yes you are getting the error
>>    because you do not have the custom field
>>    Create the custom field and apply it to all queues (unless the
>>    scrip below is not a global scrip -- but I doubt that--)
>>
>>    Can you explain what you are trying to do, maybe we can help you,
>>    I am not sure you need to search on custom fields (considering
>>    they don't exist to begin with)
>>
>>    Roy
>>
>>    rmp dmd wrote:
>>
>>
>>           I changed this
>>               $TicketsObj->LimitStatus(VALUE => 'new');
>>           $TicketsObj->LimitStatus(VALUE => 'open');
>>               to:
>>               $TicketsObj->LimitCustomField(CUSTOMFIELD =>
>>        'OAReqNum', OPERATOR
>>           => '=', VALUE => $oa);
>>               but I'm getting error
>>               Jun 11 22:13:13 data1 RT: Query error in << (  'CF.' =
>>        'alert'  )
>>           AND (  'Queue' = 'IT'  ) >>: Unknown field: CF. at
>>           /opt/rt3/lib/RT/Tickets_Overlay_SQL.pm line 308.  Stack:
>>     [/opt/rt3/lib/RT/Tickets_Overlay_SQL.pm:308]
>> [/opt/rt3/lib/RT/Tickets_Overlay_SQL.pm:482]
>> [/opt/rt3/lib/RT/Tickets_Overlay.pm:2641]
>> [/opt/rt3/lib/RT/Tickets_Overlay.pm:2314]   [(eval 4308):24]
>>             [/opt/rt3/lib/RT/ScripAction_Overlay.pm:241]
>> [/opt/rt3/lib/RT/Scrip_Overlay.pm:507]
>> [/opt/rt3/lib/RT/Scrips_Overlay.pm:192]
>> [/opt/rt3/lib/RT/Transaction_Overlay.pm:170]
>> [/opt/rt3/lib/RT/Record.pm:1438]
>> [/opt/rt3/lib/RT/Ticket_Overlay.pm:720]
>> [/opt/rt3/lib/RT/Interface/Email.pm:765]
>> [/opt/rt3/share/html/REST/1.0/NoAuth/mail-gateway:58]
>> (/opt/rt3/lib/RT/Tickets_Overlay_SQL.pm:484)
>>                   'm guessing, this is because I do not a
>>        CustomField. I attached
>>           our RT interface. Anybody kindly help, identify the problem.
>>                   My RT interface shows some of this information:
>>           #2345: Re: ** PROBLEM alert - Echo PC02/check_usa is
>>        CRITICAL **
>>        *Ticket metadata*
>>           The Basics:
>>             Id: 2345
>>            Status: new
>>            Left: 0 min
>>            Priority: 60/0
>>            Queue: IT
>>          Custom Fields:
>>             Machine Name: No Value
>>             Customer: No Value
>>         People:
>>             Owner: Nobody
>>             Requestors: rmp.dmd1229 at gmail.com
>>        <mailto:rmp.dmd1229 at gmail.com> <mailto:rmp.dmd1229 at gmail.com
>>        <mailto:rmp.dmd1229 at gmail.com>>
>>
>>                     Thanks!
>>           Roehl
>>
>>
>>           On Thu, Jun 11, 2009 at 3:44 PM, rmp dmd
>>        <rmp.dmd1229 at gmail.com <mailto:rmp.dmd1229 at gmail.com>
>>           <mailto:rmp.dmd1229 at gmail.com
>>         <mailto:rmp.dmd1229 at gmail.com>>> wrote:
>>
>>               Thank you very much Raed.
>>                       This problem explains while I merging the newly
>>        created
>>               tickets to a ticket with status 'new'  on the top of
>>        the list.
>>                       I need to merge new ticket to an existing
>>        ticket with subject
>>               matching ** PROBLEM - any words - CRITICAL ** .
>>                       1st request, this is a match: #2316: ** PROBLEM
>>        alert - Echo
>>               PC02/check_usa is CRITICAL **
>>               2nd request, this is a match: #2317: ** PROBLEM alert -
>>        Echo
>>               PC02/check_usa is CRITICAL **                The
>>        existing ticket has an ID: 2312 with Subject: ** PROBLEM
>>               alert - Echo PC02/check_usa is CRITICAL **
>>     I will merge ticket 2316 and 2317 with 2312.
>>                       Somehow this merge to a ticket DRP with ID 720.
>>         This is
>>               ticket is on the top of IT queue list
>>                       223 Centralize Sever login   open IT
>>               668 test on Saturn             open  IT
>>               720 DRP                           new  IT
>>               745 Backup - all corporate  open  IT
>>               873 Image Ken Gen           open  IT
>>               1135 DSS-3 tapes             new  IT
>>                       Below is the script.  I hope somebody can help.
>>                       Thanks!
>>               Roehl
>>                       my $oa = undef;
>>               my $Transaction = $self->TransactionObj;
>>               my $subject =
>>               $Transaction->Attachments->First->GetHeader('Subject');
>>               if ( $subject =~ /\*\* PROBLEM (\w+) - (.*) (\w+) \*\*/ ) {
>>               $oa = $1;
>>               #$RT::Logger->debug("Found oa: $oa");
>>               }
>>               else { return 1; }
>>
>>               my $TicketsObj = RT::Tickets->new($RT::SystemUser);
>>               $TicketsObj->LimitQueue(VALUE => 'IT');
>>               $TicketsObj->LimitStatus(VALUE => 'new');
>>               $TicketsObj->LimitStatus(VALUE => 'open');
>>                               if ($TicketsObj->Count == 0) { return 1; }
>>               my $id = undef;
>>               while (my $ticket = $TicketsObj->Next) {
>>               next if $self->TicketObj->Id == $ticket->Id;
>>               $id = $ticket->Id;
>>               last;
>>               }
>>               $id || return 1;
>>               $RT::Logger->debug("Merging ticket " .
>>        $self->TicketObj->Id .
>>               " into $id because of OA number match.");
>>               $self->TicketObj->MergeInto($id);
>>               1;
>>
>>
>>
>>
>>
-------------- next part --------------
An HTML attachment was scrubbed...
URL: <http://lists.bestpractical.com/pipermail/rt-users/attachments/20090612/8e9f0576/attachment.htm>


More information about the rt-users mailing list