Plugin Fields vs. native Felder in GLPI 11

Benutzerdefinierte Felder in GLPI 11: wann Sie das Plugin Fields nutzen (Felder in bestehenden Typen) und wann Sie native benutzerdefinierte Objekte modellieren. Vergleich, Urteil nach Szenario, tatsächliche Wartungskosten und die Falle beim Upgrade.

In diesem Artikel6 Abschnitte

Ein benutzerdefiniertes Feld in GLPI ist eine Architekturentscheidung, kein Mausklick. Die richtige Frage lautet nicht "Fields oder nativ?", sondern: Sind die Daten, die Sie speichern müssen, ein Attribut von etwas bereits Vorhandenem, oder sind sie etwas Neues mit eigenem Lebenszyklus? Diese Antwort bestimmt das Werkzeug - und die Kosten, die Sie in den kommenden Jahren tragen.

Was jeder Ansatz wirklich löst

Das Plugin Fields (gepflegt von Teclib) hängt zusätzliche Felder an Objekttypen, die es in GLPI bereits gibt: Ticket, Computer, Benutzer, Vertrag, Lieferant. Sie erstellen einen Container (einen Block von Feldern), wählen, in welchen Typen er erscheint, und fügen Felder vom Typ Text, Dropdown, Datum, Zahl, Ja/Nein und URL hinzu. Es bleibt der praktische Weg, um zu sagen: "Jedes Ticket braucht ein Feld Kostenstelle".

Die benutzerdefinierten Objekte von GLPI 11 (benutzerdefinierte Assets) lösen ein anderes Problem: Sie erstellen einen neuen Objekttyp direkt im Core, ohne Plugin. Sie sind der offizielle Nachfolger des alten GenericObject. Sie definieren "Fahrzeug", "Besprechungsraum" oder "Laborgerät" mit eigenen Feldern, und der Typ verhält sich wie ein vollwertiges Asset: Er wird inventarisiert, mit Tickets verknüpft und erscheint in Berichten.

Die Grenze zusammengefasst: Fields fügt etwas Bestehendem Attribute hinzu; ein natives Objekt erstellt die Entität. Wer beides verwechselt, schafft die Ursache für fast jeden Wartungsschmerz, der später auftritt.

Direkter Vergleich

KriteriumPlugin FieldsBenutzerdefiniertes Objekt (GLPI 11 nativ)
Was es tutFügt bestehenden Typen Felder hinzuErstellt einen neuen Objekttyp
Abhängig von einem PluginJa - harte Abhängigkeit beim Major-UpgradeNein - im Core enthalten
Wo die Daten gespeichert werdenEine Tabelle pro Container, parallel zum CoreIm nativen Schema von GLPI
Bedingte Felder / pro ProfilJa, aber die Sichtbarkeit ist Anzeige, keine SicherheitKeine fertige native Bedingungslogik
Suche und BerichteSearch Options mit einem LEFT JOIN pro ContainerNative Search Options, ohne zusätzliche Tabelle
Integration mit dem InventarErhält keine InventardatenJa, es ist ein inventarisierbares Asset
Migration von GLPI 10 auf 11Erfordert eine mit dem neuen Core kompatible Plugin-VersionOffizielles Ziel für GenericObject
Aufwand für den EinstiegMinuten für ein FeldStunden für die Modellierung eines Typs
Am besten geeignet fürAttribute von etwas bereits VorhandenemNeue Entität mit eigenem Lebenszyklus

Wo die Daten liegen (und warum es wichtig ist)

Jeder Container von Fields wird zu einer eigenen Tabelle in der Datenbank, mit einer Zeile pro Objekt und einer Spalte pro Feld. Bevor Sie entscheiden, lohnt sich ein Blick darauf, was in der Umgebung bereits existiert:

-- Where the Fields plugin stores values: one table per container,
-- with one row per item and one column per custom field.
SELECT table_name AS container_table
FROM information_schema.tables
WHERE table_schema = DATABASE()
  AND table_name LIKE 'glpi_plugin_fields_%'
ORDER BY table_name;

-- Definitions: containers (which types they apply to) and each one's fields
SELECT c.name AS container, c.itemtypes, f.name AS field, f.type
FROM glpi_plugin_fields_containers c
JOIN glpi_plugin_fields_fields f
  ON f.plugin_fields_containers_id = c.id
ORDER BY c.name, f.ranking;

Dies ist aus zwei betrieblichen Gründen wichtig. Erstens: Jedes als durchsuchbar markierte Feld von Fields wird zu einer Search Option, und die Suchmaschine von GLPI löst sie mit einem zusätzlichen LEFT JOIN auf die Tabelle des Containers auf. Bei Kunden mit 15 oder mehr Containern am Ticket wird die Ticketliste langsam - nicht wegen der Datenmenge, sondern wegen der JOINs im SELECT der Suche. Zweitens: Native Objekte speichern im Schema des Core, erscheinen also in Export, API und Bericht genauso wie die Standardfelder, ohne parallele Tabelle, die abgeglichen werden muss.

Der Zielkonflikt, der sich im Support zeigt

Im Support von GLPI-Landschaften für Kunden liegen die echten Kosten von Fields nicht in der Installation - sondern am Tag des Major-Upgrades. Fields ist eine harte Abhängigkeit: Bei einer Migration von GLPI 10 auf 11 startet die Umgebung erst, wenn es eine mit dem neuen Core kompatible Plugin-Version gibt. Wir haben schon Upgrade-Fenster von Kunden zurückgehalten, weil wir darauf warteten, dass das Plugin den kompatiblen Build veröffentlicht, mit Dutzenden Containern in der Produktion, die sich nicht abschalten ließen. Ein natives Objekt hat diese Hürde nicht: Es ist der Core und startet mit.

Zwei häufige Fehler, die wir oft korrigieren. Der erste besteht darin, eine ganze Entität als Stapel von Feldern am Ticket zu modellieren - ein "Wartungsvertrag" wird zu 12 Fields-Feldern am Ticket, die sich nicht vernünftig auflisten, filtern oder verknüpfen lassen; hier hätte ein Objekt gepasst (oder das Vertragsmodul von GLPI selbst). Der zweite ist das Gegenteil: ein komplettes benutzerdefiniertes Asset für etwas zu erstellen, was eigentlich zwei organisatorische Attribute an einem bestehenden Typ waren - Modellierungskomplexität ohne Gegenwert. Und eine Warnung, die wir immer aussprechen: Ein Feld von Fields pro Profil auszublenden ist Anzeige, keine Sicherheit. Der Wert bleibt in der Datenbank und gelangt über API, Export oder Suche nach außen. Wenn die Daten sensibel sind, braucht es eine andere Kontrolle.

Urteil nach Szenario

Nutzen Sie Fields, wenn die Daten ein Attribut eines bereits vorhandenen Typs sind und Sie keinen neuen Typ verwalten wollen: Kostenstelle und Projekt am Ticket, interne Inventarnummer am Computer, Personalnummer am Benutzer, Pflichtfelder oder bedingte Felder je ITIL-Kategorie des Tickets. Es geht schnell, ohne Ausfallzeit und ohne Schemamigration, die Sie verwalten müssten.

Nutzen Sie ein natives benutzerdefiniertes Objekt, wenn die "Sache" einen eigenen Lebenszyklus hat und Sie sie wie ein Objekt auflisten, filtern und mit Tickets verknüpfen werden: Fahrzeuge, Räume, Laborassets, Geräte, die in keinen Standardtyp passen. Und zwingend, wenn Sie bei der Migration auf GLPI 11 von GenericObject weggehen - es ist der offizielle Ersatzweg.

Beide können nebeneinander bestehen. Es ist legitim, ein benutzerdefiniertes Asset für die Entität zu haben und trotzdem mit Fields das eine oder andere organisatorische Attribut an Tickets zu hängen, die auf dieses Asset verweisen. Was nicht geht: das eine für die Arbeit des anderen zu nutzen.

Kosten und Aufwand

Lizenz: Beide sind kostenlos (GPL). Die eigentlichen Kosten liegen in der Wartung. Fields kostet Abhängigkeitsrisiko bei jedem Major-Upgrade und Suchlast, je mehr Container es gibt. Ein natives Objekt kostet anfängliche Modellierung - Sie entwerfen einen Typ, statt ein Feld hinzuzufügen -, belastet danach aber weder Upgrades noch parallele JOINs. Als ehrliche Spanne: Ein Fields-Feld hinzuzufügen dauert Minuten; ein sauber modelliertes benutzerdefiniertes Asset dauert einige Stunden bis zu einem Tag, einschließlich Feldern, Profilen und Inventar.

Bei NexTool implementieren und betreuen wir beide Ansätze in GLPI-Umgebungen von Kunden. Wenn Sie zwischen weiteren angehängten Feldern und der Modellierung eines Objekts abwägen - oder GenericObject verlassen müssen, ohne den Verlauf zu zerstören -, hilft unsere GLPI-Beratung, diese Entscheidung zu treffen, bevor sie zur technischen Schuld wird.


Geprüft vom Team von NexTool Solutions.

Häufig gestellte Fragen

Ja, Fields hat eine mit GLPI 11 kompatible Versionslinie und bleibt der praktische Weg, um bestehenden Typen (Ticket, Computer, Benutzer) Felder hinzuzufügen. Der kritische Punkt ist nicht die Kompatibilität an sich, sondern das Timing: Bei einem Major-Upgrade startet die Umgebung erst, wenn es den Build des Plugins für den neuen Core gibt. Planen Sie das Wartungsfenster mit dieser Abhängigkeit ein.

Es kommt auf den Fall an. Die nativen Felder von GLPI 11 leben in den benutzerdefinierten Objekten (benutzerdefinierte Assets) - einem neuen Objekttyp, den Sie im Core erstellen. Um Felder an bestehende Typen wie Ticket oder Computer zu hängen, bleibt Fields der praktische Weg. Sie ersetzen Fields durch eine native Lösung, wenn Sie eigentlich eine neue Entität brauchten und nicht weitere Attribute an einem bestehenden Typ.

Das kann passieren. Jedes durchsuchbare Feld wird zu einer Search Option, und die Suchmaschine löst sie mit einem LEFT JOIN auf die Tabelle des Containers auf. Mit vielen Containern am Ticket (in der Praxis ab 15 oder mehr) häuft die Suche JOINs an, und die Liste verliert an Performance. Abhilfe: Markieren Sie nur als durchsuchbar, was in der Suche erscheinen muss, und fassen Sie Felder in weniger Containern zusammen.

Nein. Die Sichtbarkeit pro Profil in Fields ist eine Frage der Anzeige (Display), nicht der Sicherheit. Der Wert bleibt in der Tabelle des Containers gespeichert und kann über API, Export oder Suche von allen gelesen werden, die Zugriffsrechte auf das Objekt haben. Wenn die Daten sensibel sind, muss die Kontrolle in der Berechtigungsebene des Objekts selbst oder außerhalb von Fields liegen.

Die benutzerdefinierten Objekte sind der offizielle Nachfolger von GenericObject in GLPI 11. In der Praxis legen Sie jeden Typ aus GenericObject als benutzerdefiniertes Asset neu an, ordnen die Felder neu zu und migrieren die Daten. Es gibt keine einzelne Schaltfläche mit garantierter automatischer Konvertierung, behandeln Sie es also als Projekt: Inventarisieren Sie die Typen, ordnen Sie die Felder zu, prüfen Sie die Verknüpfungen mit Tickets und testen Sie in der Abnahmeumgebung, bevor Sie in Produktion gehen.

Brauchen Sie Hilfe?