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 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:
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:
bin/otobo.Console.pl Admin::Package::Install /tmp/MijnUitbreiding.opm
Om te deinstalleren of updaten:
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:
<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:
<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
<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:bashbin/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
- SOPM aanmaken met naam
MyCalendar
. - DB-script
sql/create_calendar.sql
voor tabelcalendar_events
. - Config-XML definieert nieuw ticketveld „Termin“.
- Core-module
Kernel/System/CalendarEvent.pm
met CRUD-methoden. - Frontend-modules
Kernel/Modules/AgentCalendar.pm
, templateAgentCalendar.tt
. - 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
enen_*.pm
.
Hiermee heb je een solide basis om eigen OTOBO-plugins te ontwikkelen, te distribueren en in klantprojecten onderhoudbaar te implementeren. Veel plezier!