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 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
:
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:
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
:
[% Data.Text %]
<p>Questo è il tuo modulo HelloWorld personalizzato!</p>
6. Esempio di flusso di lavoro
Ricarica:
bashbin/otobo.Console.pl Maint::Config::Rebuild
Svuota la cache:
bashbin/otobo.Console.pl Maint::Cache::Delete
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!