[rt-users] Forcing Status Changes

Kenneth Crocker KFCrocker at lbl.gov
Tue Jul 17 12:36:29 EDT 2007


Mario,


	Gene is right (he helped me a bunch when I created several scrips that 
change ticket status for a workflow design)). The entries to your log 
will help a great deal. I had several scrips that made several changes 
(one at a time) and when it ran into an error, the status did not get 
changed. I'd take a look at your log and see what is happening. That 
will help in debugging your code.


Kenn
LBNL

Gene LeDuc wrote:
> Hi Mario,
> 
> First of all, keep in mind that I've never used custom status codes, so 
> if they are set differently than the standard status codes then my code 
> probably won't do what you want.
> 
> The first thing you should do is set your logging to debug (in the RT 
> config file).  Then stick logging statements wherever you think you 
> might want to know what is happening and watch what gets reported in 
> your rt.log.
> 
> I'd start with these:
> 
> Put a command like this in the custom condition code right before the 
> "return $val;" statement:
> $RT::Logger->debug("Custom condition is " . ($val ? "True" : "False"));
> 
> And then this in the commit code right before your if statement:
> $RT::Logger->debug("Action code: Transaction OldValue is ($Old), 
> NewValue is ($New)");
> 
> And then this in the block where you change the status, right after the 
> if statement:
> $RT::Logger->debug("Action code, changing status to ($Old)");
> 
> Take a look at the rt.log file and see what is going on.
> 
> Good luck!
> Gene
> 
> At 06:55 AM 7/17/2007, Mario Gomide wrote:
>> Hi Gene, hi list,
>>
>> I've tried out what you said, but nothing different is happening. I 
>> can understand the logic and what the scrip does, so I tried some 
>> changes on the custom commit action, but with no results.
>> How could I debug this scrip? I could start trying to do some other 
>> changes and writing new scrips, but for any change, I don't actually 
>> see any results at all. Maybe i'm forgetting something, like 
>> "activating" the scrip or something like that.
>>
>> Any ideas or anywhere to look up?
>> Thanks again!
>>
>> Mario Gomide
>>
>>
>> Gene LeDuc escreveu:
>>> Hi Mario,
>>>
>>> What you want to do can be done in RT with an OnStatusChange scrip 
>>> that checks $self->TransactionObj->OldValue and 
>>> $self->TransactionObj->NewValue.  If the values don't meet your 
>>> criteria, change the status back to the OldValue.  I've never used 
>>> custom status values, so if they require unusual handling then this 
>>> might not work.  If they work like standard status values, something 
>>> like this should do the trick:
>>>
>>> Condition: User Defined
>>> Action: User Defined
>>> Template: Global blank
>>>
>>> Custom condition:
>>> { ### true if transaction is a status change
>>>   my $Transaction = $self->TransactionObj;
>>>   my $val = $Transaction->Type eq "Status";
>>>   return $val;
>>> }
>>>
>>> Custom prep action:
>>> return 1;
>>>
>>> Custom commit action:
>>> ### Check to make sure new status value makes sense
>>> my $Transaction = $self->TransactionObj;
>>> my $Ticket = $self->TicketObj;
>>> my $Old = $Transaction->OldValue;
>>> my $New = $Transaction->NewValue;
>>> if ($Old eq "X" && ! ($New eq "Y" || $New eq "Z")) {
>>>   $Ticket->_Set(Field=>"Status", Value=>$Old, RecordTransaction=>0);
>>> }
>>> return 1;
>>>
>>> I just typed this in without confirming that it works as-is, so there 
>>> might be something off in the syntax, but here's what it's doing:
>>> 1.  Fire the scrip if there's been a status change
>>> 2.  See if the old value was "X" and the new value is not "Y" or "Z".
>>> If so...
>>> 3.  Set the status back to the old value without creating a 
>>> transaction (so scrips don't fire again)
>>>
>>> Since you have a specific list of allowed changes ("Y" and "Z") you 
>>> don't have to concern yourself with "A".
>>>
>>> Regards,
>>> Gene
>>>
>>> At 09:56 AM 7/6/2007, Mario Gomide wrote:
>>>> Hello list,
>>>>
>>>> I am trying to set RT to work allowing or denying certain custom 
>>>> statuses.
>>>> For example, I have the "X" custom status and whenever a ticket has 
>>>> this status, the next status can only be "Y" or "Z", but it cannot 
>>>> be "A".
>>>>
>>>> I read the foruns and I'm still not sure if it can be done by 
>>>> crating scrips or by modifying Ticket_Overlay.pm (or any other file).
>>>>
>>>> Actually, I've started creating scripconditions that check the 
>>>> current status, but now I have to create the scripactions that 
>>>> compare the next status with the active status, and then it will 
>>>> take some action: if it isn't a possible status change, then go back 
>>>> and warn. If it is a possible status change, go ahead and change.
>>>>
>>>> Has anyone tried to do this? Is there any other easier way? Is there 
>>>> something done, like forcing the status changes?
>>>>
>>>> Thanks a lot!
>>>> Any suggestions are welcome!
>>>>
>>>> Mario Gomide
>>>> _______________________________________________
>>>> 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
>>>
>> _______________________________________________
>> 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
> 
> 



More information about the rt-users mailing list