Scrip to automatically set Owner based on a Custom Field

Hi everyone,

I have a select-one Custom Field called “Product” with 5 products in it.
Based on what product is selected (on create), I would like a specific user
to be set as the Owner (ex: ticket is created with “Product A” selected, so
John Smith works on Product A, thus should automatically be the Owner).
Does anyone know the what my Custom Action would look like to accomplish
this?

Thanks!
View this message in context: http://www.nabble.com/Scrip-to-automatically-set-Owner-based-on-a-Custom-Field-tp26122827p26122827.html

Hi everyone,

I have a select-one Custom Field called “Product” with 5 products in it.
Based on what product is selected (on create), I would like a specific user
to be set as the Owner (ex: ticket is created with “Product A” selected, so
John Smith works on Product A, thus should automatically be the Owner).
Does anyone know the what my Custom Action would look like to accomplish
this?

You should use two customfields, one ticket customfield used to set the
product for the ticket, another user customfield to set the list of
product a user works on in the user profile. Then your action will
compare those values and set the owner.

Here is a not tested code to help you:

my $Ticket = $self->TicketObj;

Get products selected for this ticket

my $T_product = $Ticket->FirstCustomFieldValue ( ‘Product’ );

Try to find a User with this product

my $user_found = undef;
my $Users = RT::Users->new ( $RT::SystemUser );
while ( my $User = $Users->Next () )
{
my $U_products = $User->CustomFieldValues ( ‘Products’ );
while ( my $product = $U_products->Next )
{
if ( $product->Content eq $T_product )
{
$user_found = $User;
last;
}
}
}

if ( $user_found && $user_found->Id ) {
$RT::Logger->debug("User “.$user_found->Name.” found for product “.$T_product.” Ticket ".$Ticket->Id );
$Ticket->SetOwner( $user_found );
} else {
return 0;
}

return 1;

I did something similar. If the custom field had a particular value,
then the owner had to be a particular user. I did it using this scrip:

Custom condition:

if ($self->TransactionObj->Type eq ‘Create’ &&
$self->TicketObj->FirstCustomFieldValue(‘Product’) eq ‘Product A’) {
return 1;
}
return 0;

Custom Action:
$self->TicketObj->SetOwner(‘John Smith’);
return 1;

Hope it helps,
Carlos

Emmanuel Lacour wrote:> On Thu, Oct 29, 2009 at 04:50:47PM -0700, jrummel wrote:

Hi everyone,

I have a select-one Custom Field called “Product” with 5 products in it.
Based on what product is selected (on create), I would like a specific user
to be set as the Owner (ex: ticket is created with “Product A” selected, so
John Smith works on Product A, thus should automatically be the Owner).
Does anyone know the what my Custom Action would look like to accomplish
this?

You should use two customfields, one ticket customfield used to set the
product for the ticket, another user customfield to set the list of
product a user works on in the user profile. Then your action will
compare those values and set the owner.

Here is a not tested code to help you:

my $Ticket = $self->TicketObj;

Get products selected for this ticket

my $T_product = $Ticket->FirstCustomFieldValue ( ‘Product’ );

Try to find a User with this product

my $user_found = undef;
my $Users = RT::Users->new ( $RT::SystemUser );
while ( my $User = $Users->Next () )
{
my $U_products = $User->CustomFieldValues ( ‘Products’ );
while ( my $product = $U_products->Next )
{
if ( $product->Content eq $T_product )
{
$user_found = $User;
last;
}
}
}

if ( $user_found && $user_found->Id ) {
$RT::Logger->debug("User “.$user_found->Name.” found for product “.$T_product.” Ticket ".$Ticket->Id );
$Ticket->SetOwner( $user_found );
} else {
return 0;
}

return 1;


http://lists.bestpractical.com/cgi-bin/mailman/listinfo/rt-users

Community help: http://wiki.bestpractical.com
Commercial support: sales@bestpractical.com

Discover RT’s hidden secrets with RT Essentials from O’Reilly Media.
Buy a copy at http://rtbook.bestpractical.com


| __ __ | Carlos Garc�a Montoro Ingeniero Inform�tico
|_Y/| Instituto de F�sica Corpuscular Centro Mixto CSIC - UV
|_] [
/| Servicios Inform�ticos
| [] | Edificio Institutos de Investigaci�n cgarcia@ific.uv.es
|C S I C| Apartado de Correos 22085 E-46071 Valencia Tel: +34 963543706
|
______| Espa�a / Spain Fax: +34 963543488

cgarcia.vcf (441 Bytes)

Jrummel,

We do this for our queue that reviews requests. Based on the Org code,
we set the owner for the person best suited to evaluate tickets for that
organization. This is our code:

Custom action Preparation Code:

set new ticket owner id value

42 - Frank

148 - Bob

5125 - Sally

9324 - Roberta

73886 - Ted

my %orgs = qw(
Budget-Direct 148
Budget-Indirect 148
Controller-AP 5125
Controller-AR 73886
Controller-GA 148
Controller-PR 42
Facilities 42
Field OPS 42
OCFO-Other 42
Procurement 9324
Property 9324
SPO 73886
Travel 5125
Other 42
);

my $cf = new RT::CustomField($RT::SystemUser);
$cf->LoadByName(Queue => $ticket->QueueObj->id,Name => “CFO-Org”);
return 0 unless $cf->id;
my $cfvalue = $ticket->FirstCustomFieldValue(‘CFO-Org’);
my $ownerid = $orgs{$cfvalue};

set Ticket Due date & Owner ID

$ticket->SetOwner($ownerid);

return 1;

Custom action Cleanup Code:

return 1;

I hope this helps.

Kenn
LBNLOn 10/29/2009 4:50 PM, jrummel wrote:

Hi everyone,

I have a select-one Custom Field called “Product” with 5 products in it.
Based on what product is selected (on create), I would like a specific user
to be set as the Owner (ex: ticket is created with “Product A” selected, so
John Smith works on Product A, thus should automatically be the Owner).
Does anyone know the what my Custom Action would look like to accomplish
this?

Thanks!

Thank you all so much for your time. I got it to work!

Expanding on it further:

Say I have 40 products, and 5 users. Each of these 5 users works on more
than one product.

Would I then have to make 5 different scrips with “OR” statements in them?
Ideally, I would like to be able to add a column to the CustomFieldValues
table containing a value of 1-5. Then make a small table called UserOwner
or something with 2 columns:

one column with values 1-5 called “id” (relating to the added column in
CustomFieldValues), and one column with usernames called “Name”.

I guess that’s a long way of asking if there is a way to accomplish this in
1 scrip by way of an SQL statement? Hopefully I explained that somewhat
coherently.

Thanks again!

Carlos Garcia Montoro wrote:

I did something similar. If the custom field had a particular value,
then the owner had to be a particular user. I did it using this scrip:

Custom condition:

if ($self->TransactionObj->Type eq ‘Create’ &&
$self->TicketObj->FirstCustomFieldValue(‘Product’) eq ‘Product A’) {
return 1;
}
return 0;

Custom Action:
$self->TicketObj->SetOwner(‘John Smith’);
return 1;

Hope it helps,
Carlos

Emmanuel Lacour wrote:

Hi everyone,

I have a select-one Custom Field called “Product” with 5 products in it.
Based on what product is selected (on create), I would like a specific
user
to be set as the Owner (ex: ticket is created with “Product A” selected,
so
John Smith works on Product A, thus should automatically be the Owner).
Does anyone know the what my Custom Action would look like to accomplish
this?

You should use two customfields, one ticket customfield used to set the
product for the ticket, another user customfield to set the list of
product a user works on in the user profile. Then your action will
compare those values and set the owner.

Here is a not tested code to help you:

my $Ticket = $self->TicketObj;

Get products selected for this ticket

my $T_product = $Ticket->FirstCustomFieldValue ( ‘Product’ );

Try to find a User with this product

my $user_found = undef;
my $Users = RT::Users->new ( $RT::SystemUser );
while ( my $User = $Users->Next () )
{
my $U_products = $User->CustomFieldValues ( ‘Products’ );
while ( my $product = $U_products->Next )
{
if ( $product->Content eq $T_product )
{
$user_found = $User;
last;
}
}
}

if ( $user_found && $user_found->Id ) {
$RT::Logger->debug(“User “.$user_found->Name.” found for product
”.$T_product." Ticket ".$Ticket->Id );
$Ticket->SetOwner( $user_found );
} else {
return 0;
}

return 1;


http://lists.bestpractical.com/cgi-bin/mailman/listinfo/rt-users

Community help: http://wiki.bestpractical.com
Commercial support: sales@bestpractical.com

Discover RT’s hidden secrets with RT Essentials from O’Reilly Media.
Buy a copy at http://rtbook.bestpractical.com


| __ __ | Carlos García Montoro Ingeniero Informático
|_Y/| Instituto de Física Corpuscular Centro Mixto CSIC - UV
|_] [
/| Servicios Informáticos
| [] | Edificio Institutos de Investigación cgarcia@ific.uv.es
|C S I C| Apartado de Correos 22085 E-46071 Valencia Tel: +34 963543706
|
______| España / Spain Fax: +34 963543488

begin:vcard
fn;quoted-printable:Carlos Garc=C3=ADa Montoro
n;quoted-printable:Garc=C3=ADa Montoro;Carlos
org;quoted-printable;quoted-printable:Instituto de F=C3=ADsica
Corpuscular;Servicios Inform=C3=A1ticos
adr;quoted-printable:Apartado de Correos 22085;;Edificio Institutos de
Investigaci=C3=B3n;Valencia;Valencia;E-46071;Spain
email;internet:Carlos.Garcia@ific.uv.es
tel;work:(+34) 96 354 37 06
x-mozilla-html:TRUE
version:2.1
end:vcard


http://lists.bestpractical.com/cgi-bin/mailman/listinfo/rt-users

Community help: http://wiki.bestpractical.com
Commercial support: sales@bestpractical.com

Discover RT’s hidden secrets with RT Essentials from O’Reilly Media.
Buy a copy at http://rtbook.bestpractical.com

View this message in context: http://old.nabble.com/Scrip-to-automatically-set-Owner-based-on-a-Custom-Field-tp26122827p26135648.html

Jrummel,

Again, look at the code I sent you. In it you have on a few users
working on more than one ORG code. Set up a qw( … …) with your
values and you’re set.

Kenn
LBNLOn 10/30/2009 12:23 PM, jrummel wrote:

Thank you all so much for your time. I got it to work!

Expanding on it further:

Say I have 40 products, and 5 users. Each of these 5 users works on more
than one product.

Would I then have to make 5 different scrips with “OR” statements in them?
Ideally, I would like to be able to add a column to the CustomFieldValues
table containing a value of 1-5. Then make a small table called UserOwner
or something with 2 columns:

one column with values 1-5 called “id” (relating to the added column in
CustomFieldValues), and one column with usernames called “Name”.

I guess that’s a long way of asking if there is a way to accomplish this in
1 scrip by way of an SQL statement? Hopefully I explained that somewhat
coherently.

Thanks again!

Carlos Garcia Montoro wrote:

I did something similar. If the custom field had a particular value,
then the owner had to be a particular user. I did it using this scrip:

Custom condition:

if ($self->TransactionObj->Type eq ‘Create’ &&
$self->TicketObj->FirstCustomFieldValue(‘Product’) eq ‘Product A’) {
return 1;
}
return 0;

Custom Action:
$self->TicketObj->SetOwner(‘John Smith’);
return 1;

Hope it helps,
Carlos

Emmanuel Lacour wrote:

On Thu, Oct 29, 2009 at 04:50:47PM -0700, jrummel wrote:

Hi everyone,

I have a select-one Custom Field called “Product” with 5 products in it.
Based on what product is selected (on create), I would like a specific
user
to be set as the Owner (ex: ticket is created with “Product A” selected,
so
John Smith works on Product A, thus should automatically be the Owner).
Does anyone know the what my Custom Action would look like to accomplish
this?

You should use two customfields, one ticket customfield used to set the
product for the ticket, another user customfield to set the list of
product a user works on in the user profile. Then your action will
compare those values and set the owner.

Here is a not tested code to help you:

my $Ticket = $self->TicketObj;

Get products selected for this ticket

my $T_product = $Ticket->FirstCustomFieldValue ( ‘Product’ );

Try to find a User with this product

my $user_found = undef;
my $Users = RT::Users->new ( $RT::SystemUser );
while ( my $User = $Users->Next () )
{
my $U_products = $User->CustomFieldValues ( ‘Products’ );
while ( my $product = $U_products->Next )
{
if ( $product->Content eq $T_product )
{
$user_found = $User;
last;
}
}
}

if ( $user_found && $user_found->Id ) {
$RT::Logger->debug(“User “.$user_found->Name.” found for product
”.$T_product." Ticket ".$Ticket->Id );
$Ticket->SetOwner( $user_found );
} else {
return 0;
}

return 1;


http://lists.bestpractical.com/cgi-bin/mailman/listinfo/rt-users

Community help: http://wiki.bestpractical.com
Commercial support: sales@bestpractical.com

Discover RT’s hidden secrets with RT Essentials from O’Reilly Media.
Buy a copy at http://rtbook.bestpractical.com


| __ __ | Carlos García Montoro Ingeniero Informático
|_Y/| Instituto de Física Corpuscular Centro Mixto CSIC - UV
|_] [
/| Servicios Informáticos
| [] | Edificio Institutos de Investigación cgarcia@ific.uv.es
|C S I C| Apartado de Correos 22085 E-46071 Valencia Tel: +34 963543706
|
______| España / Spain Fax: +34 963543488

begin:vcard
fn;quoted-printable:Carlos Garc=C3=ADa Montoro
n;quoted-printable:Garc=C3=ADa Montoro;Carlos
org;quoted-printable;quoted-printable:Instituto de F=C3=ADsica
Corpuscular;Servicios Inform=C3=A1ticos
adr;quoted-printable:Apartado de Correos 22085;;Edificio Institutos de
Investigaci=C3=B3n;Valencia;Valencia;E-46071;Spain
email;internet:Carlos.Garcia@ific.uv.es
tel;work:(+34) 96 354 37 06
x-mozilla-html:TRUE
version:2.1
end:vcard


http://lists.bestpractical.com/cgi-bin/mailman/listinfo/rt-users

Community help: http://wiki.bestpractical.com
Commercial support: sales@bestpractical.com

Discover RT’s hidden secrets with RT Essentials from O’Reilly Media.
Buy a copy at http://rtbook.bestpractical.com