[rt-users] Help with Scrip for child / dependent tickets

Jon Witts jwitts at queenmargarets.com
Fri May 22 05:35:41 EDT 2015

Hi Aaron,

Thanks for sharing your scrip. I think your scrip is similar but not quite what I was wanting to do. Yours seems hardcoded to only check for two child tickets. I would like my scrip to loop through all child tickets and change the status of the parent if all child tickets are resolved…

Does anyone have any pointers? I can’t see where this is falling down.



Jon Witts
Director of Digital Strategy
Queen Margaret's School
Escrick Park
York YO19 6EU

Telephone: 01904 727600
Fax: 01904 728150

Website: www.queenmargarets.com<http://www.queenmargarets.com/>

From: Aaron Guise [mailto:aaron at guise.net.nz]
Sent: 18 May 2015 00:55
To: Jon Witts; rt-users at lists.bestpractical.com
Subject: Re: [rt-users] Help with Scrip for child / dependent tickets

Hi Jon,
I had a similar requirement I suppose.   I had an original (Parent) ticket and this ticket has two dependent tickets at a certain stage before proceeding down the rest of the workflow.   I achieved this requirement by having a scrip running when the dependent tickets are completed to check whether the other dependent is closed and if it is then to progress the parent ticket status.  I think effectively it is probably the same general thing you are trying to do.

This is the custom action from my scrip.

my $CurrentUser =
   RT::CurrentUser->new( $self->TransactionObj->Creator );
# Put actions in scope of our user
my $Ticket =
   new RT::Ticket($CurrentUser);# New ticket object
   ->load( $self->TicketObj->id );
my $MemberOf =
  $self->TicketObj->DependedOnBy;    # Find the Parent Ticket Identifier.
my $Link   = $MemberOf->Next;                 # Get the Link for Parent Object.
my $Parent = new RT::Ticket($CurrentUser);    # New Parent ticket object
$Parent->load( $Link->BaseObj->id );
my $Queue = $Parent->QueueObj;

my $children = new RT::Tickets( $CurrentUser );
              $children->LimitDependedOnBy ($Parent->id);

my $complete = 0;

while (my $child = $children->Next){
    if ($child->Status eq 'Completed'){
        $complete = $complete + 1;

if ( $complete == 2 ) {
    # Both tickets are completed so we can progress
    $Parent->SetStatus('In Progress-Allocate Resources');
    $Parent->Comment( 'Content' => 'Design/Consent phase completed');


On Sat, May 9, 2015 at 2:03 AM Jon Witts <jwitts at queenmargarets.com<mailto:jwitts at queenmargarets.com>> wrote:
Hi there,

We are wanting to have a scrip run on our queues which will move a ticket back to the "open" state if all of its child and dependent tickets are closed (resolved, rejected or deleted).

I have found Ruslan's scrip which opens a ticket once all of its child tickets are closed here on the wiki: http://requesttracker.wikia.com/wiki/OpenTicketOnAllMemberResolve which works great. However we have tried to edit this to work on depending / dependent tickets but cannot get it working. Here is the scrip, can anyone see what we are missing?


# end if setting this ticket to "resolved, deleted or rejected"
return 1 if ($self->TransactionObj->NewValue !~ /^(?:resolved|deleted|rejected)$/);

  # current ticket is a dependant of (Depended on by some parents)
  my $DependedOnBy = $self->TicketObj->DependedOnBy;
  while( my $l = $DependedOnBy->Next ) {
    # we can't check non local objects
    next unless( $l->TargetURI->IsLocal );
    # if dependant ticket is not in active state then scrip can skip it
    next unless( $l->TargetObj->Status =~ /^(?:new|open|stalled|pending|planning|holiday)$/ );

    # the dependant ticket has dependencies (current ticket is one of them)
    my $ds = $l->TargetObj->DependsOn();

    my $flag = 0;
    while( my $d = $ds->Next ) {
      next unless( $d->BaseURI->IsLocal );
      next unless( $d->BaseObj->Status =~ /^(?:new|open|stalled|pending|planning|holiday)$/ );
      $flag = 1;
    # shouldn't open dependant if some dependency is active
    next if( $flag );
    # All dependent tickets closed - open depending ticket

return 1;


Once we can get this scrip working we would ideally like a single scrip which will check all tickets on status change to see if it has a parent or depending ticket; and then if all child or dependent tickets for its parent are closed, to reopen the parent...

Any help greatly received!



Jon Witts
Director of Digital Strategy
Queen Margaret's School
Escrick Park
York YO19 6EU

Telephone: 01904 727600
Fax: 01904 728150

Website: www.queenmargarets.com<http://www.queenmargarets.com>

This email has been processed by Smoothwall Anti-Spam - www.smoothwall.net<http://www.smoothwall.net>
-------------- next part --------------
An HTML attachment was scrubbed...
URL: <http://lists.bestpractical.com/pipermail/rt-users/attachments/20150522/974e92eb/attachment.htm>

More information about the rt-users mailing list