How to add a custom column to OTRS ticket view (dashboard)

Dennis picture Dennis · Aug 11, 2014 · Viewed 16.8k times · Source

I've been trying to append some more data to an OTRS ticket (newest version). And I have managed to get the information in the ticket data alright, however, I do not know how to access it in the view. Most data seems to be parsed through via $QData/$Data, however, all I get when I print my variable is 16/12.

    %CustomerCompanyName = $Self->{CustomerCompanyObject}->CustomerCompanyGet( CustomerID => $Ticket{CustomerID} ); 

    #} 
    $Ticket{CustomerCompanyName} = \%CustomerCompanyName;

And I want to access it in the dtl AgentDashboardTicketGeneric.dtl, however, $Data{"CustomerCompanyName"} is empty. I've managed to get the hash or 16/12 out. Again, in the variable $Ticket we've managed to dump the variable and see the data is actually in there (without actually being able to access it, we can't figure out which data type it is and have tried all possible ways we could think of).

Edit: I figured it out. It worked with Johannes solution, however, the value of the column in the SysConfig had to be 2, and not 1.

Answer

Hannes_hal picture Hannes_hal · Aug 11, 2014

you can access all Ticket Data through the User Interface. In every widget, in the top right corner you can access the settings and remove, add, sort columns.

If you need the Customer Company data, which are not bound to the ticket-data, then you need to modify / extend the given module (Kernel::Output::HTML::DashboardTicketGeneric). Thats the reason why $Data{"CustomerCompanyName"} is empty, because the customer company stuff is not loaded there.

IMHO you don't need to modify the dtl. Add the new column in the sysconfig:

HTTP://OTRSHOST/otrs/index.pl?Action=AdminSysConfig;Subaction=Edit;SysConfigSubGroup=Frontend%3A%3AAgent%3A%3ADashboard;SysConfigGroup=Ticket Add the new Column "CompanyName" to every widgets DefaultColumns. Sysconfig

(Hint: here you can also add DynamicFields using DynamicField_XXX)

Then modify the Code in DashboardTicketGeneric.pm

First: add the module (around L:21)

use Kernel::System::CustomerCompany;

after that initiate the module (after CustomerUserObject around L: 44)

$Self->{CustomerCompanyObject} = Kernel::System::CustomerCompany->new(%Param);

Then add the logic to the module (around L: 1414 - after the customer name block:

            elsif ( $Column eq 'CompanyName' ) {

                # get customer company name
                my %CompanyData;
                if ( $Ticket{CustomerID} ) {
                    %CompanyData = $Self->{CustomerCompanyObject}->CustomerCompanyGet(
                        CustomerID => $Ticket{CustomerID},
                    );
                }
                $DataValue = $CompanyData{CustomerCompanyName};
            }

enter image description here

Then delete the cache (..bin/otrs.DeleteCache.pl), because widgets use caching and your changes won't apply fast enough ;)

Add the column to your widget (top right corner in the widget -> Settings) and you should be fine. enter image description here enter image description here

Update: place the "new Module" in the custom folder

Custom/Kernel/Output/HTML/DashboardTicketGeneric.pm

regards

Johannes