[rt-users] Wierd result

Kenneth Crocker KFCrocker at lbl.gov
Thu May 10 17:34:15 EDT 2007


Gene,


	Thanks a bunch! I'll try it in a couple days and let you know. thanks 
again for the great help.

Kenn
LBNL

Gene LeDuc wrote:
> Kenn, here's the condition code from one of my scrips that triggers when 
> CF 'DMCA State' changes to 'TNS_Restore''.  This uses TransactionCreate, 
> not Batch.
> 
> { ### Testing CF triggers
>   my $Transaction = $self->TransactionObj;
>   my $Ticket = $self->TicketObj;
>   my $val = $Transaction->Type eq "CustomField"
>          && $Transaction->Field == get_custom_id('DMCA State')
>          && $Transaction->NewValue eq 'TNS Restore';
>   return $val;
> 
>   ### Returns custom field ID number from Name
>   ### usage: $id = get_custom_id($name);
>   sub get_custom_id {
>     my $target_name = $_[0];
>     my $cf = RT::CustomField->new($RT::SystemUser);
>     $cf->LoadByNameAndQueue(Name=>$target_name, Queue=>$Ticket->QueueObj);
>     return $cf->id if $cf;
>     return undef;
>   }
> }
> 
> Then my Prep code would be something like:
> ### Sets status to 'rejected'
> my $Ticket = $self->TicketObj;
> $Ticket->SetStatus('rejected');
> 
> Hope this helps you,
> Gene
> 
> At 12:45 PM 5/10/2007, Kenneth Crocker wrote:
>> Gene,
>>
>>         You're hints were helpful, thank you. Now I am discovering 
>> that what I really want to do is automatically change the ticket 
>> status based on a particular CF being change to a certain value. I'm 
>> no Perl guru. I have read alot about TransactionBatch, so I know I 
>> have to enable that, but I'm not sure how to approach evaluating a 
>> single CF or even how to get it to be evaluated before sending a 
>> notification and changing the status. Any help here would be greatly 
>> appreciated. Thanks in advance.
>>
>> Kenn
>> LBNL
>>
>> Gene LeDuc wrote:
>>> Hi Kenn,
>>> In addition to what Steve pointed out, I think you have an error in 
>>> your condition code.  The second term of
>>>>                 $self->Ticket->FirstCustomFieldValue('Approval-Status')
>>> should probably be TicketObj instead of Ticket.
>>> Something I started doing with my scrips to avoid making 
>>> Ticket/TicketObj mistakes when jumping between scrips and templates 
>>> is I always start my scrips off with the following 2 lines:
>>>   my $Ticket = $self->TicketObj;
>>>   my $Transaction = $self->TransactionObj;
>>> Now I can just copy code snippets between templates and scrips 
>>> without having to change any of the Transaction or Ticket references 
>>> (for instance, ticket status is $Ticket->Status whether it's in a 
>>> scrip or template).  This is especially handy when I have subroutines 
>>> that I use in both scrips and templates.  Plus I never get the 
>>> $self->Ticket or $self->$TicketObj errors anymore.
>>> Gene
>>> At 10:14 PM 5/7/2007, Kenneth Crocker wrote:
>>>> To all,
>>>>
>>>>         I  have created the following scrip/conditions:
>>>>
>>>>         Condition: User Defined
>>>>         Action: Notify AdminCc's, Cc's, Requestors
>>>>         Template: Reviewed (new template created as well)
>>>>
>>>>         Custom Condition:
>>>>
>>>>         # condition execution on ticket status and Custom Field value
>>>>
>>>>         return ($self->TicketObj->Status eq "new" &&
>>>>                 $self->Ticket->FirstCustomFieldValue('Approval-Status')
>>>>                 eq "Reviewing Request");
>>>>         return 0;
>>>>
>>>>         Custom Action Preparation Code: none
>>>>
>>>>         Custom Action Cleanup code:
>>>>
>>>>         # set new status for work-status
>>>>
>>>>         my $cf_obj;
>>>>         my $cf_name;
>>>>         my $cf_value;
>>>>
>>>>         $cf_obj = RT::CustomField->new($RT::SystemUser);
>>>>         $cf_name = "Work-Status";
>>>>         $cf_value = "Pending Decision";
>>>>         $RT::Logger->debug( $self . " cf_value = ". $cf_value . "\n" );
>>>>         $cf_obj->LoadByName( Name => $cf_name );
>>>>         $RT::Logger->debug( "Loaded \$cf_obj->Name = ". 
>>>> $cf_obj->Name()                 ."\n" );
>>>>         $cf_obj->AddValueForObject( 
>>>> Object=>$self->TicketObj,           Content=>$cf_value, );
>>>>
>>>>         # set new status for ticket
>>>>
>>>>         $RT::Logger->debug( $self->TicketObj->SetStatus("pending rv");
>>>>
>>>>
>>>>         I have also added the new ticket status value in my RT 
>>>> Configuration.
>>>>
>>>>         My problem is 1; I get a template sent out that I did not 
>>>> ask for (I get new owner like for an owner change).
>>>>         2; the ticket status doesn't get changed.
>>>>
>>>>         Any ideas?  Thanks.
>>>>
>>>> Kenn
>>>> LBNL
>>>> _______________________________________________
>>>> http://lists.bestpractical.com/cgi-bin/mailman/listinfo/rt-users
>>>>
>>>> Community help: http://wiki.bestpractical.com
>>>> Commercial support: sales at bestpractical.com
>>>>
>>>>
>>>> Discover RT's hidden secrets with RT Essentials from O'Reilly Media. 
>>>> Buy a copy at http://rtbook.bestpractical.com
>>
>>
>> -- 
>> Gene LeDuc, GSEC
>> Security Analyst
>> San Diego State University 
> 



More information about the rt-users mailing list