Scrip - On close set CF to owner name and then change owner to nobody

Hi,

I’m currently struggling with this scrip, in separate parts it works but
together it kinda makes a mess O_o

Some background on the scrip. We want the ticket owner to be set to Nobody
on close, when tickets reopen they will show up in the New/nobody queue for
everyone in a support group to pickup instead of the previous owner.
But, we do want the ability to make a simple search query on resolved
tickets and sort them by owner. Basically for our managers so they can see
if the tickets are distributed evenly, etc.
For that purpose I figured I could fill in the owner name into a CF and have
the actual owner set to nobody.

Below the scrip:

my $my_owner = $self->TicketObj->OwnerObj->Name;

$self->TicketObj->AddCustomFieldValue(Field => ‘Last Owner’, Value =>
$my_owner);
my ($code, $msg) = $self->TicketObj->SetOwner(6, ‘Force’);
return 1;

What happens is that the first two lines fill the current owner’s name into
a CF called “Last Owner”.
After that it should change the owner to Nobody, in my case the UID of
Nobody is number 6. I’ve set it to force since it doesn’t always work
correctly if you leave the force bit out.

When I run this scrip separately it works, I can set the owner to nobody +
if I leave the last bit out I’m able to set the current owner in the CF
called “Last Owner”.
But when using them together as shown in the scrip above it doesn’t work the
way I want it to.

It then seems to first set the owner to nobody and then fill the CF with the
username Nobody… So yes it works but I’m expecting the scrip to first get
the old owner name and fill that one into the CF.

I’ve also tried setting this first part into the “prep” code and the second
part (changing the owner) into the cleanup code, but that doesn’t seem to
change anything.
The other thing I’ve tried was changing the TransactionBatch to
TransactionCreate and back. With TransactionCreate it doesn’t fully work,
when using TransactionBatch it does work but instead of the previous ticket
owner it fills in the Nobody user…

So, does anyone know a simple way to fix this? I’m expecting RT to
sequentially do the above scrip but I guess I’m missing something in order
for it to work.

Thanks in advance.

– Bart

Never mind…

I just stumbled upon the CreatorObj.

Changed the scrip to the following:

my $my_owner = $self->TicketObj->CreatorObj->Name;

$self->TicketObj->AddCustomFieldValue(Field => ‘Last Owner’, Value =>
$my_owner);
my ($code, $msg) = $self->TicketObj->SetOwner(6, ‘Force’);
return 1;

This gave me the result I wanted it to have :slight_smile:

Problem solved.

– Bart2011/10/4 Bart bart@pleh.info

Hi,

I’m currently struggling with this scrip, in separate parts it works but
together it kinda makes a mess O_o

Some background on the scrip. We want the ticket owner to be set to Nobody
on close, when tickets reopen they will show up in the New/nobody queue for
everyone in a support group to pickup instead of the previous owner.
But, we do want the ability to make a simple search query on resolved
tickets and sort them by owner. Basically for our managers so they can see
if the tickets are distributed evenly, etc.
For that purpose I figured I could fill in the owner name into a CF and
have the actual owner set to nobody.

Below the scrip:

my $my_owner = $self->TicketObj->OwnerObj->Name;

$self->TicketObj->AddCustomFieldValue(Field => ‘Last Owner’, Value =>
$my_owner);
my ($code, $msg) = $self->TicketObj->SetOwner(6, ‘Force’);
return 1;

What happens is that the first two lines fill the current owner’s name into
a CF called “Last Owner”.
After that it should change the owner to Nobody, in my case the UID of
Nobody is number 6. I’ve set it to force since it doesn’t always work
correctly if you leave the force bit out.

When I run this scrip separately it works, I can set the owner to nobody +
if I leave the last bit out I’m able to set the current owner in the CF
called “Last Owner”.
But when using them together as shown in the scrip above it doesn’t work
the way I want it to.

It then seems to first set the owner to nobody and then fill the CF with
the username Nobody… So yes it works but I’m expecting the scrip to first
get the old owner name and fill that one into the CF.

I’ve also tried setting this first part into the “prep” code and the second
part (changing the owner) into the cleanup code, but that doesn’t seem to
change anything.
The other thing I’ve tried was changing the TransactionBatch to
TransactionCreate and back. With TransactionCreate it doesn’t fully work,
when using TransactionBatch it does work but instead of the previous ticket
owner it fills in the Nobody user…

So, does anyone know a simple way to fix this? I’m expecting RT to
sequentially do the above scrip but I guess I’m missing something in order
for it to work.

Thanks in advance.

– Bart

Hi,

After some more testing the below scrip doesn’t seem to do what it should…

It now does work but it fills in the wrong user. Sometimes a colleague of
mine instead of myself, while I’m the person hitting “Resolved”. Or
sometimes root, I guess because it runs a scrip when closing and the actual
last actioning user almost always is root.

Is there better, more clever, way for getting the actioning user “or” the
ticket owner into a CF during ticket resolve and afterwards setting the
owner to nobody?

– Bart2011/10/4 Bart bart@pleh.info

Never mind…

I just stumbled upon the CreatorObj.

Changed the scrip to the following:

my $my_owner = $self->TicketObj->CreatorObj->Name;

$self->TicketObj->AddCustomFieldValue(Field => ‘Last Owner’, Value =>
$my_owner);
my ($code, $msg) = $self->TicketObj->SetOwner(6, ‘Force’);
return 1;

This gave me the result I wanted it to have :slight_smile:

Problem solved.

– Bart

2011/10/4 Bart bart@pleh.info

Hi,

I’m currently struggling with this scrip, in separate parts it works but
together it kinda makes a mess O_o

Some background on the scrip. We want the ticket owner to be set to Nobody
on close, when tickets reopen they will show up in the New/nobody queue for
everyone in a support group to pickup instead of the previous owner.
But, we do want the ability to make a simple search query on resolved
tickets and sort them by owner. Basically for our managers so they can see
if the tickets are distributed evenly, etc.
For that purpose I figured I could fill in the owner name into a CF and
have the actual owner set to nobody.

Below the scrip:

my $my_owner = $self->TicketObj->OwnerObj->Name;

$self->TicketObj->AddCustomFieldValue(Field => ‘Last Owner’, Value =>
$my_owner);
my ($code, $msg) = $self->TicketObj->SetOwner(6, ‘Force’);
return 1;

What happens is that the first two lines fill the current owner’s name
into a CF called “Last Owner”.
After that it should change the owner to Nobody, in my case the UID of
Nobody is number 6. I’ve set it to force since it doesn’t always work
correctly if you leave the force bit out.

When I run this scrip separately it works, I can set the owner to nobody +
if I leave the last bit out I’m able to set the current owner in the CF
called “Last Owner”.
But when using them together as shown in the scrip above it doesn’t work
the way I want it to.

It then seems to first set the owner to nobody and then fill the CF with
the username Nobody… So yes it works but I’m expecting the scrip to first
get the old owner name and fill that one into the CF.

I’ve also tried setting this first part into the “prep” code and the
second part (changing the owner) into the cleanup code, but that doesn’t
seem to change anything.
The other thing I’ve tried was changing the TransactionBatch to
TransactionCreate and back. With TransactionCreate it doesn’t fully work,
when using TransactionBatch it does work but instead of the previous ticket
owner it fills in the Nobody user…

So, does anyone know a simple way to fix this? I’m expecting RT to
sequentially do the above scrip but I guess I’m missing something in order
for it to work.

Thanks in advance.

– Bart

After some more playing around and search it now seems to be fixed
permenantly (I hope at least lol)

This scrip does what I want it to do:

my $actor_id = $self->TransactionObj->Creator;

my $temp_user = RT::User->new();
$temp_user->Load($actor_id);
my $actor_name = $temp_user->Name();

$self->TicketObj->AddCustomFieldValue(Field => ‘Ticket Solver’, Value =>
$actor_name);

my ($code, $msg) = $self->TicketObj->SetOwner(6, ‘Force’);

return 1;

This seems to get the actioning user from the transaction, then via some
magic I’ve found in the wiki it gets the name and afterwards it fills in the
name into the Ticket Solver field.

After that, it simply sets the owner to nobody.

This wiki page helped me out:

Hope this helps someone else in the end :slight_smile:

– Bart2011/10/5 Bart bart@pleh.info

Hi,

After some more testing the below scrip doesn’t seem to do what it should…

It now does work but it fills in the wrong user. Sometimes a colleague of
mine instead of myself, while I’m the person hitting “Resolved”. Or
sometimes root, I guess because it runs a scrip when closing and the actual
last actioning user almost always is root.

Is there better, more clever, way for getting the actioning user “or” the
ticket owner into a CF during ticket resolve and afterwards setting the
owner to nobody?

– Bart

2011/10/4 Bart bart@pleh.info

Never mind…

I just stumbled upon the CreatorObj.

Changed the scrip to the following:

my $my_owner = $self->TicketObj->CreatorObj->Name;

$self->TicketObj->AddCustomFieldValue(Field => ‘Last Owner’, Value =>
$my_owner);
my ($code, $msg) = $self->TicketObj->SetOwner(6, ‘Force’);
return 1;

This gave me the result I wanted it to have :slight_smile:

Problem solved.

– Bart

2011/10/4 Bart bart@pleh.info

Hi,

I’m currently struggling with this scrip, in separate parts it works but
together it kinda makes a mess O_o

Some background on the scrip. We want the ticket owner to be set to
Nobody on close, when tickets reopen they will show up in the New/nobody
queue for everyone in a support group to pickup instead of the previous
owner.
But, we do want the ability to make a simple search query on resolved
tickets and sort them by owner. Basically for our managers so they can see
if the tickets are distributed evenly, etc.
For that purpose I figured I could fill in the owner name into a CF and
have the actual owner set to nobody.

Below the scrip:

my $my_owner = $self->TicketObj->OwnerObj->Name;

$self->TicketObj->AddCustomFieldValue(Field => ‘Last Owner’, Value =>
$my_owner);
my ($code, $msg) = $self->TicketObj->SetOwner(6, ‘Force’);
return 1;

What happens is that the first two lines fill the current owner’s name
into a CF called “Last Owner”.
After that it should change the owner to Nobody, in my case the UID of
Nobody is number 6. I’ve set it to force since it doesn’t always work
correctly if you leave the force bit out.

When I run this scrip separately it works, I can set the owner to nobody

  • if I leave the last bit out I’m able to set the current owner in the CF
    called “Last Owner”.
    But when using them together as shown in the scrip above it doesn’t work
    the way I want it to.

It then seems to first set the owner to nobody and then fill the CF with
the username Nobody… So yes it works but I’m expecting the scrip to first
get the old owner name and fill that one into the CF.

I’ve also tried setting this first part into the “prep” code and the
second part (changing the owner) into the cleanup code, but that doesn’t
seem to change anything.
The other thing I’ve tried was changing the TransactionBatch to
TransactionCreate and back. With TransactionCreate it doesn’t fully work,
when using TransactionBatch it does work but instead of the previous ticket
owner it fills in the Nobody user…

So, does anyone know a simple way to fix this? I’m expecting RT to
sequentially do the above scrip but I guess I’m missing something in order
for it to work.

Thanks in advance.

– Bart