[rt-users] Scrip to Generate Parent Tickets

James Higgins jhguitarist1 at gmail.com
Wed Dec 2 15:10:08 EST 2009


The idea here that if a specific device is down and causing an outage to a
number of systems, that when the first ticket is created and a CF is set to
"Outage" that it will generate a Parent ticket for the Outage and link any
following tickets created for that Outage.  I have a partially working scrip
at this point, but am stuck on how to add a ticket to an existing Parent and
on how to generate a new ticket and set it as the Parent.  Here is what I
have so far:

Action: User Defined
Template: Blank
Stage TransactionBatch
######################################################################
# Custom Condition:
# Check to confirm ticket is set to Outage
return 0 unless $self->TransactionObj->Type eq "Create";
return 0 unless $self->TicketObj->CustomFieldValues('Type of
Issue')->Next->Content eq 'Outage';
return 1;



######################################################################
# Custom Action:
# Search for other Outage tickets with Matching StartUnit
my $problemUnit = undef;
my $Transaction = $self->TransactionObj; 
my $search = RT::Tickets->new($RT::SystemUser);
$problemUnit = $self->TicketObj->CustomFieldValues('Unit Where Issue
Begins')->Next->Content;

$search->LimitQueue(VALUE => 'Network Tech');
#$search->LimitCustomField(CUSTOMFIELD => 'Type of Issue', VALUE =>
'Outage');
#$search->LimitCustomField(CUSTOMFIELD => 'Customer Name', VALUE =>
'Master');
$search->LimitStatus(VALUE => 'new', OPERATOR => '=', ENTRYAGGREGATOR =>
'or');
$search->LimitStatus(VALUE => 'open', OPERATOR => '=');
if ($search->Count == 0) { return 1; }
my $id = undef;
my $startUnit = undef;
my $priority = 3;

while (my $ticket = $search->Next) { #start while
	# Ignore the ticket that caused this scrip to run
	next if $self->TicketObj->Id == $ticket->Id;
	$startUnit = $ticket->CustomFieldValues('Unit Where Issue
Begins')->Next->Content;
# Compare the two 'Unit Where Issue Begins' CFs
	if ($startUnit eq $problemUnit){ #start 1st IF
		my $master = $ticket->CustomFieldValues('Customer Name')->Next->Content;
# Check to see if Ticket is Master and has Child Tickets
		next unless($master eq "Master");
		if ($ticket->Members() ge 1){ #start 2nd IF
# Ticket is Master/Parent -> add current Ticket as Child of Parent
		$id = $self->TicketObj->id;
		$ticket->AddLink(Type=>'MemberOf',Base=>$id);
# Increment Parent ticket Priority
		my $priority = $ticket->Priority;
		$ticket->SetPriority ($priority + 1);
		return 1; #exit scrip
		} #end 2nd IF
	} #end 1st IF

# No Parent found -> Create new Parent and link as Child
	my $child_ticket = RT::Ticket->new ($RT::SystemUser);
	my $typeIssue = $self->TicketObj->CustomFieldValues('Type of
Issue')->Next->Content;
	my $coop = $self->TicketObj->CustomFieldValues('Coop')->Next->Content;
	my $customer = 'Master';

	$child_ticket->Create(
		Queue => 'Network Tech',
		Type => 'Ticket',
		Members => $self->TicketObj->Id
	);
################ Set CustomFields in Parent ################
	$child_ticket->AddCustomFieldValue(Field => 'Coop', Value => $coop);
	$child_ticket->AddCustomFieldValue(Field => 'Type of Issue', Value =>
$typeIssue);
	$child_ticket->AddCustomFieldValue(Field => 'Unit Where Issue Begins',
Value => $problemUnit);
	$child_ticket->AddCustomFieldValue(Field => 'Customer Name', Value =>
$customer);

return 1; #exit scrip

} #end while
return 1;
#############################################################

All help is greatly appreciated! 
-- 
View this message in context: http://old.nabble.com/Scrip-to-Generate-Parent-Tickets-tp26342398p26342398.html
Sent from the Request Tracker - User mailing list archive at Nabble.com.




More information about the rt-users mailing list