[rt-users] RTAT Import?
Matthew Keller
kellermg at potsdam.edu
Wed Apr 30 13:06:55 EDT 2008
If you look in the API documentation about setting a CF (the
'CustomField' object), it will show you where my oversimplification of
$cf->Value=$thing was in err, and how to do it correctly.
On Tue, 2008-04-29 at 21:01 +0000, Jean-Sebastien Morisset wrote:
> On Tue, Apr 29, 2008 at 04:32:43PM -0400, Matthew Keller wrote:
> > Ah yes... The way I usually do things like that is by grabbing the asset
> > CF info, ala:
> >
> > my $AssCFs=$AssObj->CustomFields();
> >
> > and then setting the appropriate values ala:
> >
> > while(my $AssCF = $AssCFs->Next()) {
> > $AssCF->Value = whatever
> > }
> >
> > The above is pseudocode from memory, but is +/- 96% correct. :)
>
> Hmmm... Here's what I get:
>
> # /opt/rt3/bin/import-assets.sh /tmp/js.csv
> gessolx1:
> Loaded gessolx1 as asset #85.
> Setting Client to STI
> [Tue Apr 29 21:00:16 2008] [crit]: Can't modify non-lvalue subroutine
> call at /opt/rt3/bin/import-assets.sh line 56, <CSV> line 2.
> (/opt/rt3/lib/RT.pm:361)
> Can't modify non-lvalue subroutine call at /opt/rt3/bin/import-assets.sh
> line 56, <CSV> line 2.
>
> And here's the code I'm using...
>
> #!/usr/bin/perl
>
> use lib qw(/opt/rt3/local/lib /opt/rt3/lib);
>
> use RT;
> use RTx::AssetTracker::Asset;
> RT::LoadConfig();
> RT::Init();
>
> use strict;
>
> if (! $ARGV[0] || $ARGV[0] =~ /^--?h/) {
> print "Syntax: $0 {csvfile}\n";
> exit 0;
> }
>
> open(CSV, "< $ARGV[0]") or die "$!\n";
>
> my $at = RTx::AssetTracker::Asset->new(RT->SystemUser);
> my $line;
>
> # customfield columns in csv file
> my %cf_map = (
> 'Client' => 4,
> 'Location' => 5,
> 'Manufacturer' => 6,
> 'Model' => 7,
> 'Serial Number' => 8,
> 'OS Name' => 9,
> );
>
> while (<CSV>) {
> chomp; $line++;
> next if ($line == 1); # Skip CSV Header
> s/^"//; s/"$//;
> my @csv = split(/"?,"?/);
>
> print $csv[0], ":\n";
> if (my $id = $at->Load($csv[0])) {
> print "\tLoaded $csv[0] as asset #$id.\n";
> } else {
> my ($id, $t, $msg) = $at->Create (
> Name => $csv[0],
> Status => $csv[1],
> Type => $csv[2],
> Description => $csv[3],
> );
> print "\t$msg\n";
> }
>
> my $atcf = $at->CustomFields();
> while (my $cf = $atcf->Next()) {
> # check to see if we have a column number for this customfield
> if (my $col = $cf_map{$cf->Name}) {
> print "\tSetting ".$cf->Name." to ".$csv[$col]."\n";
> $cf->Value = $csv[$col];
> }
> }
> }
>
More information about the rt-users
mailing list