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.
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
.
Die Konfiguration ist hier beschrieben.
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
}
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);
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);
Manchmal braucht man, um zum Beispiel eine Dialogbox zu öffnen, die Shell des Elexis-Fensters. Diese bekommt man mit Hub.getActiveShell().