Plugin-Entwicklung mit OPM-Paketen
Plugin-Entwicklung mit OPM-Paketen
Abschnitt betitelt „Plugin-Entwicklung mit OPM-Paketen“In diesem Abschnitt lernst du, wie du eigene Plugins als OPM-Pakete für OTOBO erstellst, installierst und verteilst.
1. Aufbau einer .sopm
Abschnitt betitelt „1. Aufbau einer .sopm“Die SOPM-Datei (*.sopm) enthält alle Metadaten deines Pakets:
<?xml version="1.0" encoding="utf-8"?><otobo_package version="1.0"> <Name>MyExtension</Name> <Version>1.0.0</Version> <Framework>10.0.x</Framework> <!-- Mindestversion OTOBO --> <Vendor>DeinName GmbH</Vendor> <URL>https://github.com/dein-user/otobo-mypackage</URL> <License>GPL-3.0</License> <Description Lang="de">Erweiterung für spezielle Funktionen</Description> <ChangeLog Version="1.0.0" Date="13.06.2025 12:00:00">Erstveröffentlichung</ChangeLog> <Filelist> <File Location="Kernel/Config/Files/XML/MyExtension.xml" Permission="644"></File> <File Location="Kernel/System/MyExtension.pm" Permission="644"></File> <File Location="Kernel/Modules/AgentMyPage.pm" Permission="644"></File> <File Location="Kernel/Output/HTML/Standard/AgentMyPage.tt" Permission="644"></File> <File Location="Kernel/Language/de_MyExtension.pm" Permission="644"></File> </Filelist></otobo_package>- Name/Version/Framework: Eindeutige Paketkennung und kompatible OTOBO-Version.
- Filelist: Alle Dateien, die beim Installieren kopiert werden.
2. Dateien & Verzeichnisstruktur
Abschnitt betitelt „2. Dateien & Verzeichnisstruktur“Lege dein Paket in einem eigenen Verzeichnis an, z.B. MyExtension/:
MyExtension/├─ MyExtension.sopm├─ Kernel/│ ├─ Config/Files/XML/MyExtension.xml│ ├─ System/MyExtension.pm│ ├─ Modules/AgentMyPage.pm│ ├─ Output/HTML/Standard/AgentMyPage.tt│ └─ Language/de_MyExtension.pm└─ sql/ └─ create_tables.sql # optional, für DB-Migrationen- Kernel/Config/Files/XML/: Registriert Module, Menüs oder Dynamic Fields.
- Kernel/System/: Geschäftslogik-Klasse.
- Kernel/Modules/: Frontend-Controller.
- Templates & Sprache: TT-Dateien + Übersetzungs-.pm.
3. Paket bauen & installieren
Abschnitt betitelt „3. Paket bauen & installieren“3.1 OPM erzeugen
Abschnitt betitelt „3.1 OPM erzeugen“Nutze das CLI-Tool, um aus deiner SOPM ein OPM zu bauen:
cd /pfad/zu/MyExtensionbin/otobo.Console.pl Dev::Package::Build \ --sopm-file MyExtension.sopm \ --output /tmp/MyExtension.opm3.2 Installation
Abschnitt betitelt „3.2 Installation“Admin-UI: Paket hochladen unter Admin → Einstellungen → Paketverwaltung. Konsole:
bin/otobo.Console.pl Admin::Package::Install /tmp/MyExtension.opmZum Deinstallieren bzw. Aktualisieren:
bin/otobo.Console.pl Admin::Package::Uninstall /tmp/MyExtension.opmbin/otobo.Console.pl Admin::Package::Upgrade /tmp/MyExtension.opm4. Erweiterungspunkte
Abschnitt betitelt „4. Erweiterungspunkte“4.1 Dynamic Fields
Abschnitt betitelt „4.1 Dynamic Fields“In Kernel/Config/Files/XML/MyExtension.xml registrierst du einen neuen Dynamic Field Driver:
<Setting Name="DynamicFields::Driver###MyCustomField" Required="0" Valid="1"> <Navigation>DynamicFields::Driver</Navigation> <Value> <Array> <Item><Hash> <Item Key="DriverName">MyCustomField</Item> <Item Key="Module">Kernel::System::DynamicField::Driver::MyCustomField</Item> </Hash></Item> </Array> </Value></Setting>Implementiere den Driver in Kernel/System/DynamicField/Driver/MyCustomField.pm.
4.2 Event-Handler
Abschnitt betitelt „4.2 Event-Handler“Melde deinen Event-Handler an:
<Setting Name="Event::EventHandler###MyHandler" Required="0" Valid="1"> <Navigation>Event::EventHandler</Navigation> <Value> <Array> <Item><Hash> <Item Key="Module">Kernel::System::Event::Handler::MyHandler</Item> </Hash></Item> </Array> </Value></Setting>Handler in Kernel/System/Event/Handler/MyHandler.pm implementieren (Run()-Methode).
4.3 Output-Filter
Abschnitt betitelt „4.3 Output-Filter“<Setting Name="Output::Filter###MyFilter" Required="0" Valid="1"> <Navigation>Output::Filter</Navigation> <Value> <Array> <Item><Hash> <Item Key="Module">Kernel::System::Output::Filter::MyFilter</Item> </Hash></Item> </Array> </Value></Setting>Filter in Kernel/System/Output/Filter/MyFilter.pm.
5. Deployment & OTOpar
Abschnitt betitelt „5. Deployment & OTOpar“-
Repository-Index: Erzeuge
Packages.xmlfür eigenes Repo:Terminal-Fenster bin/otobo.Console.pl Dev::Package::RepositoryIndex \--directory /var/www/otobo-packages -
Füge unter SysConfig
Package::RepositoryListdeine Repo-URL ein. -
OTOpar: Lade dein OPM bei https://otopar.perl-services.de hoch, damit andere es direkt installieren können.
6. Beispiel: MyCalendar-Paket
Abschnitt betitelt „6. Beispiel: MyCalendar-Paket“- SOPM anlegen mit Name
MyCalendar. - DB-Skript
sql/create_calendar.sqlfür Tabellecalendar_events. - Konfig-XML definiert neues Ticket-Feld „Termin“.
- Core-Modul
Kernel/System/CalendarEvent.pmmit CRUD-Methoden. - Frontend-Module
Kernel/Modules/AgentCalendar.pm, TemplateAgentCalendar.tt. - Paket bauen und in OTOpar upladen.
7. Tipps & Best Practices
Abschnitt betitelt „7. Tipps & Best Practices“- Versionsnummer im
sopmanpassen (SemVer). - DB-Migrationen in
sql/sauber versionieren. - Unit-Tests für System- und Module-Klassen anlegen.
- Dokumentation im README plus POD in Perl-Modulen.
- Translations in
Language/de_*.pmunden_*.pm.
Damit hast du eine solide Basis, um eigene OTOBO-Plugins zu entwickeln, zu verteilen und in Kundenprojekten wartbar einzusetzen. Viel Spaß!