OnMerge: Difference between revisions
Jump to navigation
Jump to search
(Adding categories) |
|||
| Line 108: | Line 108: | ||
return 1; | return 1; | ||
</nowiki> | </nowiki> | ||
[[Category:Alternate Custom Action Cleanup Code for Multiple Entries]] | |||
Revision as of 20:53, 29 December 2010
Return true if current transaction is merge action.
Custom condition code:
my $txn = $self->TransactionObj; return undef unless $txn->Type =~ /^AddLink$/i; return undef unless $txn->Field =~ /^MergedInto$/i; return 1;
If you need to refer to the original ticket id in a template it is available as $Transaction->ObjectId.
Variation:
Another Variation that says, if we are merging from a queue into a set of queues, and data from the merging tickets Custom fields need to be populated into the ticket your merging into..
Description: OnMergeCF Condition: User Defined Action: User Defined Template: Global Template: Transaction State: TransactionCreate
Custom Condition
#Transaction Association
my $txn = $self->TransactionObj;
#Condition on Type
return undef unless $txn->Type =~ /^AddLink$/i;
return undef unless $txn->Field =~ /^MergedInto$/i;
$RT::Logger->info('Merge is Occurring');
#Ticket Association
#The New Ticket your Merging into
my $ticket = $self->TicketObj;
#The old Ticket your merging From
my $oldTicket = RT::Ticket->new($RT::SystemUser);
$oldTicket->LoadById($txn->ObjectId);
$RT::Logger->info('Merging '.$txn->ObjectId.' into '.$ticket->Id);
#Are we merging from the right queue?
my $oldqueue = $oldTicket->Queue;
return undef unless $oldqueue == 36;
$RT::Logger->info('Merging From Lead Tracking Queue');
#Are we merging into an allowed queue?
my @queues = qw(Enrollment/Recruitment Installation Accounting HealthCheck/Follow-up);
my $queue = $ticket->QueueObj->Name;
my $qCount = grep(/\Q$queue\E/,@queues);
return undef unless $qCount >= 1;
$RT::Logger->info('Merging into an allowed Queue');
return 1;
Custom Action Preperation Code
#nothing to do here.. just return return 1;
Custom Action Cleanup Code
#Define the Custom Field Name Were Going to Play with.
my $CFName = 'Lead Source';
#Transaction Association
my $txnObj = $self->TransactionObj;
#Ticket Association
#The New Ticket your Merging into
my $ticketObj = $self->TicketObj;
my $queueObj = $self->TicketObj->QueueObj;
my $CFObj = RT::CustomField->new($RT::SystemUser);
$CFObj->LoadByNameAndQueue(Name => $CFName, Queue => $queueObj->id);
unless($CFObj->id) {
$CFObj->LoadByNameAndQueue(Name => $CFName, Queue=>0);
unless($CFObj->id){
$RT::Logger->warning("Custom Field: $CFName not for this Queue");
return undef;
};
};
#The old Ticket your merging From
my $oldTicket = RT::Ticket->new($RT::SystemUser);
$oldTicket->LoadById($txnObj->ObjectId);
#We dont care if we blank out the Ticket Being Merged into.
my $cfv = $oldTicket->FirstCustomFieldValue($CFName);
#ok lets set this..
my ($st, $msg) = $ticketObj->AddCustomFieldValue(
Field => $CFObj->id,
Value => $cfv,
RecordTransaction => 1
);
unless ($st){
$RT::Logger->warning("Odd we couldn't set $CFName to $cfv");
};
return 1;