I encountered a
strange problem when setting value for a custom field. If anyone can give me a
lead that will be appreciated.
The background of
this problem is listed below:
RT version:
3.4.3
CustomField:
Evaluator
Type- Enter one value,
Applied to: Tickets,
Assigned to one queue: Changes
Scrip:
Description: Update Evaluator and Test Status
Condition: User Defined
Action: User Defined
Template: Global template: Blank
Stage: TransactionCreate
Custom condition:
<omitted as it's working fine>
Custom action
preparation code: return 1;
Custom action
cleanup code: <see below>
#---------------------------------------Begin------------------------------------
my $CF_Eval =
'Evaluator';
my $evalor = $self->TransactionObj->Creator;
my $eval1 = RT::User->new(RT::SystemUser);
$eval1->Load($evalor);
my $DV_Eval = $eval1->RealName;
my $QueueObj = $self->TicketObj->QueueObj;
my $CFObj2 = RT::CustomField->new( $QueueObj->CurrentUser );
$CFObj2->LoadByNameAndQueue( Name => $CF_Eval, Queue => $QueueObj->id );
unless( $CFObj2->id ) {
$CFObj2->LoadByNameAndQueue( Name => $CF_Eval, Queue => 0 );
unless( $CFObj2->id ) {
$RT::Logger->error("custom field '$CF_Eval' isn't global or defined for queue '". $QueueObj->Name ."'");
return undef;
}
}
my $evalor = $self->TransactionObj->Creator;
my $eval1 = RT::User->new(RT::SystemUser);
$eval1->Load($evalor);
my $DV_Eval = $eval1->RealName;
my $QueueObj = $self->TicketObj->QueueObj;
my $CFObj2 = RT::CustomField->new( $QueueObj->CurrentUser );
$CFObj2->LoadByNameAndQueue( Name => $CF_Eval, Queue => $QueueObj->id );
unless( $CFObj2->id ) {
$CFObj2->LoadByNameAndQueue( Name => $CF_Eval, Queue => 0 );
unless( $CFObj2->id ) {
$RT::Logger->error("custom field '$CF_Eval' isn't global or defined for queue '". $QueueObj->Name ."'");
return undef;
}
}
my( $st, $msg ) =
$self->TicketObj->AddCustomFieldValue(
Field => $CFObj2->id,
Value => $DV_Eval,
RecordTransaction => 1 );
unless( $st ) {
$RT::Logger->error( "Couldn't set $DV_Eval as value for CF $CF_Eval:". $msg );
return undef;
}
Field => $CFObj2->id,
Value => $DV_Eval,
RecordTransaction => 1 );
unless( $st ) {
$RT::Logger->error( "Couldn't set $DV_Eval as value for CF $CF_Eval:". $msg );
return undef;
}
$RT::Logger->info("My troublshooting - run scrip Set
Evaluator");
return
1;
#---------------------------------------End------------------------------------
Note: this action is to set current transaction user to
be the Evaluator, fill in his real name instead of RT
id.
History record in the
ticket:
Note: first line shows that the scrip updated the CF:Evaluator
successfully but then there's another transaction shows that the user deleted
the CF's value. But the user didn't do that. So it must be some internal
mechanism did that.
Regards,
David
_______________________________________________ http://lists.bestpractical.com/cgi-bin/mailman/listinfo/rt-users
Community help: http://wiki.bestpractical.com Commercial support: [EMAIL PROTECTED] Discover RT's hidden secrets with RT Essentials from O'Reilly Media. Buy a copy at http://rtbook.bestpractical.com We're hiring! Come hack Perl for Best Practical: http://bestpractical.com/about/jobs.html
