[rt-users] TransactionBatch

Koopmann, Jan-Peter Jan-Peter.Koopmann at seceidos.de
Thu Jun 22 05:48:00 EDT 2006


Hi,

I have a small scrip that changes a custom field to "IT" in case a correspondence is added to a ticket by a user who is not member of the IT group:

Condition: On Correspond
Action: User Definded
Template: Blank
Stage: TransactionCreate

Preparation: return 1;
Cleanup code:

my $group = 'IT';

my $PrincipalObj = RT::Principal->new( $self->TransactionObj->CreatorObj );
$PrincipalObj->Load( $self->TransactionObj->CreatorObj->Id );

my $groupobj = RT::Group->new($self->TransactionObj->CreatorObj );
$groupobj->LoadUserDefinedGroup($group);
my $HasMember = $groupobj->HasMemberRecursively( $PrincipalObj );

if (! $HasMember) {
   	$RT::Logger->info("Ticket changed by admin");
    
	my $CFName = 'Wartet auf';
	my $DefaultValue = 'IT';
	my $RecTransaction = 1;

	my $QueueObj = $self->TicketObj->QueueObj;
	my $CFObj = RT::CustomField->new( $QueueObj->CurrentUser );
	$CFObj->LoadByNameAndQueue( Name => $CFName, Queue => 0 );
	unless( $CFObj->id ) {
	  $RT::Logger->warning( "$CFName doesn't exist, Queue -". $QueueObj->Name ."-" );
	  return undef; 
	}

	if ( $self->TicketObj->FirstCustomFieldValue( $CFObj->id ) eq "User" ) {
	   my( $st, $msg ) = $self->TicketObj->AddCustomFieldValue(
						  Field => $CFObj->id,
						  Value => $DefaultValue,
						  RecordTransaction => $RecTransaction );
	   unless( $st ) {
	      $RT::Logger->warning( "Couldn't set $DefaultValue as value for CF $CFName:". $msg );
	      return undef;
	    }
	}
}


My problem: If the custom field "Wartet auf" is shown in the Update page it sometimes happens that the scrip changes the field to "IT" and a later transaction changes it back to the former value (the one shown in the update field):

#		Do. 22. Jun. 2006, 08:45:00  	t.user - Wartet auf IT changed to User 	  	 
#  	   	Do. 22. Jun. 2006, 08:45:00  	RT_System - Wartet auf User changed to IT 	  	 
#  	   	Do. 22. Jun. 2006, 08:44:59  	RT_System - Ausgehende Mail gespeichert 	  	 [Zeige] 
#  	   	Do. 22. Jun. 2006, 08:44:59  	RT_System - Ausgehende Mail gespeichert 	  	 [Zeige] 
#  	   	Do. 22. Jun. 2006, 08:44:58  	t.user - Correspondence added  	  	 [Antworten] [Kommentar]

I suspect the update page created several transactions, one for the Correspondence and maybe one for custom field? If so, I thought that TransactionBatch would be the solution. So I changed the scrip to TransactionBatch stage and nothing happens, it simply does not fire (yes UseTransactionBatch in RT_SiteConfig is set and apache restarted). Why? 

Kind regards,
  JP



More information about the rt-users mailing list