Skip to content

Plugin-ontwikkeling met OPM-pakketten

In dit hoofdstuk leer je hoe je eigen plugins als OPM-pakketten voor OTOBO maakt, installeert en distribueert.


1. Opbouw van een .sopm

Het SOPM-bestand (*.sopm) bevat alle metagegevens van je pakket:

xml
<?xml version="1.0" encoding="utf-8"?>
<otobo_package version="1.0">
  <Name>MijnUitbreiding</Name>
  <Version>1.0.0</Version>
  <Framework>10.0.x</Framework>   <!-- Minimale versie OTOBO -->
  <Vendor>JouwNaam BV</Vendor>
  <URL>https://github.com/jouw-gebruiker/otobo-mijnpakket</URL>
  <License>GPL-3.0</License>
  <Description Lang="nl">Uitbreiding voor speciale functionaliteiten</Description>
  <ChangeLog Version="1.0.0" Date="13.06.2025 12:00:00">Eerste publicatie</ChangeLog>
  <Filelist>
    <File Location="Kernel/Config/Files/XML/MijnUitbreiding.xml" Permission="644"></File>
    <File Location="Kernel/System/MijnUitbreiding.pm"            Permission="644"></File>
    <File Location="Kernel/Modules/AgentMijnPagina.pm"           Permission="644"></File>
    <File Location="Kernel/Output/HTML/Standard/AgentMijnPagina.tt" Permission="644"></File>
    <File Location="Kernel/Language/nl_MijnUitbreiding.pm"       Permission="644"></File>
  </Filelist>
</otobo_package>
  • Naam/Versie/Framework: Unieke pakketidentificatie en compatibele OTOBO-versie.
  • Filelist: Alle bestanden die worden gekopieerd tijdens de installatie.

2. Bestanden & directorystructuur

Maak je pakket in een eigen directory aan, bijv. MijnUitbreiding/:

MijnUitbreiding/
├─ MijnUitbreiding.sopm
├─ Kernel/
│  ├─ Config/Files/XML/MijnUitbreiding.xml
│  ├─ System/MijnUitbreiding.pm
│  ├─ Modules/AgentMijnPagina.pm
│  ├─ Output/HTML/Standard/AgentMijnPagina.tt
│  └─ Language/nl_MijnUitbreiding.pm
└─ sql/
   └─ create_tables.sql      # optioneel, voor DB-migraties
  • Kernel/Config/Files/XML/: Registreert modules, menu's of dynamische velden.
  • Kernel/System/: Geschäftslogica-klasse.
  • Kernel/Modules/: Frontend-controller.
  • Templates & Taal: TT-bestanden + vertaling-.pm.

3. Pakket maken & installeren

3.1 OPM maken

Gebruik het CLI-hulpmiddel om uit je SOPM een OPM te maken:

bash
cd /pad/naar/MijnUitbreiding
bin/otobo.Console.pl Dev::Package::Build \
  --sopm-file MijnUitbreiding.sopm \
  --output /tmp/MijnUitbreiding.opm

3.2 Installatie

Admin-UI: Pakket uploaden onder Admin → Instellingen → Pakketbeheer. Console:

bash
bin/otobo.Console.pl Admin::Package::Install /tmp/MijnUitbreiding.opm

Om te deinstalleren of updaten:

bash
bin/otobo.Console.pl Admin::Package::Uninstall /tmp/MijnUitbreiding.opm
bin/otobo.Console.pl Admin::Package::Upgrade   /tmp/MijnUitbreiding.opm

4. Uitbreidingspunten

4.1 Dynamische velden

In Kernel/Config/Files/XML/MijnUitbreiding.xml registreer je een nieuw dynamisch veld:

xml
<Setting Name="DynamicFields::Driver###MijnAangepastVeld" Required="0" Valid="1">
  <Navigation>DynamicFields::Driver</Navigation>
  <Value>
    <Array>
      <Item><Hash>
        <Item Key="DriverName">MijnAangepastVeld</Item>
        <Item Key="Module">Kernel::System::DynamicField::Driver::MijnAangepastVeld</Item>
      </Hash></Item>
    </Array>
  </Value>
</Setting>

Implementeer de driver in Kernel/System/DynamicField/Driver/MijnAangepastVeld.pm.

4.2 Event-handler

Meld je event-handler aan:

xml
<Setting Name="Event::EventHandler###MijnHandler" Required="0" Valid="1">
  <Navigation>Event::EventHandler</Navigation>
  <Value>
    <Array>
      <Item><Hash>
        <Item Key="Module">Kernel::System::Event::Handler::MijnHandler</Item>
      </Hash></Item>
    </Array>
  </Value>
</Setting>

Handler implementeren in Kernel/System/Event/Handler/MijnHandler.pm (Run()-methode).

4.3 Output-filter

xml
<Setting Name="Output::Filter###MijnFilter" Required="0" Valid="1">
  <Navigation>Output::Filter</Navigation>
  <Value>
    <Array>
      <Item><Hash>
        <Item Key="Module">Kernel::System::Output::Filter::MijnFilter</Item>
      </Hash></Item>
    </Array>
  </Value>
</Setting>

Filter implementeren in Kernel/System/Output/Filter/MijnFilter.pm.


5. Implementatie & OTOpar

  • Repository-index: Maak Packages.xml voor je eigen repository:

    bash
    bin/otobo.Console.pl Dev::Package::RepositoryIndex \
      --directory /var/www/otobo-pakketten
  • Voeg onder SysConfig Package::RepositoryList je repository-URL toe.

  • OTOpar: Laad je OPM op bij https://otopar.perl-services.de zodat anderen het rechtstreeks kunnen installeren.


6. Voorbeeld: MyCalendar-pakket

  1. SOPM aanmaken met naam MyCalendar.
  2. DB-script sql/create_calendar.sql voor tabel calendar_events.
  3. Config-XML definieert nieuw ticketveld „Termin“.
  4. Core-module Kernel/System/CalendarEvent.pm met CRUD-methoden.
  5. Frontend-modules Kernel/Modules/AgentCalendar.pm, template AgentCalendar.tt.
  6. Pakket maken en in OTOpar uploaden.

7. Tips & Best Practices

  • Versienummer in sopm aanpassen (SemVer).
  • DB-migraties in sql/ netjes versioneren.
  • Unit-tests voor System- en Module-klassen aanmaken.
  • Documentatie in README plus POD in Perl-modules.
  • Vertalingen in Language/nl_*.pm en en_*.pm.

Hiermee heb je een solide basis om eigen OTOBO-plugins te ontwikkelen, te distribueren en in klantprojecten onderhoudbaar te implementeren. Veel plezier!