Sviluppo di plugin con pacchetti OPM
In questa sezione, imparerai come creare, installare e distribuire i tuoi plugin come pacchetti OPM per OTOBO.
1. Struttura di un file .sopm
Il file SOPM (*.sopm
) contiene tutti i metadati del tuo pacchetto:
<?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> <!-- Versione minima di OTOBO -->
<Vendor>IlTuoNome Srl</Vendor>
<URL>https://github.com/il-tuo-utente/otobo-mypackage</URL>
<License>GPL-3.0</License>
<Description Lang="it">Estensione per funzioni speciali</Description>
<ChangeLog Version="1.0.0" Date="13.06.2025 12:00:00">Prima pubblicazione</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/it_MyExtension.pm" Permission="644"></File>
</Filelist>
</otobo_package>
- Name/Version/Framework: Identificatore univoco del pacchetto e versione compatibile di OTOBO.
- Filelist: Tutti i file che verranno copiati durante l'installazione.
2. File e struttura delle directory
Crea il tuo pacchetto in una directory separata, ad esempio MyExtension/
:
MyExtension/
├─ MyExtension.sopm
├─ Kernel/
│ ├─ Config/Files/XML/MyExtension.xml
│ ├─ System/MyExtension.pm
│ ├─ Modules/AgentMyPage.pm
│ ├─ Output/HTML/Standard/AgentMyPage.tt
│ └─ Language/it_MyExtension.pm
└─ sql/
└─ create_tables.sql # opzionale, per le migrazioni del database
- Kernel/Config/Files/XML/: Registra i moduli, i menu o i campi dinamici.
- Kernel/System/: Classe di logica aziendale.
- Kernel/Modules/: Controller frontend.
- Template e lingua: file TT + file di traduzione.pm.
3. Creazione e installazione del pacchetto
3.1 Creazione dell'OPM
Utilizza lo strumento da riga di comando per creare un OPM a partire dalla tua SOPM:
cd /percorso/verso/MyExtension
bin/otobo.Console.pl Dev::Package::Build \
--sopm-file MyExtension.sopm \
--output /tmp/MyExtension.opm
3.2 Installazione
Interfaccia amministrativa: carica il pacchetto in Amministrazione → Impostazioni → Gestione pacchetti. Console:
bin/otobo.Console.pl Admin::Package::Install /tmp/MyExtension.opm
Per disinstallare o aggiornare:
bin/otobo.Console.pl Admin::Package::Uninstall /tmp/MyExtension.opm
bin/otobo.Console.pl Admin::Package::Upgrade /tmp/MyExtension.opm
4. Punti di estensione
4.1 Campi dinamici
In Kernel/Config/Files/XML/MyExtension.xml
registra un nuovo driver di campo dinamico:
<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>
Implementa il driver in Kernel/System/DynamicField/Driver/MyCustomField.pm
.
4.2 Gestore di eventi
Registra il tuo gestore di eventi:
<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>
Implementa il gestore in Kernel/System/Event/Handler/MyHandler.pm
(metodo Run()
).
4.3 Filtro di output
<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>
Implementa il filtro in Kernel/System/Output/Filter/MyFilter.pm
.
5. Distribuzione e OTOpar
Indice del repository: crea
Packages.xml
per il tuo repository:bashbin/otobo.Console.pl Dev::Package::RepositoryIndex \ --directory /var/www/otobo-packages
Aggiungi l'URL del tuo repository in SysConfig
Package::RepositoryList
.OTOpar: carica il tuo OPM su https://otopar.perl-services.de in modo che gli altri possano installarlo direttamente.
6. Esempio: pacchetto MyCalendar
- SOPM crea con nome
MyCalendar
. - Script del database
sql/create_calendar.sql
per la tabellacalendar_events
. - Configurazione XML definisce un nuovo campo del ticket "Data".
- Modulo principale
Kernel/System/CalendarEvent.pm
con metodi CRUD. - Moduli frontend
Kernel/Modules/AgentCalendar.pm
, templateAgentCalendar.tt
. - Crea pacchetto e caricalo su OTOpar.
7. Suggerimenti e best practice
- Numero di versione nel
sopm
aggiorna (SemVer). - Migrazioni del database in
sql/
versiona in modo pulito. - Test unitari per le classi di sistema e dei moduli.
- Documentazione nel file README più POD nei moduli Perl.
- Traduzioni in
Language/it_*.pm
een_*.pm
.
In questo modo, avrai una base solida per sviluppare, distribuire e utilizzare plugin OTOBO personalizzati nei progetti dei clienti. Buon divertimento!