[rt-users] help in creating Scrips
Raed El-Hames
rfh at vialtus.com
Mon Jun 15 05:09:48 EDT 2009
Typo on my part change all instances of:
$self->TicketsObj->
to $self->TicketObj->
Note it should TicketObj and not Ticket_s_Obj
Regards;
Roy
> 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
> <mailto: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>
> <mailto: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>> <mailto: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>>
> <mailto: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;
>
>
>
>
>
More information about the rt-users
mailing list