Skip to content

Estensione interna del sistema OTOBO

In questo articolo imparerai a personalizzare OTOBO direttamente nel kernel – tramite configurazione XML, moduli Perl e template. Ti mostreremo passo dopo passo come integrare un modulo 'HelloWorld' personalizzato nel sistema.


1. Struttura delle directory

Tutte le personalizzazioni si trovano al di sotto della tua copia di OTOBO nella directory Kernel/:

Kernel/
├─ Config/Files/           # Registrazioni XML
│  └─ XML/
├─ System/                 # Moduli di logica aziendale (Core)
├─ Modules/                # Controller frontend (Agent/Customer)
├─ Output/HTML/Standard/   # Template Toolkit (TT)-template
└─ Language/               # Traduzioni

2. Configurazione XML

I nuovi moduli e le rotte vengono registrati tramite XML. Crea un file HelloWorld.xml in Kernel/Config/Files/XML/:

xml
<?xml version="1.0" encoding="UTF-8"?>
<otobo_config version="2.0" init="Application">

  <!-- 1. Registra il modulo frontend -->
  <Setting Name="Frontend::Module###AgentHelloWorld" Required="1" Valid="1">
    <Navigation>Frontend::Agent::ModuleRegistration</Navigation>
    <Value>
      <Item ValueType="FrontendRegistration">
        <Hash>
          <Item Key="Group"><Array><Item>users</Item></Array></Item>
          <Item Key="Description" Translatable="1">Modulo HelloWorld</Item>
          <Item Key="Title"       Translatable="1">HelloWorld</Item>
          <Item Key="NavBarName">HelloWorld</Item>
        </Hash>
      </Item>
    </Value>
  </Setting>

</otobo_config>

3. Modulo Core (logica aziendale)

Crea la tua logica in Kernel/System/HelloWorld.pm:

perl
package Kernel::System::HelloWorld;
use strict;
use warnings;
our @ObjectDependencies = ();  

sub new {
    my ($Type, %Param) = @_;
    return bless {}, $Type;
}

sub GetHelloWorldText {
    my ($Self, %Param) = @_;
    return $Self->_FormatText(String => 'Hello World');
}

sub _FormatText {
    my ($Self, %Param) = @_;
    return uc $Param{String};
}

1;

4. Modulo frontend (controller)

In Kernel/Modules/AgentHelloWorld.pm integra la tua logica nel frontend dell'agente:

perl
package Kernel::Modules::AgentHelloWorld;
use strict;
use warnings;

sub new { bless {}, shift }

sub Run {
    my ($Self, %Param) = @_;

    my $HelloObj    = $Kernel::OM->Get('Kernel::System::HelloWorld');
    my $LayoutObj   = $Kernel::OM->Get('Kernel::Output::HTML::Layout');
    my %Data;
    
    $Data{Text} = $HelloObj->GetHelloWorldText();

    return 
        $LayoutObj->Header(Title => 'HelloWorld')
      . $LayoutObj->NavigationBar()
      . $LayoutObj->Output(
          TemplateFile => 'AgentHelloWorld',
          Data         => \%Data,
        )
      . $LayoutObj->Footer();
}

1;

5. Template (TT)

Crea il seguente template in Kernel/Output/HTML/Standard/AgentHelloWorld.tt:

tt
[% Data.Text %]

<p>Questo è il tuo modulo HelloWorld personalizzato!</p>

6. Esempio di flusso di lavoro

  1. Ricarica:

    bash
    bin/otobo.Console.pl Maint::Config::Rebuild
  2. Svuota la cache:

    bash
    bin/otobo.Console.pl Maint::Cache::Delete
  3. Apri il browser: Interfaccia agente → Menu → „HelloWorld“


7. Suggerimenti e best practice

  • Dichiara le dipendenze degli oggetti in modo pulito (ad es. DB, layout).
  • Non dimenticare la documentazione POD nei moduli Perl.
  • Mantieni le traduzioni in Kernel/Language/de_*.pm.
  • Configura i test unitari con Mojolicious (opzionale).
  • Dopo ogni modifica, ricompila la configurazione e svuota la cache.

In questo modo avrai una solida base per realizzare ulteriori estensioni del kernel in OTOBO. Buon divertimento con lo sviluppo!