[rt-users] Scrip to automatically set Owner based on a Custom Field

Emmanuel Lacour elacour at easter-eggs.com
Fri Oct 30 02:59:16 EDT 2009


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;




More information about the rt-users mailing list