Looking around on how to merge CF with multiple entries in RT, I couldn’t find anything and this was only useful as a starting point. I have to admit I couldn’t figure out how to add a section to the RT Wiki, so I’m leaving the code here for future reference.
Here’s what replaces the Custom Action Cleanup Code:
#Define the Custom Field Name Were Going to Play with. my $CFName = 'Auction'; #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 you're merging From my $oldTicket = RT::Ticket->new($RT::SystemUser); $oldTicket->LoadById($txnObj->ObjectId); my $field = $ticketObj->CustomFieldValues($CFObj->id); my @currentvals; while (my $value = $field->Next) { push @currentvals, $value->Content; } my $oldfield = $oldTicket->CustomFieldValues($CFObj->id); unless ($oldfield) { $RT::Logger->warning("No entries for $CFName to merge"); return undef; } while (my $value = $oldfield->Next) { my $content = $value->Content; if (grep {/^$content$/} @currentvals) { $RT::Logger->warning("Already found $content in $CFName"); next; } my ($st, $msg) = $ticketObj->AddCustomFieldValue( Field => $CFObj->id, Value => $content, RecordTransaction => 1 ); if ($st){ $RT::Logger->warning("Added $content to $CFName"); } else { $RT::Logger->warning("Odd we couldn't set $CFName to $content"); } } return 1;