Search code examples
perlotrs

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


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.


Solution

  • 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