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?
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;
}
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;
}
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:
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?
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:
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;
}
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:
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;
}