[rt-users] RT2-to-RT3 migration tool question
Brian Friday
brian.friday at gmail.com
Thu Nov 6 18:16:11 EST 2008
Hello all,
I have a RT 2 database which I am attempting to migrate up to RT3
using the RT2-to-RT3 migration tool found here: http://search.cpan.org/~falcone/RT-Extension-RT2toRT3-1.26/
Basically I am looking for a way to modify data on the fly while it is
being pulled out by this tool. Detailed walkthrough of what I am doing
follows below.
-------
One of the code changes made to the database back in 2002 was a change
to the priority fields to reflect a word rather than a number.
So where RT2 normally has
`InitialPriority` init(11) default NULL
Our instance has
`InitialPriority` enum('urgent','high','medium','low','project')
default NULL,
All *Priority columns in the tables Queues and Tickets are effected by
this change.
What I would like to do is using the RT2-to-RT3 migration tool take
the output that it is getting in preparation to dump to a file and on
the fly change the priority from word to numeric value. So where
priority = urgent, high, medium, low, or project the name is changed
to the value 90,70,50,20, and 10 respectively.
So after some debugging I found the area I need to target (at least
for the queues so far) at line #457 in the
rt2-to-dumpfile program specifically the program snippet below:
foreach my $Queue ( @{ $Queues->ItemsArrayRef } ) {
my $queue_ds;
foreach my $param ( sort @{$FIELD_MAPPINGS{'RT::Queue'}} ) {
$queue_ds->{$param} = $Queue->_Value($param)
if ( $Queue->_Value($param) );
}
What I have done is put in the following:
foreach my $Queue ( @{ $Queues->ItemsArrayRef } ) {
my $queue_ds;
foreach my $param ( sort @{$FIELD_MAPPINGS{'RT::Queue'}} ) {
if ($param eq "FinalPriority") {
if ($Queue->__Value($param) eq 'urgent') {
$Queue->_Set($param) = '90';
} elsif ($Queue->__Value($param) eq 'high') {
$Queue->_Set($param) = '70';
} elsif ($Queue->__Value($param) eq 'medium') {
$Queue->_Set($param) = '50';
} elsif ($Queue->__Value($param) eq 'low') {
$Queue->_Set($param) = '20';
} elsif ($Queue->__Value($param) eq 'project') {
$Queue->_Set($param) = '10';
} else { }
}
$queue_ds->{$param} = $Queue->_Value($param)
if ( $Queue->_Value($param) );
}
While this should work in theory based on reading the DBIx pages on
cpan it looks like there is no method by which to actually modify a
__Value only return that value. I know the program is correctly going
through the if value eq name tree as the first value it is being fed
is "low" and we error out with the following line.
Can't modify non-lvalue subroutine call at ./rt-2.0-to-dumpfile line
551.
Is this a fruitless task or is it indeed possible to modify this value
in some method while going through the rt2-to-dumpfile program.
Or should I give up and rather create a script to copy the tables
Queues and Tickets pulling down their data and putting it back into a
new version that uses numeric values instead of name values.
Thanks for reading this far down, I am hoping someone has done
something similar....
- Brian
More information about the rt-users
mailing list