Elexis Führung

Diese Seite ist ein Führer durch Elexis. Dies betrifft nicht nur die Ungrad-Variante, sondern soll helfen, sich im Elexis-System, das mittlerweile deutlich über 250 Plugins umfasst, zurecht zu finden.

Was ist wo?

Hilfe für “Aufsteiger” von früheren Elexis-Versionen.

  • Datenklassen (PersistentObject & Co.) des Kerns: elexis-3-core/ch.elexis.core.data/ch.elexis.data

  • Definition der Extension Points des Kerns: elexis-3-core/ch.elexis.core.ui

  • Die Views des ehemaligen Kerns: ch.elexis.core.ui/ch.elexis.core.ui.views

  • Datenbankupdate: ch.elexis.core.data/ch.elexis.core.data.util.DBUpdate und ch-elexis.core.data/rsc/dbScripts.

Logging

Die Konfiguration ist hier beschrieben.

Zugriffskontrolle

Implementation ist hier: elexis-3-core/ch.elexis.core.data/ch.elexis.admin. Es existiert ein altes, Anwender/Gruppen-basiertes System (AccessControlImpl), und ein moderneres, rollenbasiertes System (RoleBasedAccessControl) (welches allerdings für jede Rechteabfrage einen Datenbankzugriff machen muss). Der Unterschied zwischen Gruppen und Rollen ist mir nicht ganz klar. Ausser, dass der Begriff “Gruppe” für eine Rolle rückblickend etwas unglücklich gewählt war ;)

Am Einfachsten wendet man Zugriffsrechte an, in dem man für Menu- und Toolbaractions “RestrictedActions” (ch.elexis.core.ui.actions.RestrictedAction) verwendet. Im Konstruktor gibt man der Action mit, welches Recht der Anwender haben muss, um sie starten zu können:

removeLabItem=new RestrictedAction(AccessControlDefaults.DELETE_LABITEMS,"Lösche item"){

    public void doRun(){
        // das hier wird nur ausgeführt, wenn der eingeloggte User das Recht
        // DELETE_LABITEMS hat.
    }
}

Generell ist es empfehlenswert, sich für eins der in AccessControlDefaults schon aufgeführten Rechte zu entscheiden, wenn es einigermassen passt. Wenn nicht, kann man auch eigene AcessControlElements erstellen.

Die Abfrage kann ausser mit RestrictedActions auch direkt programmatisch erfolgen:

if(CoreHub.acl.request(right)){
    // okay
}

Icons, Farben

Eine Menge vordefinierte Icons erhält man mit

ch.elexis.core.ui.icons.Images.IMG_xxx.getImageDescriptor()

Wenn immer eins davon für den geplanten Zweck passt, sollte man es nehmen. Dadurch bleibt das Erscheinungsbild von Elexis einheitlich, und es werden auch nicht mehr Ressourcen als nötig verbraucht.

Wenn man dennoch eigene Icons benötigt, kann man die zum Beispiel in einem Verzeichnis “icons” im Plugin-Verzeichnis unterbringen und folgendermassen aus dem Programm heraus “finden”:

Bundle bundle=FrameworkUtil.getBundle(this.getClass());
URL url=FileLocator.find(bundle,new Path("icons/my_icon.png"),null);
ImageDescriptor.createFromURL(url);

Update von 1.4

Was in früheren Elexis-Version so steht:

  setImageDescriptor(Desk.getImageDescriptor(Desk.IMG_ADDITEM));

Muss jetzt so geschrieben werden:

  setImageDescriptor(Images.IMG_ADDITEM.getImageDescriptor());

Und was so war:

  Desk.getColor(Desk.COL_BLACK);

ist jetzt so:

  UiDesk.getColor(UiDesk.COL_BLACK);

Shell

Manchmal braucht man, um zum Beispiel eine Dialogbox zu öffnen, die Shell des Elexis-Fensters. Diese bekommt man mit Hub.getActiveShell().