Re: [rt-users] Result page not up to date after TransactionBatch scrips

2013-09-10 Thread Rafal Matera
Hi Kevin,

Thank you for your advice.
Works perfectly.

Rafal



From:   Kevin Falcone falc...@bestpractical.com
To: rt-users@lists.bestpractical.com
Date:   2013-09-10 04:12
Subject:Re: [rt-users] Result page not up to date after
TransactionBatch scrips
Sent by:rt-users-boun...@lists.bestpractical.com



On Wed, Sep 04, 2013 at 10:16:16AM +0200, Rafal Matera wrote:
 We use RT 4.0.13, We customized our installation by some scrips. Part of
 them have to work in TransactionBatch mode.
 One of the scrips changes the ticket owner on queue change. This is done
by
 scrip working in mentioned TransactionBatch mode.

 When the queue is changed on Basics screen (Ticket/Modify.html), scrip is
 executed without a failure.
 The problem is that result page shows the OLD VALUE of the owner.
 Clicking Display or Basics again shows that owner was really changed by
the
 scrip.

I'm not surprised.  In order to avoid problems with TransactionBatch
scrips, the ticket is cloned and worked on.  The ticket object in the
page is not directly acted on by the Scrip.

TransactionBatch scrips through the 3.6/3.8/4.0 series have been
inconsistent about when it updates. I don't think there's ever been a
guarantee that it will update the object and TransactionBatch scrips
in general are too magical.

 Do you have any idea, how to force RT to show current values on result
 page ?

Use one of the other callbacks in that page to reload the ticket
object, $TicketObj-Load($TicketObj-Id); from the BeforeActionList
callback or one of the others should be enough.

-kevin




Re: [rt-users] Result page not up to date after TransactionBatch scrips

2013-09-09 Thread Kevin Falcone
On Wed, Sep 04, 2013 at 10:16:16AM +0200, Rafal Matera wrote:
 We use RT 4.0.13, We customized our installation by some scrips. Part of
 them have to work in TransactionBatch mode.
 One of the scrips changes the ticket owner on queue change. This is done by
 scrip working in mentioned TransactionBatch mode.
 
 When the queue is changed on Basics screen (Ticket/Modify.html), scrip is
 executed without a failure.
 The problem is that result page shows the OLD VALUE of the owner.
 Clicking Display or Basics again shows that owner was really changed by the
 scrip.

I'm not surprised.  In order to avoid problems with TransactionBatch
scrips, the ticket is cloned and worked on.  The ticket object in the
page is not directly acted on by the Scrip.

TransactionBatch scrips through the 3.6/3.8/4.0 series have been
inconsistent about when it updates. I don't think there's ever been a
guarantee that it will update the object and TransactionBatch scrips
in general are too magical.

 Do you have any idea, how to force RT to show current values on result
 page ?

Use one of the other callbacks in that page to reload the ticket
object, $TicketObj-Load($TicketObj-Id); from the BeforeActionList
callback or one of the others should be enough.

-kevin


pgplbIZVa8KYR.pgp
Description: PGP signature


[rt-users] Result page not up to date after TransactionBatch scrips

2013-09-04 Thread Rafal Matera

Hello,

We use RT 4.0.13, We customized our installation by some scrips. Part of
them have to work in TransactionBatch mode.
One of the scrips changes the ticket owner on queue change. This is done by
scrip working in mentioned TransactionBatch mode.

When the queue is changed on Basics screen (Ticket/Modify.html), scrip is
executed without a failure.
The problem is that result page shows the OLD VALUE of the owner.
Clicking Display or Basics again shows that owner was really changed by the
scrip.

The problem exists on blank RT instance as well (only one new queue and
following scrip created).

   CustomPrepareCode1;/CustomPrepareCode
   Queue0/Queue
   ScripActionUser Defined/ScripAction
   ScripConditionUser Defined/ScripCondition
   StageTransactionBatch/Stage
   TemplateBlank/Template
   CustomCommitCode
  my ($status_id, $status_msg);
  my $qId;
  my @batch = @{ $self-TicketObj-TransactionBatch };

  foreach my $trans ( @batch ) {

  if ($trans-Type eq 'Set'  $trans-Field eq 'Queue') {
   #if queue changed to COE_XX set owner to opcenter
$qId = $trans-NewValue;
my $qObj = new RT::Queue($RT::SystemUser);
$qObj-Load($qId);
if ($qObj-Name eq 'COE_XX')
{
  ($status_id, $status_msg) = $self-TicketObj-SetOwner
  ('opcenter', 'Force');
  $RT::Logger-info(Change owner: $status_msg);
  return !$status_id;
}

  #in other cases, just set owner to nobody
  ($status_id, $status_msg) = $self-TicketObj-SetOwner(RT::Nobody
  (), 'Force');
  $RT::Logger-info(Change owner: $status_msg);
  return 1;
  }

  }
  1;
   /CustomCommitCode
   CustomIsApplicableCode
  my @batch = @{ $self-TicketObj-TransactionBatch };
  foreach my $trans ( @batch )
  {
return 1 if ($trans-Field eq Queue);
  }
  return 0;
   /CustomIsApplicableCode

Do you have any idea, how to force RT to show current values on result
page ?

Best regards,
Rafal