Script-Engine | Übersicht

Skripte sind ein zentraler Bestandteil von MediControl. Sie steuern Abläufe, automatisieren Prozesse, erzeugen dynamische Texte aus Parametern und verbinden Formulare, Dokumente, Datenbanken und interne Funktionen miteinander. In der täglichen Arbeit ermöglichen Skripte zuverlässige, wiederholbare Prozesse – unabhängig davon, ob es um Patientendaten, Formularlogik, Druckausgaben oder den Austausch mit Fremdsystemen geht.

Kategorie: Schlagwörter: , ,

Auf dieser Seite erfahren Sie, was Skripte in MediControl leisten, wie sie funktionieren und warum sie ein wesentlicher Bestandteil des Systems sind.

Funktionsweise von Skripten in MediControl

In MediControl wird jedes Akten-Objekt – ob Formular, Dokument oder interne Funktion – über ein zugehöriges Skript verarbeitet, bevor es in der Anwendung weiterverwendet wird. Dabei werden alle benötigten Daten aus den Datenbanken geladen und in einer zentralen Variablenstruktur im Speicher abgelegt.

Diese Variablen stehen anschließend in der gesamten Anwendung zur Verfügung, sind eindeutig benannt und können von allen Modulen genutzt werden. Auf diese Weise greifen sämtliche Prozesse konsistent auf dieselben Daten zu.

Alle Skripte befinden sich im Anwendungsordner von MediControl sowie im Unterordner CONFIG / SKRIPTS. MediControl unterscheidet drei Skript-Kategorien, die grundsätzlich auf dem gleichen Funktionsprinzip basieren.

Standard-Skripte (Dateiendung *.MCFSCR)
Standard-Skripte werden systemweit eingesetzt – in Formularen, Objekten sowie im Hauptprogramm selbst. Sie bilden die Grundlage der zentralen Ablaufsteuerung. Hier befindet sich auch das MAIN-Skript, das eine wesentliche Rolle bei der Initialisierung und Vorbereitung der Systemdaten übernimmt.

Formular-Skripte (Dateiendung *.FRMSCR)
Formular-Skripte kommen ausschließlich innerhalb von Formularen und DataForms zum Einsatz. Sie steuern unter anderem Feldinhalte, Berechnungen, Prüfungen, Pflichtfelder und das dynamische Verhalten einer Maske.

SRV-Watch-Skripte (Dateiendung *.SRVSCR)
Diese Skripte werden vom MediControl SRV-Watch-Dienst ausgeführt. Sie dienen der Automatisierung von Hintergrundprozessen wie Importen, Exporten oder der Ansteuerung lokaler Geräte-Schnittstellen.

Das MAIN-Skript (MAIN.MCFSCR)

Das MAIN-Skript ist das zentrale Standardskript von MediControl und wird immer als erstes ausgeführt. Dieser Schritt erfolgt automatisch – ohne dass eine manuelle Aktion notwendig ist. Das MAIN-Skript übernimmt die grundlegende Initialisierung des gesamten Variablen-Systems sowie der wichtigsten Patientenvariablen.

Sobald ein Patient ausgewählt wird, übergibt das aufrufende Programm zunächst die Patienteninformationen an das System. Direkt danach wird das MAIN-Skript gestartet. Auf diese Weise stehen sämtlichen nachfolgenden Skripten und Funktionen alle relevanten Variablen vollständig und konsistent zur Verfügung.

Alle Variablen des Systems beziehen sich immer auf den aktuell ausgewählten Patienten (abweichend davon existieren nur wenige allgemeine Systemvariablen). Sie sind eindeutig, öffentlich und während des gesamten Vorgangs verfügbar.

Wichtiger Hinweis
Bitte nehmen Sie keine direkten Änderungen am MAIN-Skript vor. Dieses Skript wird im Rahmen von Programm-Updates regelmäßig aktualisiert. Eigene Anpassungen würden dadurch überschrieben oder könnten zu Funktionsfehlern führen.

Kurze Anleitung zum Anlegen und Bearbeiten von Skripten

Ein Skript neu anlegen
Um ein neues Skript zu erstellen, wählen Sie im Script-Editor den Menüpunkt Datei → Neu. Im anschließenden Dialog vergeben Sie den Namen des Skripts und wählen den passenden Skript-Typ aus.

Skript-Typen

Standard-Skripte

Werden im gesamten MediControl-System verwendet. Sie dienen der allgemeinen Steuerung und Verarbeitung von Daten.

Formular-Skripte

Können Formularen zugeordnet werden und steuern Eingaben, Feldlogiken und Abläufe zur Laufzeit. Sie ersetzen das frühere formularinterne Skript.

SRV-Watch-Skripte

Werden vom SRV-Watch-Dienst ausgeführt. Sie steuern Importe, Exporte sowie lokale Geräte-Schnittstellen an den Clients und laufen zeit- oder ereignisgesteuert im Hintergrund.

Wichtige Informationen zur Skriptbearbeitung
Die Skriptsprache von MediControl ist eine einfache, an BASIC angelehnte Zeilensprache. Sie kennt keine klassischen Funktionen oder Prozeduren, mit Ausnahme der neuen Block-Strukturen IFBLOCK, ELSE, ENDIF, DO und LOOP. Alle Befehle werden grundsätzlich zeilenweise verarbeitet.

Das bedeutet
: Jede Skriptzeile bildet genau eine Anweisung. In der Regel beginnt jede Zeile mit einem Variablennamen, dem anschließend ein Wert oder eine Anweisung zugewiesen wird.

Beispiele
1. Datenbank-Header und Feldzuweisung
// Das Feld „Name“ der verknüpften Datenbank wird
// an die Variable „Name“ übergeben.
Name={Name}

2. Direkte Textzuweisung

Name=“Mustermann“

3. Kombination aus Datenbankfeld und Funktion

Vorname={Vorname}
Vorname=MID{Vorname,1,3}

Anmerkung zu Kommentaren
Kommentare werden mit // eingeleitet und müssen immer in einer eigenen Zeile stehen. Kommentare am Ende einer Anweisung werden nicht unterstützt.

Richtig:

//Das ist ein Kommentar
Vorname=“Das ist Max Mustermann“

Falsch:

Vorname=“Das ist Max Mustermann“ //Das ist ein Kommentar

Da jede Zeile im Skript eine eigenständige Anweisung darstellt, sind Kommentare nur gültig, wenn sie als eigene Zeile geschrieben werden.

Einfügen von Befehlen

Im Script-Editor können viele Befehle direkt über die linke Schaltflächenleiste eingefügt werden. Komplexere Kommandos stehen als Assistenten zur Verfügung, während alle anderen Befehle auch direkt über die Tastatur eingegeben werden können.

Vorgehensweise beim Einfügen eines Befehls

Geben Sie am linken Rand des Editors den gewünschten Variablennamen ein und setzen Sie ein =-Zeichen, um eine Zuweisung zu beginnen. Nach Eingabe von = öffnet der Skript-Editor automatisch die Kommandoliste.

Nun können Sie:

  • den gewünschten Befehl direkt eingeben, oder
  • mit den Pfeiltasten durch die Liste navigieren und durch Drücken der Enter-Taste übernehmen.

Wenn Sie sich innerhalb eines Bereichs befinden, der durch eine Datenbank-Deklaration eingeleitet wurde, können Sie mit der Enter-Taste zusätzlich die aktuelle Feldliste der Tabelle öffnen.

Einfügen von Variablen

Variablen können in allen Zuweisungen und Befehlen als Ausgabe verwendet werden. Sie werden grundsätzlich in geschweiften Klammern { } gesetzt.Ähnlich wie beim Einfügen von Befehlen öffnet das Drücken der Taste { automatisch die Variablenliste. Sie können nun die gewünschte Variable eingeben oder aus der Liste auswählen und mit Enter bestätigen.

Variablen zur Ausgabe können in allen Kommandos, Meldungen, Texten oder Zuweisungen eingesetzt werden.

Variablen können in allen Zuweisungen und Befehlen als Ausgabe verwendet werden. Sie werden grundsätzlich in geschweiften Klammern { } gesetzt.

Beispiel

‹stammdat.mdb,patientenstammdaten,patientid,{patientid}›

Hier wird das Feld „Name“ und „Vorname“ aus der oben angegebenen Datenbankverbindung gelesen und anschließend zur Bildung von „Gesamtname“ genutzt.

Name={Name}
Vorname={Vorname}
GesamtName={VORNAME}, {NAME}
TEST=DLGMESSAGE{{GESAMTNAME}}

Arbeiten mit den Assistenten

Der Script-Editor stellt mehrere Assistenten zur Verfügung, die das Einfügen komplexerer Befehle erheblich erleichtern. Sie unterstützen insbesondere beim Aufbau von Datenbankverbindungen und bei strukturierten Befehlen wie IF, SELECT oder GETDBLIST.

Der Datenbank-Assistent

Über die entsprechende Schaltfläche kann eine Datenbankverbindung komfortabel definiert werden. Nach Auswahl der gewünschten Datenbankdatei und Tabelle zeigt der Assistent alle verfügbaren Tabellenfelder an.

Sie können nun die Felder auswählen, die im Skript benötigt werden. Durch Bestätigen mit OK erzeugt der Editor automatisch:

  • einen vollständigen Datenbank-Header, und
  • Variablenzuweisungen für alle ausgewählten Felder.

Dies erspart das manuelle Schreiben der Datenbankverbindung und reduziert Fehler bei der Zuweisung einzelner Felder.

IF-, SELECT- und GETDBLIST-Assistenten

Für bedingte Anweisungen und Listenabfragen stehen mehrere weitere Assistenten zur Verfügung, die das Einfügen dieser Strukturen erleichtern. Assistentengestützte Befehle werden in der Befehlsauswahl des Editors durch grüne Pfeile kenntlich gemacht.

Diese Assistenten unterstützen unter anderem bei:

IF-Bedingungen und Verzweigungen

SELECT-/CASE-Strukturen

GETDBLIST-Funktionen zur Erzeugung von Listen aus Tabellenwerten

Wir empfehlen grundsätzlich, die modernen IFBLOCK{ }-Strukturbefehle zu verwenden, da sie verschachtelte Bedingungen klarer darstellen und Fehler in komplexen Abläufen deutlich reduzieren.

Skript-Funktionen

Die Script Engine stellt umfangreiche Funktionen zum Zugriff auf Datenbanken, Tabellen und Datensätzen bereit. Dieser Abschnitt beschreibt sowohl die ältere Access-Header-Syntax als auch die modernen DB.OPEN-Funktionen für Access und SQL-Server.

Datenbank-Verbindung initialisieren (nur Access)

Die klassische Access-Datenbankanbindung erfolgt über einen sogenannten Datenbank-Header. Dieser öffnet die angegebene Datenbankdatei und lädt den Datensatz anhand eines Schlüsselwertes. Wird ein neuer Header angegeben, wird eine zuvor geöffnete Verbindung automatisch geschlossen.

Syntax:

‹datenbankname,tabelle,idfeld,idvariable,optional(selektion)›

Innerhalb des Headers können auch Systemvariablen übergeben werden (z.B. {PatientID}). Diese ältere Methode existiert weiterhin aus Kompatibilitätsgründen, sollte aber für neue Skripte nicht mehr verwendet werden.

Beispiel (ältere Syntax):

‹meddok{patientid}.mdb,diagnosen,patientid,{patientid},patientid={patientid} AND diagtyp=0›

Variablen aus Datenbankfeldern zuweisen
Der Inhalt eines Datenbankfeldes wird einem Variablennamen zugewiesen. Die Datenbank muss zuvor über einen Access-Header oder DB.OPEN geöffnet worden sein.

Regel: Wenn nach dem = keine Klammer { } steht, wird der Inhalt als Feldname interpretiert. Befindet sich ein Klammerausdruck im Wert, wird dieser zur Laufzeit ersetzt.

Beispiel 1 (einzelne Felder):

KL_NAME={Name}
KL_ZUSATZ={Zusatz}
KL_STRASSE={Strasse}
KL_PLZ={PLZ}
KL_ORT={Ort}

Beispiel 2 (Mehrfachwerte in Arrays):
BEFUND(BEFUNDMATCH)=Text
Beispiel mit MEDDOK-Mehrfachauswahl:
DIAGNOSETYP()=DiagTyp
DIAGNOSE()=Diagnose

Moderne Syntax mit DB.OPEN (empfohlen)
Die moderne Datenbankansteuerung sollte für alle neuen Skripte verwendet werden. Sie funktioniert mit identischer Syntax für Access- und SQL-Datenbanken.

Beispiel (DB.OPEN mit Access):

ANZ=DB.OPEN{{APPPATH}\DATABASE\STAMMDAT.MDB,Select * from Klinik where KlinikID={MANDANTNR}}
RES=DB.GETRECORD{KL_}

DB.GETRECORD{KL_} liest alle Felder der aktuellen Zeile und erzeugt Variablen, die mit KL_ beginnen, z.B. KL_NAME, KL_PLZ usw.

SQL-Server Datenbank-Verbindung
Seit MCDMS5 ist der SQL-Server die primäre Datenbank. Dafür wurde eine vollständig neue Syntax eingeführt, die über die DB.OPEN-Funktion gesteuert wird.

Beispiel (SQL-Server):

SQLCON=DB.GETMCDMSSTDCONNECTSTRING{}
ANZREC=DB.OPEN{{SQLCON},Select * from Verlauf;}
IFBLOCK{SKRIPT.LASTERROR!=0}
ERG=DLGMESSAGE{{SKRIPT.LASTERRORMSG}}
RES=EXITSKRIPT{}
ENDIF
IFBLOCK{ANZREC;0}
RES=DLGMESSAGE{{ANZREC}} Datensätze gefunden!
ENDIF

SKRIPT.LASTERROR enthält den letzten Fehlercode,

SKRIPT.LASTERRORMSG den Fehlertext.

Diese Variablen stehen automatisch zur Verfügung.