Skip to content

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
<?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:

bash
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:

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

Per disinstallare o aggiornare:

bash
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:

xml
<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:

xml
<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

xml
<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:

    bash
    bin/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

  1. SOPM crea con nome MyCalendar.
  2. Script del database sql/create_calendar.sql per la tabella calendar_events.
  3. Configurazione XML definisce un nuovo campo del ticket "Data".
  4. Modulo principale Kernel/System/CalendarEvent.pm con metodi CRUD.
  5. Moduli frontend Kernel/Modules/AgentCalendar.pm, template AgentCalendar.tt.
  6. 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 e en_*.pm.

In questo modo, avrai una base solida per sviluppare, distribuire e utilizzare plugin OTOBO personalizzati nei progetti dei clienti. Buon divertimento!