[rt-users] Trying to use a CSV file as a custom field values source: "Can't use string (...) as an ARRAY ref while "strict refs" in use."

oscoffrobvetaxem oscoffrobvetaxem at tin-fan.com
Sat Sep 27 13:56:38 EDT 2014


I am trying to create a custom field values source with a CSV file as a
source.

The CSV file is in this format (for reference):
 > "System ID","UPC","EAN","Custom SKU","Manufact.
SKU","Item","Qty.","Price","Tax","Category","Manufacturer","Season","Department","MSRP","Tax
Class","Default Cost","Vendor"
 > "210000000002","","","","","LABOR - Do Something Important:  Make
Moneys","-","$30.00","No","Service / Important
Stuff","","","","0.00","Labor","0.000000000",""

The CSV is a dump from my POS system and I would like to have Request
Tracker populate the values of an "Enter multiple values" type custom field
with specific elements from that CSV joined together (Columns 5 + 7).

The code I have hacked together to fill an array with the data I want is as
follows:
 > package RT::CustomFieldValues::LaborItems;
 > 
 > use strict;
 > use warnings;
 > 
 > use base qw(RT::CustomFieldValues::External);
 > use Text::CSV;
 > 
 > sub SourceDescription {
 >     return 'Labor items from the POS.';
 > }
 > 
 > sub ExternalValues {
 >         my @csvdata;
 >         my $file =
'/var/rt4/lib/RT/CustomFieldValues/item_listing_LABOR.csv';
 > 
 >         my $csv = Text::CSV -> new({ sep_char => ',' });
 >         open ( my $cvsfh, '<', $file ) or die "Could not open $file: $!";
 > 
 >         while( my $row = $csv -> getline( $cvsfh ) ) {
 >                 push @csvdata, $row;
 >                 }
 >         shift( @csvdata );                              # Remove the
first entry (just contains the names of the columns).
 >         my @customvalues;
 >         my $i = 0;
 >         my $name;
 >         my $price;
 >         my $cvname;
 >         foreach ( @csvdata ){
 >                 my $name = @{ $csvdata[$i][5] };
 >                 my $price = @{ $csvdata[$i++][7] };
 >                 my $cvname = join "", $name, " - ", $price;                    
# Stick the price on the end of the name.
 >                 push( @customvalues, name => $cvname );
 >                 }
 >         return @customvalues;
 > }
 > 
 > RT::Base->_ImportOverlays();
 > 
 > 1;

I've tried searching through other threads with this error, but haven't been
able to translate anything I've learned into a working field values source
for RequestTracker.  If I run the script sans RT specific code I can print
@customvalues and get an array of hashes, or dump @customvalues and see that
the information I want is making it that far at least.

The specific error I am getting is as follows:
 > [2491] [Sat Sep 27 16:54:57 2014] [error]: Can't use string ("LABOR - Do
Something Important: "...) as an ARRAY ref while "strict refs" in use at
/var/rt4/sbin/../lib/RT/CustomFieldValues/LaborItems.pm line 30, <$cvsfh>
line 114.
 > Stack:
 >   [/var/rt4/sbin/../lib/RT/CustomFieldValues/LaborItems.pm:30]
 >   [/var/rt4/sbin/../lib/RT/CustomFieldValues/External.pm:194]
 >   [/usr/local/share/perl5/DBIx/SearchBuilder.pm:507]
 >   [/var/rt4/share/html/Admin/CustomFields/Modify.html:257]
 >   [/var/rt4/share/html/Admin/autohandler:49]
 >   [/var/rt4/sbin/../lib/RT/Interface/Web.pm:682]
 >   [/var/rt4/sbin/../lib/RT/Interface/Web.pm:370]
 >   [/var/rt4/share/html/autohandler:53]
(/var/rt4/sbin/../lib/RT/Interface/Web/Handler.pm:209)

I have a feeling I've just been in Python-land for too long and I've made a
silly mistake somewhere, so if anybody wouldn't mind glancing over my code
I'd really be super stoked for the help!

Thanks for the assistance,
Aaron



--
View this message in context: http://requesttracker.8502.n7.nabble.com/Trying-to-use-a-CSV-file-as-a-custom-field-values-source-Can-t-use-string-as-an-ARRAY-ref-while-stri-tp58645.html
Sent from the Request Tracker - User mailing list archive at Nabble.com.



More information about the rt-users mailing list