Durchsuchbare Dokumentation aufrufen | Zurück zur Dokumentationsübersicht
Navigation: Dokumentationen agorum core > agorum core für Entwickler
Sie können eigene Tabs in die Tab-Leiste (Seitenleiste) von agorum core hinzufügen, etwa, wenn Sie eine neue aguila-basierte UI entwickelt haben und diese systemweit (oder nur für bestimmte Benutzer) als neuen Tab anzeigen lassen möchten.
So definieren Sie einen provider:
Eigene Dateien/Administration/customers/<Konfigurationsprojekt>/js
Verwenden Sie die Aktion home provider registrieren im agorum core template manager, um einen provider nach der Definition im System zu registrieren.
Das home-Objekt, das als Parameter übergeben wird, enthält folgende Eigenschaften:
| Eigenschaft | Beschreibung |
|---|---|
| env | Gibt die aktuelle Umgebung an: 'desktop' oder 'mobile'. Sie können diese Eigenschaft verwenden, um unterschiedliche Tabs für Desktop- und Mobile-Ansichten zu registrieren. |
| tabs | Ein Array aller registrierten Tabs. Hinweis: Diese Eigenschaft ist nur innerhalb der finalize-Funktion verfügbar. |
Beispiel
module.exports = home => {
if (home.env === 'desktop') {
// Dieser Tab wird nur auf Desktop angezeigt
home.registerTab({
name: 'mein.desktop.tab',
text: 'Desktop-Tab',
icon: 'mdi:desktop',
aon: { type: 'mein.desktop.widget' }
});
}
if (home.env === 'mobile') {
// Dieser Tab wird nur auf Mobile angezeigt
home.registerTab({
name: 'mein.mobile.tab',
text: 'Mobile-Tab',
icon: 'mdi:cellphone',
aon: { type: 'mein.mobile.widget' }
});
}
};
Registriert einen neuen Tab in der Seitenleiste.
Syntax
home.registerTab(<tab>);
Felder zum Parameter „tab“
| Feld | Beschreibung |
|---|---|
| type (optional) | Definiert den Namen des registrierten Tab-Typs, den das System für diesen Tab verwendet (siehe Funktion registerType).
|
| name | Definiert einen eindeutigen internen Namen für diesen Tab.
|
| text | Definiert den Titel, den der Benutzer für diesen Tab in der Seitenleiste und im Seitentitel des Browsers sieht. |
| icon | Definiert das aguila-Icon, das der Benutzer für diesen Tab in der Seitenleiste und vor dem Seitentitel des Browsers sieht. |
| aon | Definiert die Beschreibung des aguila-Widgets, den das System als Tab anzeigt. |
| url | Definiert eine externe URL, die in einem neuen Fenster angezeigt wird. Wenn url gesetzt ist, wird kein aon-Widget benötigt. |
Beispiel
Dieses Beispiel zeigt die Anwendung der Funktion.
module.exports = home => {
home.registerTab({
name: 'sample.package.tab.test',
text: 'Test-Tab',
icon: 'agorum:rounded-square-5;color=LightSeaGreen;scale=.9|ionicon:search;color=white;scale=.8',
aon: {
type: 'sample.package.tab.test'
}
});
};
Registriert einen neuen Tab-Typ, den darauffolgende registerTab-Aufrufe verwenden können.
Syntax
home.registerType(<name>, <builder>);
Parameter
| Parameter | Beschreibung |
|---|---|
| name | Definiert einen eindeutigen internen Namen für diesen Tab-Typ. Sie können diesen Tab-Typ als type für Aufrufe der Funktion registerTab verwenden (siehe Beispiel). |
| builder | Definiert Funktionen, die das System aufruft, wenn Sie einen Tab dieses Typs registrieren.
|
Dieses Beispiel zeigt die Anwendung der Funktion.
module.exports = home => {
// Neuen Typ "sample.package.tab.type" registrieren
home.registerType('sample.package.tab.type', tab => {
tab.name = 'sample.package.tab.type.' + tab.id;
tab.text = 'Test-Tab ' + tab.id;
tab.icon = 'agorum:rounded-square-5;color=LightSeaGreen;scale=.9|ionicon:search;color=white;scale=.8';
tab.aon = {
type: 'sample.package.tab.test',
id: tab.id
};
});
// Typ "sample.package.tab.type" zur Registrierung eines neuen Tabs verwenden
home.registerTab({
type: 'sample.package.tab.type',
id: '475dc69e-221c-4fae-9466-cf94bd6c2386'
});
};
Das System stellt folgende vordefinierte Tab-Typen bereit, die Sie direkt verwenden können:
Typ "tree"
Zeigt einen Ordnerbaum mit konfigurierbaren Root-Ordnern an.
Erforderliche Felder:
Optionale Felder:
Beispiel:
home.registerTab({
type: 'tree',
roots: ['<…>']
});
Typ "details"
Zeigt die Objekt-Info eines bestimmten Objekts an.
Erforderliche Felder:
Optionale Felder:
Beispiel:
home.registerTab({
type: 'details',
id: '<…>'
});
Ändert den Titel oder das Icon eines bereits registrierten Tabs.
Syntax
home.updateTab(<tab>);
Felder zum Parameter "tab"
| Feld | Beschreibung |
|---|---|
| name | Ändert den internen Namen für diesen Tab.
|
| text | Ändert den Titel, den der Benutzer für diesen Tab in der Seitenleiste und im Seitentitel des Browsers sieht. |
| icon | Ändert das aguila-Icon, das der Benutzer für diesen Tab in der Seitenleiste und vor dem Seitentitel des Browsers sieht. |
Beispiel
Dieses Beispiel zeigt die Anwendung der Funktion in Kombination mit der Funktion sub.
/* global sc */
module.exports = home => {
home.sub('sample.package.broadcast.channel.title.' + sc.loginUser.UUID, () => {
home.updateTab({
name: 'sample.package.tab.test',
text: 'Test-Tab neuer Titel'
icon: 'agorum:rounded-square-5;color=LightSeaGreen;scale=.9|ionicon:search;color=white;scale=.8',
});
});
};
Signalisiert agorum.home, dass neue Tabs verfügbar sind oder bisher vorhandene Tabs nicht mehr existieren.
Das System aktualisiert die Seitenleisten aller aktuell geöffneten Anmeldungen des Benutzers.
Syntax
home.refresh(<changedTabs>);
Parameter
| Parameter | Beschreibung |
|---|---|
| changedTabs (optional) | Definiert ein Array mit den Namen von Tabs, die sich inhaltlich geändert haben. Ist ein hier aufgeführter Tab geöffnet, erzeugt agorum.home ihn neu, um ihn zu aktualisieren. |
Beispiel
Dieses Beispiel zeigt die Anwendung der Funktion in Kombination mit der Funktion sub.
module.exports = home => {
home.sub('sample.package.broadcast.channel.changed.' + sc.loginUser.UUID, () => home.refresh());
};
Registriert einen provider für einen broadcast-Kanal, um etwa auf Änderungen von Objekten zu reagieren oder sich mit anderen Komponenten austauschen zu können.
agorum.home löst diese Registrierung automatisch wieder auf, wenn das System den provider nicht mehr benötigt.
Syntax
home.sub(<channel>, <handler>);
Parameter
| Parameter | Beschreibung |
|---|---|
| channel | Definiert den Namen des Kanals, für den die Registrierung gilt. |
| handler | Funktion, die das System aufruft, wenn der Kanal eine Nachricht empfangen hat. |
Beispiel
Dieses Beispiel zeigt die Anwendung der Funktion.
module.exports = home => {
home.sub('object-updated-' + object.UUID, () => {
// Das Objekt 'object' wurde geändert, nun könnten etwa Titel und Icon eines Tabs aktualisiert werden.
});
};
Die mobile Ansicht von agorum core unterstützt nur Tabs mit einem aon-Widget. Tabs, die ausschließlich eine externe URL anzeigen, werden in der mobilen Ansicht automatisch ausgefiltert.
Sie können im Provider zwischen Desktop- und Mobile-Ansicht unterscheiden, um unterschiedliche Tabs für die jeweilige Umgebung bereitzustellen:
module.exports = home => {
if (home.env === 'desktop') {
// Dieser Tab ist nur auf Desktop verfügbar
home.registerTab({
name: 'mein.desktop.tab',
text: 'Desktop-Tab',
icon: 'mdi:desktop',
aon: { type: 'mein.desktop.widget' }
});
}
if (home.env === 'mobile') {
// Dieser Tab ist nur auf Mobile verfügbar
home.registerTab({
name: 'mein.mobile.tab',
text: 'Mobile-Tab',
icon: 'mdi:cellphone',
aon: { type: 'mein.mobile.widget' }
});
}
// Dieser Tab ist auf Desktop und Mobile verfügbar
home.registerTab({
name: 'mein.universal.tab',
text: 'Universal-Tab',
icon: 'mdi:view-dashboard',
aon: { type: 'mein.universal.widget' }
});
};
Hinweis: Wenn Sie einen Tab sowohl für Desktop als auch für Mobile bereitstellen möchten, registrieren Sie ihn ohne if-Bedingung. Das System filtert automatisch Tabs heraus, die in der jeweiligen Umgebung nicht unterstützt werden (z. B. URL-only Tabs auf Mobile).
home.registerTab({
// name muss eindeutig sein
name: 'meine.grundlagen.beispiele.menu',
text: 'Menü',
// icon kann über Icon erstellen designt werden
icon: 'ionicon:fast-food-outline;color=DarkRed;slot=center;scale=2;translate=0.14,0',
aon:{
type: 'agorum.composite.details',
// Pfad des darszustellenden Objektes
id: '/agorum/roi/Files/agorum academy Schulung - Grundlagen zur Erstellung eigener Konfigs/Anpassung der Seitenleiste/Kantinenessen.html'
}
});
home.registerTab({
name: 'meine.grundlagen.beispiele.acic.reklamationen.anfragen',
text: 'Suche Reklamationen & Anfragen',
icon: 'ionicon:document-text-outline;slot=left;scale=1.51|mdi:thumb-down;color=FireBrick;slot=top-right;scale=0.86;translate=0.1,0|mdi:thumb-up;color=SeaGreen;slot=bottom-right;scale=0.86;translate=0.1,0',
aon:{
type: 'agorum.composite.acic',
settingName: 'meine.grundlagen.beispiele - FilterAnfragen & Reklamationen'
}
});
Tipp: Sie holen sich den settingName mit der Aktion Search query builder im agorum core template manager. Sie wählen dort den anzuzeigenden Filter aus. Der in der Oberfläche angezeigte Parameter selectedSettingName zeigt den Wert an, den Sie bei settingName eintragen.
home.registerTab({
name: 'meine.grundlagen.beispiele.aguila.spiel-widget',
text: 'Demo',
icon: 'agorum:rounded-square-5;color=MediumVioletRed;scale=0.9|agorum:agorum-logo;color=white;scale=0.81',
aon:{
// Registrierungsname des Widgets
type: 'meine.grundlagen.beispiele.spielWidget'
}
});
Tipp: Damit das Widget der Darstellung des Explorers ähnelt, arbeiten Sie mit einem agorum.border-Widget.
Beispielcode
/* jshint unused: true */
let aguila = require('common/aguila');
let widget = aguila.create({
type: 'agorum.border',
// Breite & Höhe ist für die Integration in die Seitenleiste egal, aber wichtig, wenn man jetzt im Skript auf RUN klicken kann
width: 800,
height: 600,
docked: {
center: {
type: 'agorum.composite.form.basic',
labelPosition: 'top',
border: true,
elements: [
{
type: 'agorum.composite.form.element.text',
label: 'Text',
name: 'text'
}
]
}
}
});
widget;
home.registerTab({
name: 'meine.grundlagen.beispiele.url',
text: 'MonkeyUser.com',
icon: 'agorum:rounded-square-5;color=#0069b5|ionicon:happy-outline;color=white',
url: 'https://www.monkeyuser.com/'
});
/* global sc */
let objects = require('common/objects');
module.exports = home => {
home.registerTab({
name: 'agorum.doc.test.acworkflow.tasks',
text: 'Workflow-Aufgaben (Dokumentation)',
aon: {
type: 'agorum.composite.acic',
settingName: 'acworkflow.tasks',
},
});
};
Soll der neue Eintrag in der Seitenleiste nicht jedem Benutzer zur Verfügung stehen, berechtigen Sie den Befehl mit folgenden Code-Zeilen:
if (objects.mayDiscover('<ACL>')) {
}
Setzen Sie die IF-Bedingung um den entsprechenden home.registerTab, etwa:
if (objects.mayDiscover('<ACL>')) {
home.registerTab({
name: 'meine.grundlagen.beispiele.acic.reklamationen.anfragen',
text: 'Suche Reklamationen & Anfragen',
icon: ...
...
}
});
}
Sie können die Seitenleiste über die Funktion finalize anpassen, nachdem das System die Seitenleiste vollständig geladen hat.
Gängige Einsatzzwecke sind:
Die Funktion „finalize“ verwenden
Registrieren Sie die Funktion finalize in Ihrem provider.js-Code folgendermaßen:
module.exports.finalize = home => {
// home.tabs
}; Durch die Modifikation von home.tabs können Sie dann Einfluss auf die vorhandenen Tabs der Seitenleiste nehmen.
Den Standard-Explorer-Eintrag entfernen
Folgendes Beispiel entfernt den Standard-Explorer-Tab aus der Seitenleiste:
module.exports.finalize = home => {
home.tabs = home.tabs.filter(tab => {
return tab.name !== 'agorum.asa.Einstieg';
});
};
Tipp: Um herauszufinden, wie ein Tab heißt:
module.exports.finalize = home => {
console.log('Home-Tabs', home.tabs);
};
Ein Symbol und den Text des Standard-Explorer-Eintrags ändern
module.exports.finalize = home => {
// finden des explorer tabs
let explorerTab = home.tabs.find(tab => tab.name === 'agorum.asa.Einstieg');
if (explorerTab) {
explorerTab.icon = 'agorum:agorum-logo;color=#003f85';
explorerTab.text = 'Mein Explorer';
}
};
Der Explorer besitzt jetzt in der Seitenleiste ein agorum-Symbol und den Text Mein Explorer.
Hinweis: Wenn Sie diesen Code verwenden, kann der Benutzer Icons oder Texte für diesen Eintrag nicht mehr anpassen.
Die Reihenfolge der Tabs ändern
Da die Tabs ein JavaScript-Array sind, können Sie diese umsortieren.
Folgendes Beispiel dreht die Reihenfolge der Tabs um:
module.exports.finalize = home => {
// Reihenfolge umdrehen
home.tabs = home.tabs.reverse();
};
Hinweis: Wenn Sie diesen Code verwenden, kann der Benutzer die Reihenfolge der Tabs nicht mehr bestimmen.