Skip to content

Interne uitbreiding van het OTOBO-kernelsysteem

In dit artikel leert u hoe u OTOBO rechtstreeks in de kernel kunt aanpassen – via XML-configuratie, Perl-modules en templates. We laten u stap voor stap zien hoe u een eigen „HelloWorld“-module in het systeem integreert.


1. Mapstructuur

Alle aanpassingen bevinden zich onder uw OTOBO-clone in de Kernel/-map:

Kernel/
├─ Config/Files/           # XML-registraties
│  └─ XML/
├─ System/                 # Geschäftslogica-modules (Core)
├─ Modules/                # Frontend-controllers (Agent/Klant)
├─ Output/HTML/Standard/   # Template Toolkit (TT)-templates
└─ Language/               # Vertalingen

2. XML-configuratie

Nieuwe modules en routes worden via XML geregistreerd. Maak in Kernel/Config/Files/XML/ een bestand HelloWorld.xml aan:

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

  <!-- 1. Frontend-module registreren -->
  <Setting Name="Frontend::Module###AgentHelloWorld" Required="1" Valid="1">
    <Navigation>Frontend::Agent::ModuleRegistration</Navigation>
    <Value>
      <Item ValueType="FrontendRegistration">
        <Hash>
          <Item Key="Group"><Array><Item>gebruikers</Item></Array></Item>
          <Item Key="Description" Translatable="1">HelloWorld-module</Item>
          <Item Key="Title"       Translatable="1">HelloWorld</Item>
          <Item Key="NavBarName">HelloWorld</Item>
        </Hash>
      </Item>
    </Value>
  </Setting>

</otobo_config>

3. Core-module (Geschäftslogica)

Maak in Kernel/System/HelloWorld.pm uw logica aan:

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. Frontend-module (Controller)

In Kernel/Modules/AgentHelloWorld.pm integreert u uw logica in het Agent-frontend:

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. Templates (TT)

Maak in Kernel/Output/HTML/Standard/AgentHelloWorld.tt het volgende template aan:

tt
[% Data.Text %]

<p>Dit is uw zelfgemaakte HelloWorld-module!</p>

6. Voorbeeld-workflow

  1. Opnieuw laden:

    bash
    bin/otobo.Console.pl Maint::Config::Rebuild
  2. Cache legen:

    bash
    bin/otobo.Console.pl Maint::Cache::Delete
  3. Browser openen: Agent-interface → Menu → „HelloWorld“


7. Tips & Best Practices

  • ObjectDependencies netjes declareren (bijv. DB, Layout).
  • POD-documentatie in Perl-modules niet vergeten.
  • Vertalingen onder Kernel/Language/nl_*.pm onderhouden.
  • Unit-tests met Mojolicious instellen (optioneel).
  • Na elke wijziging Config rebuild & Cache legen.

Hiermee heeft u een solide sjabloon om verdere kernel-uitbreidingen in OTOBO te realiseren. Veel plezier bij het ontwikkelen!