Spartenmaskendesigner Handbuch

Spartenmaskendesigner Handbuch

Einleitung

Dieses Handbuch bezieht sich auf den neuen Spartenmaskendesigner, der ab ams.5 4.5.0.54591 zur Verfügung steht.

Dieses Handbuch richtet sich sowohl an Neueinsteiger als auch an routinierte Nutzer.

Bitte beachten Sie, dass wenn Sie eine bereits existierende Maske mit dem neuen Designer öffnen, diese nicht mehr mit dem alten Designer geöffnet werden kann.

Was ist der Spartenmaskendesigner?

Mithilfe des Spartenmaskendesigner-Moduls versetzt ams Sie in die Lage eine Spartenmaske inkl. Berechnungslogiken nach Ihren individuellen Bedürfnissen designen und abbilden zu können. Hierfür werden lediglich Grundkenntnisse in der Programmierung benötigt.

Dabei können Ihre Logiken weit über eine einfache Prämienberechnung hinaus gehen. So können Sie selbst den Erfassungsprozess steuern, indem Sie bspw. passende Felder Ein-/Ausblenden und somit Anwenderfehler minimieren und eine hohe Datenqualität sicherstellen.

Wie von anderen Systemsparten gewohnt, sind auch Ihre individuellen Sparten in AMS vollintegriert, sodass diese problemlos in anderen Bereichen wie bspw. Formularwesen oder freie Selektionen verwendet werden können.

Erstellung eigener Spartenmasken

Allgemeines

Um das Verständnis für die eigendefinierten Masken zu verbessern, folgt eine grundlegende Erklärung der drei Grundbausteine beim Erstellen eigener Spartenmasken

Die Sparte

Bei der Sparte handelt es sich um die Tabelle, in welcher die Informationen über die einzelnen Sparteneinträge gespeichert werden. Hier werden dementsprechend Felder/Spalten definiert, welche das Gerüst darstellen, in welchem die Daten gespeichert werden.

Die Maske

Hierbei handelt es sich um die Schnittstelle für den Anwender, also die Ansicht „Spartenteil“ im Vertrag. Hier werden für die zu verwaltenden Daten grafische Komponenten (Eingabefelder, Auswahlboxen etc.) hinterlegt. Diese Komponenten sind wiederrum mit der Tabelle (Sparte) verbunden, wodurch Eingaben beim Speichern ohne zusätzlichen Aufwand und wie aus anderen Bereichen des ams bereits gewohnt, direkt in der Datenbank hinterlegt werden können.

Die Spartenlogik

Hier kommt es zum Herzstück des Spartenmaskendesigners. Bis hierhin war man in der Lage, Daten auf einer individuellen Eingabemaske zu verwalten. Nun kann man aber auch Logiken umsetzen. Zum einen eigene Berechnungslogiken, welche an vordefinierte Geschäftsprozesse des ams angehängt werden können und zum anderen Interaktionslogiken, die durch den Anwender beim Befüllen eines Spartenteils eines Vertrags ausgelöst werden, wodurch Effizienz, aber auch Übersichtlichkeit gesteigert werden kann.

Erstellung der Sparte

Wie und wo?

Zum Erstellen eigener Spartenmasken wird zunächst die Sparte selbst benötigt. Hierbei handelt es sich um die Tabelle in der später die Daten gespeichert werden. Hier wird vom Anwender die Tabellenstruktur definiert.

Organisation → Sparten verwalten

Nach dem Aufruf der Spartenliste werden alle verfügbaren Sparten dargestellt. Über Neuanlage kann nun eine Neue Sparte angelegt werden.

Im folgenden öffnet sich das Fenster mit den Reitern „Allgemein“, „Seite2“ und „Eigendefiniert“.
Die letzten beiden können hier vernachlässigt werden.

Der Reiter Allgemein in der Übersicht:

  1. Ein eindeutiges Kürzel, über welches die Maske identifiziert werden kann

  2. Kurze Beschreibung der Sparte

  3. Steuert die Möglichkeit zu dieser Sparte neue Verträge anzulegen

  4. Entscheidet, ob diese Sparte für Sammelverträge genutzt werden kann.

  5. Wurde Punkt 4 ausgewählt kann hier entschieden werden, ob die Sparte abgerechnet werden kann.

  6. Ist dieser Punkt ausgewählt, kann man eine eigene Tabellenstruktur für seine Sparte definieren. Diese Auswahl ist notwendig, wenn zu dieser Sparte eine eigene Spartenmaske entwickelt werden möchte. Nach Auswahl werden automatisch die Reiter „Tabellenstruktur“ und „Eigene Berechnungen“ eingeblendet.

 

Das Spartenkürzel sollte ohne Sonderzeichen gewählt werden. Ausnahme stellt hier ein Unterstrich dar. Andernfalls kann dies zu unerwünschten Nebenwirkungen führen.

In älteren Versionen kann es nach der Neuanlage einer Sparte notwendig sein die Sparte neu zu öffnen, damit der Reiter Tabellenstruktur editierbar wird.

 

Innerhalb der Tabellenstruktur kann nun mit der Anlage der Felder für die neue Sparte begeonnen werden.

  1. In der Tabellenansicht lassen sich die einzelnen Metainformationen von Feldern über eine grafische Benutzeroberfläche hinzufügen.

  2. In der Textansicht wird die Tabelle als Csv-Datei dargestellt, mit einem Komma als Separator

  3. Eine Auflistung der einzelnen Felder, die Sie Ihrer Tabelle hinzufügen

  4. Über diese Schaltfläche lassen sich neue Felder zu der Tabelle hinzufügen

  5. Hier können sog. Filterfelder per Semikolon separiert definiert werden. Diese Filterfelder werden z.B. bei einem Lookup-Dialog als Suchfeld angeboten.

Über diesen Tab können Sie nun eine Tabelle ganz nach Ihren Vorstellungen definieren, sodass diese genau die Daten, die Sie einpflegen möchten, speichern kann. Bei der erstmaligen Erstellung einer Sparte muss im Menüband, nachdem gespeichert wurde, die Tabelle, einmal initial, neu erzeugt werden, über die Schaltfläche „Tabelle neu erzeugen“ (Änderung Datenstrukturen). Nehmen Sie nur Veränderungen vor, so reicht eine Strukturprüfung über die Schaltfläche „Strukturprüfung durchführen (Änderung Feldbezeichner o.ä.).

Ab ams-Version 4.8 hat sich die Ansicht der Gruppensparten verändert. Es ist eine neue Maske hinzugefügt worden, mit der sich mehrere Profile speichern lassen. Diese Profile werden anhand der gegebenen Felder benannt und ist frei definierbar.

Neue Auflistung von Spartendatensätzen zu Gruppensparten

Hier haben wir Name des Risikos und die Versicherungssumme als Kriterien ausgewählt. Das gelingt wie folgt:

Unter „Organisation“, „Sparten verwalten“ und wählen Sie die Sparte aus.
Auf dem Reiter „Tabellenstruktur“ finden Sie unter der „Tabellenansicht“ die „Anzeigefelder:“. Dort tragen Sie die gewünschten Feldnamen ein, trennen diese mit Semikolon, Speichern, führen eine „Strukturprüfung durchführen (Änderung Feldbezeichner o.ä.)“ aus und starten AMS neu.

Im Kapitel Dokumentation finden Sie eine genaue Erläuterung zu den einzelnen Metainformationen, die ein Feld haben kann. Bitte lesen Sie sich diese sorgfältig durch, bevor Sie Ihre erste Tabelle definieren! Verinnerlichen Sie bitte auch Kapitel Anpassen/Erweitern der Tabellestruktur.

Anpassen/Erweitern der Tabellenstruktur

Möchten Sie Ihre existierende Tabellenstruktur erweitern, so können Sie das ohne weiteres tun. Es sind allerdings gewisse Voraussetzungen zu beachten, die in diesem Handbuch an verschiedenen Stellen erwähnt werden.

  1. Anpassungen an der Tabellenstruktur müssen gespeichert und mittels Strukturprüfung angewendet werden, damit diese sich auswirken.

  2. Ausgenommen sind Datentypänderungen oder das Entfernen von Feldern. Diese Art von Anpassungen kann nur durch eine Neuerzeugung der Tabelle übernommen werden. Das bedeutet, dass die Sparteninformationen aller Verträge dieser Sparte unwiederruflich verloren gehen.

Erstellung der Maske

Wie und wo?

Nach Anlage der Spartenstruktur kann die Anlage und Bearbeitung der Spartenmaske erfolgen.

Organisation → Spartenmasken verwalten

Beim Aufruf der Spartenmaskenliste werden alle verfügbaren Spartenmasken dargestellt. Über Neuanlage kann nun eine Neue Spartenmaske angelegt werden.

Im folgenden öffnet sich ein Detailfenster mit den Reitern „Allgemein“ und „Eigene Berechnungen“, zweiterer kann vernachlässigt werden, weswegen nur der „Allgemein“ Reiter erklärt wird.

Das Detailfenster in der Übersicht:

  1. Hier wählen Sie die Sparte aus, zu der Sie eine Maske bauen wollen. Mit Klick auf das Lupenfeld öffnet sich eine Liste mit allen Sparten und Sie können Ihre auswählen.

  2. Hier können Sie noch ein Produkt angeben, wenn Ihre Maske nur für eine spezielle Sparten/Produkt-Kombination gebaut werden soll.

  3. Hier können Sie eine Beschreibung für Ihre Maske erfassen.

  4. Hier findet sich der alte Designer, auf den in diesem Handbuch nicht näher eingegangen wird.

  5. Schaltfläche, um den neuen Designer zu starten und mit dem Bau der Spartenmaske zu beginnen.

Nachdem Sie nun Ihre Sparte gewählt haben und die Schaltfläche Maskendefinition ausgewählt haben öffnet dieser sich und dieses Fenster erscheint:

Genauere Informationen zu den einzelnen Abschnitten finden Sie in der Dokumentation.

Platzieren von Komponenten

Komponenten sollten immer auf einem Panel liegen. Dieses sorgt für eine Struktur in Ihrer Anordnung, wodurch Sie zum einen, einen besseren Überblick erhalten und zum anderen ganze Gruppen von Komponenten anpassen können (zum Beispiel ein- und ausblenden von einzelnen Seiten Ihres PageControls).

Sie sollten sich vor Ihrem Bau überlegen, ob Sie mehrere Seiten benötigen, um Ihre Daten zu verwalten. Die Komponente, die Sie hier benötigen ist das PageControl.

Es gibt 2 Arten, wie ein PageControl aussehen kann. Einmal mit und einmal Ohne einem „Alles“ Reiter, welcher die anderen Reiter zusammenfasst.

 

Möchte man ein solches PageControl haben, so müssen die Komponenten in folgender Reihenfolge abgelegt werden: PageControl -> TabSheet -> Panel -> Ihre Komponenten

Alternativ ohne den „Alles“ Reiter:

 

Für diese Darstellung müssen die Komponenten in folgender Reihenfolge abgelegt werden: Panel -> PageControl -> TabSheet -> Panel -> Ihre Komponenten

Wenn Sie hiermit fertig sind, können Sie beginnen, Ihre Komponenten zu platzieren und Ihre Maske, nach Ihren Wünschen, zu gestalten.

Sollten Sie nicht mehrere Reiter auf Ihrer Maske benötigen dann lautet die Reihenfolge:    Panel -> Ihre Komponenten

Nutzen Sie bitte keine Scrollbox, wenn Sie sicherstellen wollen, dass auf Ihrer Maske gescrollt werden kann. ams sorgt automatisch für die Scrollfähigkeit, sobald die Größe Ihrer Maske den Bildschirmrand überragt. Scrollboxen sollten nur genutzt werden, wenn es sich nicht um das oben beschriebene Szenario handelt.

Ein hervorheben der Felder über die Funktion “Pflichtfelder” im Spartenteil des Vertrags ist zum aktuellen Zeitpunkt nur bei Verwendung des Aufbaus mit Reiter “Alles” möglich. Die graphische Markierung für “Pflicht-” bzw. “Sollfelder” funktioniert ebenfalls nur mit dieser Variante. Die technische Prüfung inkl. Hinweismeldung nach Speichern funktioniert in beiden Fällen.

Verbindung Komponente - Datenbankfeld

Sie haben nun eine Sparte angelegt und angefangen Ihre Maske zu bauen und haben hierfür schon etliche Komponenten erzeugt. Um diese nun mit den entsprechenden Feldern in der Datenbank zu verbinden, müssen die Datenmenge und das Datenfeld der entsprechenden Komponente gesetzt werden.

In nachfolgendem Beispiel besteht unsere Maske aus einem Dataedit und einem Label. Das Feld, in dem wir die Informationen Speichern wollen, heißt DATEEDIT und ist vom Typ Date.

 

Die Datenmenge stellt die Quelle der Daten dar. Das Datenfeld hingegen den Feldnamen in der Quelle.

Verbindung Label - Eingabefeld

Um ein Label mit dem Feld, in dem die Informationen gespeichert werden, zu verbinden, ist es notwendig, dass die Bezeichnung des Datenfeldes im Namen des Labels enthalten ist. Im unserem Fall also Beispielsweise “Label1_DATAEDIT”. Durch diese Verknüpfung wirken sich Einstelllungen zum Hervorheben von Feldern im Bereich “Pflichtfelder” des Spartenteils wie gewohnt sowohl auf das Eingabefeld als auch das Label aus. Im folgenden Beispiel sind die unterschiedlichen Konfigurationen aufgeführt.

  1. Das Datenfeld ist im Namen des Labels enthalten:

grafik-20240613-121752.png
Zuordnung des Datenfeldes zu Eingabefeld

Zuordnung des Datenfeldes zum Label

  1. Das Datenfeld ist im Namen des Labels nicht enthalten:

grafik-20240613-121825.png
Zuordnung des Datenfeldes zum Eingabefeld

grafik-20240613-121833.png
keine Zuordnung des Datenfeldes zum Label

 

Im folgenden das Ergebnis der Pflichtfeld-Konfiguration “Hervorheben” für den Spartenteil der eigenen Maske:

Label1 wird aufgrund der Verknüpfung mit dem Datenfeld ebenfalls hervorgehoben, Label3 ist aufgrund der fehlenden Zuordnung nicht mit hervorgehoben.

grafik-20240613-123122.png

Sollten Sie zuvor noch keine Maske erstellt haben, so arbeiten Sie bitte das siebte Kapitel Walkthrough durch. Gerade bzgl. der Komponenten Panel, ScrollBox, PageControl entstehen hier oft Probleme.

Programmieren der Spartenlogik

Allgemeines

Die Programmierung der Spartenlogik lässt sich grob in zwei Bereiche unterteilen, die Berechnungslogik und die Oberflächenlogik.

Die Berechnungslogik stellt hier die Erweiterung der ams Geschäftsprozesse dar. Die Funktionen, die hier erstellt werden können, werden nicht nur über die Oberfläche ausgelöst, das heißt wenn ein Anwender einen Vertrag im ams bearbeitet, sondern auch bei Dunkelverarbeitungen, weswegen die Berechnungslogik streng getrennt von der Oberflächenlogik sein sollte.

Die Oberflächenlogik hingegen wird nur, wie der Name schon sagt, über die Oberfläche ausgelöst. Hier sollten dementsprechend Funktionen umgesetzt werden, die die Eingabe des Anwenders steuern. Typische Umsetzungen sind hier das Ein/Ausblenden von Komponenten oder aber auch farbliche Hervorhebung.

Skripte

Allgemein

Zur Umsetzung der Spartenlogik steht dem Programmierer mit Microsoft JScript ein Javascript-Dialekt zur Verfügung. Dieser ist um einige ams-Objekte erweitert, welche wiederrum ams-bezogene Funktionen liefern. Abgesehen von Regeln wird jede Logik über Microsoft JScript umgesetzt.

Logiken werden in sog. Funktionen zusammengefasst, welche wiederrum vom Programmierer aus anderen Funktionen heraus aufgerufen werden können.

Funktionen

Funktionsbaum im neuen Spartenmaskendesigner

Es gibt drei unterschiedliche Arten von Funktionen:

Maskenfunktionen werden in dem Kontext der selbstdefinierten Maske ausgeführt. Sie haben Zugriff auf alle Datenmengen und alle Steuerelemente. Diese Funktionen werden im Knotenpunkt „Maske“ aufgelistet.

Spartenfunktionen können im Hintergrund, z.B. auch im Dienst „Geplante Aufgabe“, ausgeführt werden. Daher ist aus diesen Funktionen kein Zugriff auf die Maske und deren Elemente möglich. Diese Funktionen werden im Knotenpunkt „Sparte“ aufgelistet.

Allgemeine Funktionen werden im Gegensatz zu den Masken- und Spartenfunktionen nicht von der Maske bzw. dem ams aufgerufen. Diese müssen, aus anderen Funktionen heraus, manuell aufgerufen werden. Der Kontext und somit die Elemente, auf die zugegriffen werden kann, sind dadurch abhängig davon, aus welcher Funktion diese aufgerufen werden.

Allgemeine Funktionen werden in externen Skriptdateien definiert und in dem Knotenpunkt der jeweiligen Datei aufgelistet. Dies sind „GlobalFunctions“, „CustomMask“, „CustomScript“ und „GlobalScripts“.

Wird einer der Knotenpunkte ausgewählt, werden alle zugehörigen Funktionen im Skripteditor angezeigt. So können mehrere Funktionen gleichzeitig bearbeitet werden. Es können auch neue Funktionen geschrieben oder vorhandene gelöscht werden. Diese Änderungen werden dann in den ausgewählten Knotenpunkt übernommen. Wird eine einzelne Funktion ausgewählt, wird nur diese eine im Skripteditor angezeigt.

 

Mit einem Rechtsklick öffnet sich ein Kontextmenü, mit welchem, bei Knotenpunkten, neue Funktionen hinzugefügt werden können. Analog können auch Funktionen umbenannt oder gelöscht werden. Entschließt man sich alle Funktionen eines Knotenpunkts im Skripteditor anzeigen zu lassen, kann man natürlich auch hier neue Funktionen hinzufügen/umbenennen oder löschen. Diese Änderungen werden dann links in der Übersicht übernommen.

Ausgenommen sind Spartenfunktionen und einige Maskenfunktionen, da diese eine spezielle Bedeutung für das ams haben und zu bestimmten Zeitpunkten aufgerufen werden. Wird dennoch versucht eine solche Funktion zu entfernen oder umzubenennen, wird dies ignoriert und die Funktion bleibt unverändert.

Skripteditor

Im Skripteditor können dann schließlich die Funktionen geschrieben werden. Im Grunde handelt es sich hierbei um einen Texteditor, allerdings mit einigen Features, die die Programmierung vereinfachen.

Der Editor lässt sich in vier Bereiche unterteilen.

Im Kopfbereich wird angezeigt, welche Skriptdatei im Editor bearbeitet wird. Wird nur eine einzelne Funktion bearbeitet, wird zusätzlich der Funktionsname dargestellt.

Ebenfalls im Kopfbereich befindet sich eine Auswahlliste, in welcher alle Funktionen der ausgewählten Skriptdatei aufgelistet sind. Wird eine Funktion ausgewählt, springt der Eingabezeiger zu der Funktion. Durch Betätigen der F6-Taste springt der Eingabezeiger in die Funktionsliste und es kann nach einer Funktion gesucht werden.

Im mittleren linken Bereich befindet sich der eigentliche Editor, in dem die Skripte bearbeitet werden können.

An dessen Bildlaufleiste, also im mittleren rechten Bereich, befindet sich eine Miniaturansicht des gesamten Skripts, welche als Navigationshilfe dient.

Im Fußbereich werden situationsabhängig Fehlermeldungen ausgegeben. Außerdem erscheint dort die Eingabeleiste der inkrementellen Suche.

 

Berechnungslogik

Allgemein

Wie eingangs bereits erwähnt, wird die Berechnungslogik an feste Geschäftsprozesse des ams angehangen. Geschäftsprozesse, deren Logik wir erweitern können, sind die Vertragsberechnung, die Neuanlage eines Vertrags, die Spartenbeschreibung, die Vertragsverlängerung und die Neuanlage eines Risikos.

Vertragsberechnung

Allgemein

Die Vertragsberechnung ist die Funktion, die angestoßen wird, sobald ein Vertrag gespeichert wird. Sie sollte zur Berechnung einer Prämie genutzt werden und bietet weiterhin die Möglichkeit diese Prämie auch an den Vertrag zu übergeben, damit ams diese weiterverarbeiten kann.

Berechnete Prämie an Vertrag übergeben

Damit die Übergabe, einer, von der Sparte berechneten, Prämie, an den Vertrag, möglich ist, steht dem Programmierer das sog. ActionData-Objekt zur Verfügung. Genauere Spezifikationen zu diesem Objekt finden sich im Kapitel Dokumentation.

Beispiel:

var Vertrag = EventData.GetContext("Vertrag"); var Sparte = EventData.GetContext("Sparte"); var gesamtPraemie = 0; //Die Berechnung der Gesamtprämie kann selbstverständlich //ganz nach Ihren Vorstellungen vonstattengehen, in diesem //Beispiel ist sie immer 4711. gesamtPraemie = 4711; ActionData.SetString("GesamtPraemie", gesamtPraemie); ActionData.SetString("Berechnet", "JA");

Bei Gruppensparten gibt es kleine, aber wichtige Unterschiede zu beachten. Schauen Sie hierzu bitte in das Kapitel Gruppensparten.

NeuanlageVorbelegung

Diese Funktion wird immer ausgeführt, wenn ein neuer Spartenteil angelegt wird. Das gilt auch für eine Vertragsneuanlage (da hier technisch gesehen auch ein neuer Spartenteil erzeugt wird). Diese Funktion dient dazu, wie der Name schon sagt, Felder vorzubelegen.

Normalerweise muss bei Anpassungen von Feldern im Sparten- oder Vertragsobjekt die Datenmenge in den Editiermodus gesetzt werden. Dies fällt hier weg, da ams bei der Neuanlage diese beiden Objekte vorher in den Editiermodus versetzt und anschließend die Änderungen speichert. Entschließt man sich dennoch das zu tun tritt eine Fehlermeldung auf.

NeuerSpartenteil

Ist identisch mit NeuanlageVorbelegung.

Spartenbeschreibung

Über die Spartenbeschreibung lassen sich grundlegende Eigenschaften einer Sparte definieren. Sie wird immer dann aufgerufen, wenn Detailinformationen zur Sparte vom ams benötigt werden. Beispiele dafür wann diese Funktion aufgerufen wird sind das Öffnen eines Vertrags der Sparte oder aber das Öffnen der Liste aller Sparten.

Vor allem in der Spartenlisten kann das Abarbeiten dieser Funktion einen Augenblick dauern, da dort zu jeder Sparte eine Beschreibung angefordert wird. Es sollte daher vermieden werden zeitintensive Berechnungen hier vorzunehmen.

Dieser Funktion steht ein sog. Descriptor-Objekt zur Verfügung, welches die Detailinformationen, die man hier einstellen kann, bündelt. Details zu diesem Objekt finden sich in der Dokumentation.

Vertragsverlängerung

Diese Funktion wird aufgerufen, wenn ein Vertrag verlängert wird. Außerdem wird bei einer Vertragsverlängerung auch immer eine Vertragsberechnung ausgeführt.

Unter Umständen wollen Sie die Vertragsverlängerung manuell anstoßen, um Ihr Skript zu testen. Hierzu müssen gehen Sie zu Systemsteuerung -> geplante Aufgaben -> Vertragsverlaengerung

Folgende Einstellungen müssen getroffen werden:

Nun können Sie über die Schaltfläche „Jetzt ausführen“ die Vertragsverlängerung starten:

Beachten Sie allerdings, dass Sie hiermit alle abgelaufenen Verträge verlängert werden. Um bestimmte Sparten von der Verlängerung auszuschließen, kann nachfolgender Registry-Schlüssel verwendet werden.

Schlüssel-Art

Schlüssel-Pfad

Schlüsselname

Wert

Schlüssel-Art

Schlüssel-Pfad

Schlüsselname

Wert

Systemeinstellung

SYSTEM/VERTRAG/VERLAENGERUNG

AUSSCHLUESSE

[Semikolonseparierte Liste an Spartenkürzeln]

Bitte nehmen Sie diese Einstellungen nur in Ihrem Testsystem vor. Testen Sie dies nicht in Ihrem produktiven System.

Um geziehlt einzelne Verträge zu verlängern, können Sie innerhalb des jeweiligen Vertrags im Menüband “Rechnungswesen” die Schaltfläche “Vertragsverlängerung” wählen.

EingabeValidieren

Die Validieren der Nutzereingaben mit dem Ziel den Speicherprozess zu unterbinden, sofern diese nicht den Erwartungen entsprechen sollte nicht erst in der Vertragsberechnung geschehen.

Hierfür kann das Event “EingabeValidieren” verwendet werden. Dieses wird je Vertragsspartendatensatz ausgelöst, wenn dieser im Datensatz für die Speicherung vorgesehen wird.

Sparte.Edit; Sparte.Post; // Hier wird jetzt EingabeValidieren ausgelöst.

Innerhalb des Events kann die produktspezifische Prüfungen nach Ihren Vorstellungen implementiert werden. Das Event erwartet bei Erfolg keine Rückgabe oder die leere Rückgabe eines Fehlertexts. Bei Rückgabe eines Fehlertexts wird im weiteren Verlauf die Speicherung unterbrochen.

var Fehlertext = ""; var Praemie = 0; if (Praemie == 0) { Fehlertext = "Die Prämie darf nicht 0 sein. Die Speicherung wird abgebrochen."; } // Wir geben unseren Fehlertext nun aus dem Event heraus, // was zum Abbruch der Speicherung führen wird, sofern // dieser Text nicht leer ist. ActionData.SetString("Result", Fehlertext);

Das Event “OnValidate” wird nur bei Speicherung durch den Anwender auf der Spartenmaske ausgelöst.

Das Event “EingabeValidieren” hingegen löst zusätzlich auch bei Ausführen anderweitiger Prozesse aus, z.B. bei Hintergrundausführung durch den Dienst, tlw. bei Importen, Anpassungsroutinen für Spartendaten, etc.

Oberflächenlogik

Allgemein

Unter dem Begriff der Oberflächenlogik lassen sich alle Reaktionen des ams auf Aktionen des Anwenders zusammenfassen. Das kann das Anklicken eines Feldes, das Ändern eines Wertes oder auch nur das Öffnen des Vertrags sein.

Oberflächenlogik kann vom Programmierer auf drei Arten umgesetzt werden durch Ereignisroutinen, Schaltflächen und Regeln. Nur letzteres erfordert keine Programmierung in MSJscript und kann somit ohne Programmierkenntnisse genutzt werden, um Logiken zu realisieren.

Ereignisroutinen (Events)

Allgemein

Ereignisroutinen bzw. Events sind Eigenschaften einzelner Komponenten des Maskendesigners. Sie geben einem die Möglichkeit zu vordefinierten Aktionen (Ereignisse) selbstdefinierte Reaktionen (Events) zu erstellen. Jede Komponente besitzt hierbei ein festes Repertoire an Events, welchen der Programmierer Logik verleihen kann. In der Dokumentation finden sich unter den Punkten Komponenten und Events jeweils ausführliche Informationen dazu, welche Komponente welche Events unterstützt bzw. auf was diese Events reagieren.

Finden können Sie die Events einer Komponente, in dem sie zunächst die Komponente auswählen und an-schließend im Objektinspektor den Reiter Ereignisse auswählen.

Hier sind dann alle verfüg-baren Events einer Komponente aufgelistet.

Mit einem Doppelklick auf das Feld rechts von einem Event öffnet sich der Skripteditor und man kann eine Funktion erstellen oder eine existierende anpassen.

Ist einem Event bereits eine Funktion zugewiesen, so landet man mit einem Doppelklick ebenfalls im Skripteditor bei der entsprechenden Funktion und kann Anpassungen vornehmen.

 

 

Beispiel

function RadioButton1_OnClick() {     if (RadioButton1.Checked == true) {       Runtime.MsgBox("Angeklicked!");     }     if (RadioButton2.Checked == true) {       Runtime.MsgBox("Nicht angeklicked!");     } }

Weitere Beispiel-Events finden sich bei den Anwendungsbeispielen unter dem Punkt Erweitert.

Menüband-Schaltflächen

Allgemein

Mit dem Spartenmaskendesigner ist es ebenfalls möglich den Zusatz-Tab des Menübands in einem Vertrag anzupassen. Man ist in der Lage Schaltflächen hinzuzufügen, welche dann bei einem Vertrag der entsprechenden Sparte angezeigt werden.

Hinzufügen kann man diese Schaltflächen unter der Ansicht „Skripte“ auf der rechten Seite.

Schaltflächen bestehen aus einer Bezeichnung, einem Symbol und aus bis zu zwei Maskenfunktionen.

Die erste Funktion wird ausgeführt, wenn die Schaltfläche betätigt, also angeklickt, wird.

Die zweite Funktion ist optional und fungiert als Prüffunktion. Sie wird bei jeder Änderung des Vertragsfensters aufgerufen und kann angeben, ob die Schaltfläche aktiv ist oder nicht. Dazu wird die Eigenschaft Result des ActionData-Objekts auf „Ja“ oder „Nein“ gesetzt.

Beispiel

Wir wollen eine Schaltfläche, die beim Betätigen eine Meldung ausgibt und welche nur aktiv ist, wenn eine unsere Combobox cbeSchaltflaeche den Inhalt „aktiv“ hat.

Erste Funktion (Aktion):

function SchaltFExecute(){     AMS.MsgBox("Hallo aus der Sparte!"); }

Zweite Funktion (Prüffunktion):

function SchaltFUpdate(){ if (cbeSchaltflaeche.Text == "aktiv"){     ActionData.SetString("Result", "Ja");   }   else {     ActionData.SetString("Result", "Nein");   } }

Weitere Beispiel-Events finden sich bei den Anwendungsbeispielen unter dem Punkt Erweitert.

Regeln

Allgemein

Die dritte und letzte Möglichkeit Oberflächenlogik zu gestalten ist mit sog. Regeln. Mit Regeln kann die Maske automatisiert an definierte Situationen angepasst werden. Beispielsweise kann ein Hinweistext eingeblendet werden, wenn ein Feld einen bestimmten Wert enthält oder es können, abhängig von den Eingaben des Anwenders, weitere Steuerelemente eingeblendet werden.

Regeln werden im Gegensatz zu anderer Logik nicht programmiert, sondern eingestellt.

Hinzufügen kann man Regeln unter der Ansicht „Maske“ auf der rechten Seite:

 

Eine Regel hat drei Bestandteile, eine Bezeichnung, einen oder mehrere Auslöser und eine oder mehrere Aktionen.

Bei den Auslösern werden Bedingungen erfasst, welche konjunktiv (UND) verbunden sind. Das bedeutet, nur wenn alle Auslöser erfüllt sind, werden die Aktionen ausgeführt. Sie setzen sich immer aus einer Eigenschaft und einem Wert zusammen. Immer wenn sich eine der angeführten Eigenschaften ändert, wird überprüft, ob eine Regel angewendet werden soll.

Aktionen stellen nun die Ereignisse dar, die in Folge der erfüllten Bedingungen ausgeführt werden. Sie bestehen ebenfalls aus einer Eigenschaft und einem Wert. Wird eine Regel angewandt, werden die Werte in die Eigenschaften übertragen. So können z.B. Steuerelemente, wie eingangs erwähnt, ein- und ausgeblendet werden oder ein Hinweistext könnte angepasst werden.

Auslöser definieren

Zunächst muss ein Element ausgewählt werden, dessen Eigenschaft als Auslöser dienen soll. Dies können Steuerelemente, aber auch kompatible Datenmengen sein.

Wurde ein Steuerelement ausgewählt, werden in der Eigenschaftsliste jene Eigenschaften aufgeführt, welche als Auslöser verwendet werden können. Dies ist von der Art des Steuerelements abhängig.

Wurde eine Datenmenge ausgewählt, kann auf eine Zustandsänderung der Datenmenge reagiert werden oder auf eine Änderung eines Feldwerts. Es werden also vier Zustände aufgeführt: Bearbeiten, Inaktiv, Lesen und Neuanlage. Eine Regel wird überprüft, wenn einer dieser Zustände eintritt. Zusätzlich werden alle Felder der Datenmenge aufgelistet. Ausgelöst wird die Regel dann, wenn der Wert, des gewählten Feldes, sich geändert hat.

Mit Ungleich kann die Bedingung invertiert (umgekehrt) werden. Sie ist also erfüllt, wenn die Eigenschaft ungleich des erfassten Wertes ist.

Bei Wert kann angegeben werden, gegen welchen Wert die Eigenschaft geprüft wird.

Aktion definieren

Aktionen beziehen sich ebenfalls immer auf Steuerelemente. Wenn ein Element ausgewählt wurde, werden alle Eigenschaften aufgelistet, auf die schreibend zugegriffen werden kann. Die Auswahl ist abhängig von der Art des Steuerelements. Der dritte Parameter „Wert“ wird bei Ausführung in die Eigenschaft übertragen.

Beispiel

Zunächst werden 3 Label und eine DataCheckBox auf der Maske platziert:

 

Wir definieren nun zwei Regeln:

  1. CheckboxChecked

 

  1. CheckboxUnchecked

 

Wurden die beiden Regeln so nachgebaut sollte die Maske nun wie folgt aussehen:

Angehakt
Nicht angehakt

Weitere Beispiel-Events finden sich bei den Anwendungsbeispielen unter dem Punkt Erweitert.

Datenmengen

Allgemein

Datenmengen kapseln Daten aus der Datenbank oder auch statische Daten in Form von Objekten. Die Datenmengen lassen sich abhängig von der Art als Referenzliste für ein Steuerelement verwenden oder aber vom Programmierer aus einem Skript heraus ansteuern.

Die beiden Datenmengen „Vertragsdaten“ und „Spartendaten“ sind immer verfügbar. Über „Vertragsdaten“ kann auf den geöffneten Vertrag zugegriffen werden, wohingegen „Spartendaten“ den Zugriff auf die selbstdefinierte Spartentabelle ermöglicht.

Eine Datenmenge besteht im Wesentlichen aus drei Bestand-teilen. Einer Bezeichnung, einer Quelle und Parametern.

Über die Bezeichnung kann auf die Datenmenge zugegriffen werden. Damit der Zugriff auch aus einem Skript heraus erfolgen kann, darf die Bezeichnung keine Sonder- oder Leerzeichen enthalten.

Bei Datenquelle wird die Art der Datenmenge angegeben. Dies hat Einfluss darauf, wo die Daten herkommen, wie die Daten ermittelt werden, wie auf die Daten zugegriffen werden kann und ob ein schreibender oder nur ein lesender Zugriff möglich ist. Die Parameter sind von der Art der Datenmenge abhängig.

Nachschlageliste

Im System sind einige Listen definiert, aus denen der Anwender eine Wahl treffen kann. Dies sind im Kunden z.B. der Beruf Status oder im Vertrag der Status. Manche von ihnen können darüber hinaus durch den Anwender, z.B. der Statusgrund im Vertrag, bearbeitet werden.

Zu diesen Listen können ebenfalls Benutzerdefinierte Domänen hinzugefügt werden.

Diese Listen können nur von Steuerelementen verwendet werden, welche die Eigenschaft “Listendaten” besitzen. Wird dort eine Datenmenge angegeben, bietet das Steuerelement eine Auswahlliste und Autovervollständigung an.

Die Nachschlagelisten benötigen zwei Parameter. Zunächst muss angegeben werden, ob der Anwender die Liste bearbeiten kann. Dies geschieht mit “Editierbar”. Über diese Angabe wird auch ermittelt, welche Listen verwendet werden können. Eine Liste, welche nicht zur Bearbeitung durch den Anwender vorgesehen ist, kann hier ausgewählt werden, wenn “Editierbar” ausgewählt wurde.

Bei dem zweiten Parameter handelt es sich um den Namen der Liste. Nicht immer kann ein statischer Name verwendet werden, da die Auswahl z.B. von anderen Daten abhängig ist. Nehmen wir als Beispiel den Vertragsstatus und den Statusgrund. Der Vertragsstatus stammt aus der nicht editierbaren Liste “vertrag.status”. Zu jedem Eintrag existiert eine eigene, editierbare Liste mit Gründen. Zum Status “EIGEN” gehört z.B. die Liste “status.grund.vertrag.eigen”.

Deshalb kann der Name dynamisch zusammengesetzt werden, indem Referenzen verwendet werden. Über die “Augen”-Schaltfläche, kann eine Eigenschaft eines anderen Elements referenziert werden. So kann beispielsweise auf den ausgewählten Vertragsstatus zugegriffen werden.

Der Listenname, für die Statusgründe, lautet dann wie folgt:
status.grund.vertrag.##cbeVertragsstatus.Text##

Wann immer sich nun der Wert in cbeVertragsstatus.Text ändert, wird die Datenmenge mit den Gründen aktualisiert man erhält also immer die passende Liste.

Verknüpfungen

Verknüpfungen sind Datenmengen, die in Bezug zu bereits definierten Datenmengen stehen. Verträge sind beispielsweise mit einer Gesellschaft verknüpft. Um auf die Gesellschaftsdaten zugreifen zu können, kann eine Datenmenge mit der Art „Verknüpfung“ angelegt werden.

Zu einer bereits definierten Datenmenge werden verknüpfte Daten eines bestimmten Typs bereitgestellt. Verträge, zum Beispiel, sind u.a. mit einer Gesellschaft verknüpft. Um auf die Gesellschaftsdaten zugreifen zu können, kann eine Datenmenge mit der Art „Verknüpfungen“ angelegt werden.

Bei dem Parameter „Verknüpfungen zu“ wird die Datenmenge ausgewählt, zu der Verknüpfungen ermittelt werden sollen. In unserem Beispiel sind es die Vertragsdaten, zu denen Verknüpfungen ermittelt werden sollen. Durch die Auswahl des ersten Parameters wird nun die Liste von möglichen Verknüpfungsarten gefüllt. Bei einem Vertrag ist dies u.a. „Gesellschaften“.

Objekt

SQL

Freie Liste

Indexzahlen

Allgemein

Indexzahlen stellen eine Möglichkeit dar, in Skripten verwendete Werte, von außerhalb, anzupassen. Indexzahlen lassen sich über die ams-Oberfläche für eine Sparte einpflegen und warten. Ein Eintrag kann dabei bis zu 4 Werte enthalten und besteht mindestens aus einer Bezeichnung und einem Stichtag. Der Stichtag fungiert hierbei als Bedingung, an welcher das ams erkennt, welche Indexzahlen für die Berechnung herangezogen werden sollen.

Erstellung

Um Indexzahlen nutzen und erstellen zu können, müssen diese bei einer Sparte aktiviert werden. Dazu werden folgende Zeilen in der Spartenbeschreibung benötigt.

var Descriptor = EventData.GetContext("Descriptor"); //Diese Werte können dann bei Neuanlage eines Indexes definiert werden (max. 4) Descriptor.IndexBezWert1 = "NameIndex1"; Descriptor.IndexBezWert2 = "NameIndex2"; Descriptor.IndexBezWert3 = "NameIndex3"; Descriptor.IndexBezWert4 = "NameIndex4";   //Dies aktiviert die Erstellung von Indexzahlen. Descriptor.Index = 1;

Sobald die Spartenbeschreibung um diese Zeilen erweitert wurde, sieht man in der Liste aller Sparten (Organisation -> Sparten verwalten) in der Spalte Index bei der entsprechenden Sparte ein „Ja“ als Eintrag:

Wählt man diese Sparte nun aus aktiviert sich im Menüband die Schaltfläche „Indexzahlen“, unter welcher man Indexzahlen erstellen bzw. verwalten kann.

Wählt man nun diese Schaltfläche aus und macht eine Neuanlage, so öffnet sich folgendes Fenster:

Bei NameIndex1 bis NameIndex4 lassen sich nun die gewünschten Indexzahlen eintragen bzw. anpassen.

Der Stichtag stellt das Datum dar, zudem die Anpassung der Indexe stattfinden soll.

Arbeiten mit Indexzahlen

Die neu definierten Indexzahlen lassen sich nun wie folgt im Code ansprechen:

var vtIndex = Runtime.provideAmsObjekt("TIndexZahl"); //SelektionIndexZahlStichtag bekommt als Parameter Sparte, Gesellschaft, Tarif und Stichtag übergeben vtIndex.SelektionIndexZahlStichtag(Vertrag.FindField("TYP").AsString,      Vertrag.FindField("GES").AsString,  "",     Vertrag.FindField("Ablauf").AsString); //WERT1 bis WERT4 beziehen sich auf IndexBezWert1 bis IndexBezWert4 var ersterIndex = vtIndex.FindField("WERT1").AsCurrency; var zweiterIndex = vtIndex.FindField("WERT2"). AsCurrency; var dritterIndex = vtIndex.FindField("WERT3"). AsCurrency; var vierterIndex = vtIndex.FindField("WERT4"). AsCurrency;

Gruppensparten

Allgemein

Handelt es sich bei einer Sparte um eine Gruppensparte, so ist man in der Lage mehrere Risiken an einem Vertrag zu führen. Visuell bedeutet das, dass zum einen in unserem Vertrag eine neue Schaltfläche erscheint, über welche neue Risiken hinzugefügt werden können oder das zu bearbeitende ausgewählt werden kann

Zum anderen erhalten Sie unter „Spartenteil“ entsprechend Ihrem ausgewählten Risiko, wie gewohnt, Ihre gebaute Maske, allerdings mit den Informationen des ausgewählten Risikos, angezeigt.

Erstellung

Um eine Sparte als Gruppensparte zu deklarieren, sind Anpassungen in der Spartenbeschreibung-Funktion notwendig. Diese werden über das sog. Descriptor-Objekt, welches uns ausschließlich in der Spartenbeschreibung zur Verfügung steht, umgesetzt.

var Vertrag = EventData.GetContext("Vertrag"); var Sparte = EventData.GetContext("Sparte"); var Descriptor = EventData.GetContext("Descriptor"); Descriptor.IsGruppenSparte = true; Descriptor.BezeichnungGruppe = "NameFürDieGruppe";

Arbeiten mit Gruppensparten

Aus technischer Sicht sind diese nahezu identisch mit Nicht-Gruppensparten und erweitern diese lediglich.

Die Erweiterung besteht darin, dass das Spartenobjekt mehrere Einträge besitzt (die einzelnen Risiken). Bei Nicht-Gruppensparten befindet sich folglich nur ein Eintrag im Spartenobjekt.

Darüber hinaus hat das Anlegen mehrerer Risiken auch zur Folge, dass die Vertragsberechnung pro Risiko einmal ausgeführt wird. Das ams geht an dieser Stelle hin und iteriert über das Spartenobjekt und führt die Vertragsberechnung für jede Iteration einmal aus. Da dies beim Programmieren der Vertragsberechnung sehr irritierend sein kann, sollte der Programmierer die Iteration über das Spartenobjekt selbst übernehmen, sodass das ams beim Ausführen der Vertragsberechnung schon auf dem letzten Element des Spartenobjekts steht und die Vertragsberechnung nicht erneut ausgeführt wird. Folgende Grundstruktur sollte deshalb vom Programmierer bei Gruppensparten übernommen werden:

var Vertrag = EventData.GetContext("Vertrag"); var Sparte = EventData.GetContext("Sparte"); Sparte.First(); while(Sparte.Eof) {   //Ihre Berechnunglogik, die für jedes Risiko ausgeführt werden soll.   Sparte.Next(); }

 

Berechnung der Gesamtprämie

Da der Anwender bei Gruppensparten die Möglichkeit besitzt mehrere Risiken anzulegen und diese evtl. Teilprämien haben, aus denen sich eine Gesamtprämie berechnet, sieht auch die Berechnung/Übertragung ein kleines bisschen anders aus. Der Programmierer sollte eine Variable anlegen, in welcher er bei der Aufsummierung der Teilprämien das Ergebnis speichert und anschließend diese an den Vertrag geben.

In folgendem Beispiel hat die Sparte ein Feld „TEST101“, welches eine Prämie beinhaltet. Es wird nun eine Möglichkeit gezeigt dieses Feld über alle Risiken hinweg aufzusummieren und anschließend das Ergebnis an den Vertrag zu geben.

var Vertrag = EventData.GetContext("Vertrag"); var Sparte = EventData.GetContext("Sparte"); //Variable, um die zu übertragende Gesamtprämie //zu speichern. ACHTUNG: Sollte Initial auf 0 //gesetzt werden, damit in jedem Fall ein Zahlenwert //an den Vertrag übergeben wird. var gesamtPraemie = 0; Sparte.First(); while(Sparte.Eof) {   //Ihre Berechnunglogik, die für jedes Risiko ausgeführt werden soll.   gesamtPraemie = gesamtPraemie + Sparte.FindField("TEST101").AsCurrency;   Sparte.Next(); }   ActionData.SetString("GesamtPraemie", gesamtPraemie); ActionData.SetString("Berechnet", "JA"); ActionData.SetString("IsJahresPraemie", "JA");

 

Die aus dem Kapitel Arbeiten mit Gruppensparten angegebene Grundstruktur, die auch hier verwendet wird, ist zwingend notwendig, um eine Prämie über mehrere Risiken zu summieren, da Sie sonst früher oder später auf folgendes Problem stoßen könnten:

Bei einer Vertragsberechnung wird das ActionData-Objekt immer neu erzeugt, weshalb jedes Risiko die Gesamtprämie mit seiner Teilprämie überschreibt. Daraus folgt, dass Ihre Gesamtprämie gleich der Teilprämie ihres letzten Risikos ist.

Nutzen Sie deshalb, für eine sichere Berechnung, die oben genannte Grundstruktur.

Informationen aus anderen Risiken

Möchte man Informationen aus einem Risiko zu dem Zeitpunkt haben, zu dem das Spartenobjekt nicht auf dieses Risiko zeigt, so muss man darauf achten, dass nach dieser Informationsbeschaffung der Zeiger des Spartenobjekts wieder auf dem richtigen Risiko landet. Andernfalls könnten Risiken bei der Vertragsberechnung übersprungen werden oder im schlimmsten Fall landet man in einer Endlos-Schleife und das ams stürzt ab.

Ein gutes Beispiel für eine Information, die man bereits vor der Iteration über das Spartenobjekt gebrauchen könnte, wäre die Anzahl der Risiken.

Hier ein Skriptausschnitt, wie eine Funktion aussehen könnte, die uns die Anzahl der Risiken gibt:

function GetAnzahlRisiken(SpartenObjekt) {     //Amsidnr wird gemerkt, damit wir nach der Informations-     //beschaffung wissen, auf welches Risiko wir das Sparten-     //objekt stellen müssen.     var merkAmsidnr = SpartenObjekt.FindField("AMSIDNR").AsString;     //Zähler für die Anzahl der Risiken     var zaehler = 1;     //Iteration zur Bestimmung der Anzahl der Risiken     SpartenObjekt.First();     while(SpartenObjekt.Eof) {         zaehler++;         SpartenObjekt.Next();     }     //Spartenobjekt wieder auf das richtige Risiko stellen:     SpartenObjekt.First();     while(SpartenObjekt.FindField("AMSIDNR").AsString != merkAmsidnr){         SpartenObjekt.Next();     }     //Rückgabe der Anzahl der Risiken     return zaehler; }

 

Dem aufmerksamen Leser wird aufgefallen sein, dass wenn wir diese Information bspw. vor der Hauptschleife in unserer Vertragsberechnung brauchen, wir auch nur ein SpartenObjekt.First() machen könnten. Hier ist dem Programmierer freie Hand überlassen diese Abkürzung zu nehmen oder auch mit Funktionen, wie SpartenObjekt.Prior() zu arbeiten.

Dem Programmierer muss bewusst sein, dass wenn er unabhängig von der Hauptschleife über das Spartenobjekt iteriert, dieses auch wieder auf seine ursprüngliche Position zurücksetzt, sofern die Vertragsberechnung wie geplant fortgesetzt werden soll.

Dokumentation

Spartenmaskendesigner

Ansicht Maske

Menüband

Bearbeiten

 

  1. Die Maske wird geleert und alle Regeln, Datenmengen, Schaltflächen und Maskenskripte werden entfernt. Die Skripte zur Sparte und selbstdefinierte Funktionen bleiben erhalten.

  2. Die Maske inkl. Aller zugehörigen Daten wird in der Datenbank gespeichert. Selbstdefinierte Funktionen werden in die jeweiligen, externen Skriptdateien geschrieben.

  3. Die Maske, alle Regeln, Datenmengen, Schaltflächen und Maskenskripte werden in eine Datei auf dem Dateisystem gespeichert.

  4. Eine Maske mit allen Regeln, Datenmengen, Schaltflächen und Maskenskripten wird aus einer Datei auf dem Dateisystem eingelesen.

  5. Hat man eine Komponente in der Zwischenablage kann sie über Einfügen eingefügt werden.

  6. Legt eine Komponente in die Zwischenablage und entfernt diese von der Maske.

  7. Legt eine Komponente in die Zwischenlage.

  8. Markiert alle Steuerelemente

  9. Entfernt alle ausgewählten Steuerelemente von der Maske.

  10. Macht die letzte ausgeführte Aktion rückgängig.

Elemente

Ist die Schaltfläche „Auswählen“ markiert, kann im Designer mit vorhandenen Steuerelementen interagiert werden. Sie können ausgewählt, verschoben und in der Größe geändert werden.

Die weiteren Schaltflächen repräsentieren jeweils ein Steuerelement. Ist eine von diesen markiert, führt ein Klick auf den Maskenbereich dazu, dass ein neues Steuerelement, vom jeweiligen Typ, auf der Maske platziert.

Struktur

Hier findet sich die Hierarchie der auf der Maske befindlichen Komponenten wieder. Komponenten sind entsprechend Ihrer Lage eingerückt.

Wählt man eine Komponente in dieser Ansicht aus, so ist sie automatisch im Editor ausgewählt und der Objektinspektor gibt die Detailinformationen zu der entsprechenden Komponente.

In diesem Beispiel ist auf der ersten Ebene ein PageControl, auf welchem sich mehrere TabSheets befinden. Auf diesen wiederum befindet sich ein Panel, welches die einzelnen Komponenten beherbergt.

 

 

Elemente

In diesem Fenster kann ein Typ ausgewählt werden, von dem ein neues Element auf der Maske platziert werden soll.

Durch Eingabe in das Suchfeld, wird die Liste gefiltert.

  

 

 

 

Objektinspektor

Hier werden, zu dem ausgewählten Steuerelement, alle verfügbaren Eigenschaften und Ereignisse aufgelistet.

Klickt man Rechts von einer Eigenschaft in das Feld lässt sich der Wert verändern.

Im unteren Bereich erhält man eine kurze Erklärung zu der ausgewählten Eigenschaft.

Man kann über den Objektinspektor auch auf die Events, der Komponente, zugreifen, indem man den Tab „Ereignisse“ auswählt.

 

 

 

 

 

 

Regeln

Hier werden alle Regeln einer Maske aufgelistet und es können neue hinzugefügt werden.

 

 

 

Datenmengen

Hier werden alle Datenmengen einer Maske aufgelistet und es können neue hinzugefügt werden.

 

 

 

Editor

Hier wird die eigentliche Maske gebaut. Es können Komponenten hinzugefügt, verschoben und in der Größe verändert werden.

Ansicht Skripte

Menüband

 

  1. Befindet sich der Einfüge Zeiger auf einem Funktionsaufruf, kann mit dieser Funktion zu der Deklaration der Funktion gesprungen werden. Dabei wird ein Lesezeichen an der aufrufenden Stelle hinterlassen.

  2. Das Neuste, also das zuletzt angelegte, Lesezeichen wird angesprungen. Dabei wird das Lesezeichen entfernt.

  3. Der Inhalt des Skripteditors wird einer Syntaxprüfung unterzogen. Dabei wird der Aufbau des Skripts kontrolliert. Eine erfolgreiche Prüfung bedeutet, dass das Skript ausgeführt werden kann. Das Skript kann jedoch nicht auf Fehlerfreiheit überprüft werden.

  4. Hiermit können einzelne Funktionen getestet werden. Dabei werden an die Funktion ggf. Eingabeparameter übergeben und ein evtl. vorhandener Rückgabewert angezeigt. Diese Funktion ist vor allem dafür geeignet, selbstdefinierte Funktionen zu testen. Masken- und Spartenskripte können hiermit nicht getestet werden, da der Kontext (wie z.B. Vertragsdaten) fehlen.

  5. Hier kann, neben der Bildlaufleiste, eine Miniatur Darstellung des gewählten Skripts, ein- und ausgeblendet werden.

  6. Während der Eingabe bzw. auf Aufforderung durch Betätigen der Tastenkombinationen STRG+SPACE, kann der Editor Vorschläge zur Vervollständigung der Eingabe machen. Mit der Schalfläche „Vorschlaglisten“ kann diese Funktion ein- bzw. ausgeschaltet werden.

  7. Mit der Schaltfläche „Hintergrundparser“ kann gesteuert werden, wann die Vorschlagslisten erstellt werden. Wahlweise in Echtzeit, während der Eingabe oder Zeitversetzt im Hintergrund. Dies kann Auswirkungen auf die Tippgeschwindigkeit haben.

Funktionen

Schaltflächen

Editor

Ansicht Vorschau

Vorschau-Fenster

Die Vorschau kann einen Eindruck davon vermitteln, wie die Maske aussieht und sich verhalten wird. Sie unterliegt aber zwei Einschränkungen. Es stehen keine Vertrags- und Spartendaten zur Verfügung und es werden keinerlei Skripte ausgeführt. Regeln werden angewandt und Datenmengen sind bereitgestellt, soweit diese keine Vertrags- oder Spartendaten referenzieren.

Durch diese Einschränkung ist sichergestellt, dass keine Daten manipuliert werden. Diese Vorschau kann also bedenkenlos genutzt werden.

Vertragsvorschau

Die Vertragsvorschau bietet die Möglichkeit die eigene Maske inkl. Aller Skripte, an einem lebenden Vertrag zu testen.

Sämtliche Änderung an den Daten, auch gelöschte Informationen, wirken sich dauerhaft auf den Datenbestand aus und können nicht rückgängig gemacht werden. Dies gilt sowohl für manuelle Eingaben in der Maske als auch für Aktionen in den Skripten.

Mit der Schaltfläche „Vertrag auswählen“ kann der Vertrag ausgewählt werden, mit dem getestet werden soll. In dem Suchdialog werden nur Verträge angeboten, welche zu der Sparten Produkt Kombination der Maske passen.

Unter „Gewählter Vertrag“ werden einige Informationen, des derzeit ausgewählten Vertrags, aufgeführt.

Mittels der Schaltfläche „Mit Vertrag testen…“, wird der Test gestartet. Sollte noch kein Vertrag ausgewählt sein, öffnet sich zunächst der Suchdialog. Wurde ein Vertrag ausgewählt, öffnet sich ein neues Fenster mit einer Vertragsmaske. Die gesamte Funktionalität der Vertragsverwaltung, steht dem Fenster zur Verfügung. Beendet wird der Test, indem das Fenster geschlossen wird.

Tabellenstruktur

Allgemein

Bei der Tabellenstruktur handelt es sich um die Struktur der zu speichernden Daten. Jeder Eintrag in der späteren Tabelle hat dabei zu jedem Feld, welches in der Tabellenstruktur definiert wird, einen Eintrag (im Zweifel ist das Feld leer).

Ein Eintrag in der Spartentabelle entspricht an der Stelle einem versicherten Risiko. Das heißt Verträge, die keine Gruppensparten sind, haben genau einen Eintrag in der entsprechenden Spartentabelle. Bei Gruppensparten hingegen gibt es endlich viele Spartentabelleneinträge zu einem Vertrag, je nachdem, wie viele Risiken Sie anlegen.

Als Veranschaulichung:

Metainformationen eines Felds

Bitte achten Sie darauf, dass wenn Sie Metainformationen eines Felds eintragen, diese immer in Großbuchstaben und ohne Sonderzeichen angeben (Ausnahme, wenn es in der Dokumentation ausdrücklich erlaubt ist). Dies kann sonst zu Fehlern innerhalb der Datenbankstruktur führen.

Tabelle

Für jedes Feld, das Sie hinzufügen wollen, muss die Spartentabelle angegeben werden. Der Tabellenname muss zwingend mit VT_ beginnen. Wir empfehlen bei der Namensgebung folgende Struktur: VT_<SpartenKürzel>.

Feldname

Jedes Feld braucht einen eindeutigen Feldnamen. Über den Namen, den Sie hier vergeben, greifen Sie von Ihren Skripten bzw. Komponenten auf das Feld zu. Wir empfehlen entweder kurze und vor allem eindeutige Namen oder folgende Struktur: <SpartenKürzel>100, <SpartenKürzel>101, <SpartenKürzel>102, <SpartenKürzel>XXX etc.

Felder dürfen ausdrücklich nicht mit folgenden Namen benannt werden: TYP, XML

Anzeigename

Der Anzeigename eines Felds ist für die Darstellung in Listenansichten innerhalb des ams. Hier können Sonderzeichen und auch Kleinbuchstaben verwendet werden. Nutzen Sie diesen Namen, um das Feld genau zu beschreiben. Lautet Ihr Feldname bsp. TEST101 und stellt eine Versicherungssumme dar, geben Sie als Anzeigenamen „Versicherungssumme“ an.

Relationname

Relationfelder

Domäne

Mithilfe eines systemweit eindeutigem Domänennamen, den Sie selber vergeben, lassen sich z.B. Komboboxen mit einer Nachschlageliste ausstatten. Hierzu ist zu beachten, dass die gewählte Komponente für dieses Feld Nachschlagelisten und Domänen unterstützen muss, damit dessen Werte auch angezeigt werden.

Domäne erforderlich

Über die Auswahl lässt sich definieren, ob der Anwender zwingend einen Wert aus der Nachschlageliste/Domäne auswählen muss, oder ob eigene selbst eingetragene Werte für dieses Feld zulässig sind.

Typ

Hier wird der Datentyp angegeben, also um welche Art von Daten es sich bei diesem Feld handelt. Abhängig davon, ob Sie einen Text, eine Ganzzahl oder einen Betrag speichern wollen, sollten Sie den entsprechenden Datentyp wählen. Eine Auflistung der Datentypen finden sich unter 5.2.3.

Größe

Einige Datentypen brauchen zusätzlich eine Größe. Beispiel ist hier Numerisch/Betrag, bei welchem die Größe die Anzahl an Ziffern angibt. In der Auflistung der Datentypen wird ebenfalls angegeben, welche Datentypen eine Größe brauchen und was diese für diesen Datentyp bedeutet.

Bei Datentypen, die keine Größe benötigen, wird 0 erwartet.

Genauigkeit

Von den Datentypen, die eine Größe benötigen brauchen einige wiederum eine Genauigkeit. Bei Numerisch/Betrag gab die Größe die Anzahl der Ziffern an, die Genauigkeit gibt hier die Anzahl der Nachkommastellen an. Das heißt, wenn bei einem Numerisch/Betrag-Feld eine Größe von 12 und eine Genauigkeit von 2 angegeben wird, dass dann Einträge 10 Stellen vor dem Komma und 2 Stellen nach dem Komma aufweisen können. Auch hierauf wird im Abschnitt der Datentypen genauer eingegangen.

Wichtige Anmerkung

Bei Datentypen, die keine Genauigkeit benötigen, muss zwingend 0 angegeben werden.

Eigenschaften

  • Pflichtfeld

  • Versteckt

  • Nur lesen

  • Benutzerdomäne

  • Berechnet

  • Großschreibung

  • Autoinkrementierung

  • Groß- Kleinschreibung ignorieren

    • Einstellung, ob ein Feld in den Lookup-Dialogen die Groß/Kleinschreibung ignorieren darf. Die Suche unterstützt dabei die Wildcard-Suche mittels Sternchen (*).

  • Eingabe obwohl berechnet

  • Quelle Risiko

    • Dieses Feld wird für die Beschreibung des Risikodatensatzes in Ansichten verfügbar, die diese Anzeige unterstützen

Öffentlicher Name

Über den öffentlichen Namen können die Felder von außen angesprochen werden. Beispielsweise bei der freien Selektion oder aus dem Formularwesen. Wir empfehlen den gleichen Namen wie bei dem Feldnamen zu vergeben.

Zugriff

Formel

Datentypen

Text (Varchar)

Text ist ein Datentyp, um einfache Zeichenketten zu speichern. Es muss eine Größe übergeben werden. Die Größe gibt an, wie viele Zeichen in dem entsprechenden Feld gespeichert werden können.

Wenn eine Eingabe von mehr als 250 Zeichen benötigt wird, sollte der Datentyp Langtext verwendet werden.

Datum

Datum ist ein Datentyp zum Speichern von Datumsangaben in der Form „tt.mm.jjjj“. Es benötigt keiner Größe und keiner Genauigkeit. Wenn ein DataEdit verknüpft wird, wird dieses automatisch zu einem Datums-Eingabe-Feld umgewandelt. Genauere Informationen dazu unter 5.3.

Dieser Typ benötigt keine Größe.

Boolescher Wert

Ein boolescher Wert bildet einen Wahrheitswert ab und kann entweder wahr oder falsch sein. Das beste Szenario für solch einen Wert wäre eine Checkbox, wir empfehlen allerdings Varchar(4) (Für die Werte „Ja“ und „Nein“) zu nehmen.

Dieser Typ benötigt keine Größe.

Numerisch / Betrag

Dieser Typ sollte für die Darstellung von Beträgen genutzt werden. Diesem Typ muss eine Größe zugewiesen werden. Diese Größe gibt die Anzahl der Ziffern an, die eine Zahl haben kann.

Uhrzeit

Datum und Uhrzeit

Realzahl

Binärdaten

Langtext

Dieser Datentyp speichert, wie Text, Zeichenketten. Wird eine Länge von mehr als 250 Zeichen benötigt sollte dieser Datentyp verwendet werden.

Komponenten

Welche Komponente in welcher Situation?

Generell kann man für eine Anforderung immer verschiedene Komponenten nutzen. Allerdings sollte man aufpassen, dass die Komponente nicht eventuell zu wenig Funktionalität bietet oder aber zu viel. Deswegen soll die nachfolgende Auflistung einen groben Überblick geben:

Komponente

Art des Einsatzes

Komponente

Art des Einsatzes

DataEdit

  • Ein einfaches Textfeld, zum Anzeigen oder Einsetzen eines Wertes

DataMemo

Ein großes Textfeld, zum Anzeigen oder Einsetzen eines Textes.

DataComboBox

  1. Ein einfaches Auswahlmenü, welches auf Domänen zugreift.

Label

  1. Ein einfacher Schriftzug, um bspw. Komponenten zu Beschriften.

DataCheckBox

  1. Ein Kästchen zum Angeben eines wahr/falsch-Wertes

Panel

  1. Ein Container zum Platzieren von Komponenten

PageControl

  1. Eine Steuerkomponente zum Verwalten mehrerer Reiter auf einer Spartenmaske

Ihre Maske wird vmtl. zu 90% aus diesen Arten von Informationen bestehen, weswegen Sie, wenn möglich, diese Komponenten nutzen sollten. Die anderen Komponenten, die nachfolgend aufgelistet werden, sollten Sie dementsprechend nur nutzen, wenn Sie deren Funktionalität unbedingt brauchen.

BruttoCalcEdit

Bei dem BruttoCalcEdit handelt es sich um ein Feld zum Erfassen von Zahlenwerten. Er besitzt einen Button am rechten Rand, über welchen sich ein Brutto-Netto-Rechner öffnen lässt. Berechnete Werte lassen sich hierüber direkt übernehmen.

 

 

Button

Der Button stellt eine Schaltfläche dar, die von einem Anwender gedrückt werden kann.

ComboButtonEdit

 

ComboDateEdit

Dieses Steuerelement bietet zwei Schaltflächen. Mit der Ersten kann ein Kalender geöffnet werden, in dem der Anwender einen Tag auswählen kann. Die Zweite öffnet eine, mit der Eigenschaft „Listendaten“, angegebene Vorschlagsliste. Wird ein Vorschlag ausgewählt, muss dieser in einem Ereignis, z.B. „OnSelectSuggestion“, in einen Datumswert umgewandelt werden.

DataCheckBox

Eine einfache Checkbox, die man zum Anzeigen von Ja/Nein-Werten nutzen kann.

DataComboBox

Ein Dropdownmenü, mit welchem man aus einem Set an Werten auswählen kann. Diese können entweder vordefiniert sein oder durch einen Anwender hinterlegt werden.

DataEdit

Ein Textfeld zum Eingeben/Anzeigen von Werten.

DataMemo

Ein Textfeld zum Eingeben/Anzeigen von längeren Texten.

DomainButtonEdit

Mit diesem Steuerelement wird dem Anwender eine Auswahlliste angeboten. Kann eine Liste durch den Anwender bearbeitet werden, wird eine zusätzliche Schaltfläche angezeigt, mit der ein Bearbeiten-Dialog geöffnet wird. Die Eigenschaften, wie z.B. „DomainName“, können zur Laufzeit aus einem Skript geändert werden.

DropDateEdit

 

FixedSqlButtonEdit

 

GroupBox

Containerkomponente, welche einen Rahmen mit Überschrift bietet. Sinnvoll, um zusammenhängende Komponenten zu gruppieren. Komponenten sollten immer mindestens auf einem Panel oder einer Groupbox liegen. Eine Groupbox sollte der Einheitlichkeit halber allerdings auch immer auf einem Panel liegen.

HtmlPanel

Auf diesem Element kann Text im HTML-Format angezeigt werden. Der HTML Quelltext wird mit der Eigenschaft „HTML“ angegeben. Diese Eigenschaft kann per Skript manipuliert werden. Folgend wird z.B. der Text „FEHLER!“ in roter Schrift ausgegeben:

htmlPanel.Html = ‚<p style=“color: rgb(255, 0, 0)“>FEHLER!</p>‘;

 

Folgende HTML Tag werden unterstützt:

·         a

·         address

·         blockquote

·         b

·         big

·         body

·         center

·         cite

·         code

·         dd

·         del

·         div

·         dir

·         dl

·         dt

·         em

·         fieldset

·         form

·         head

·         html

·         h1, h2, h3, h4, h5, h6

·         hr

·         i

·         img

·         input

·         ins

·         kbd

·         label

·         legend

·         li

·         menu

·         ol

·         p

·         pre

·         strong

·         samp

·         small

·         sub

·         sup

·         s

·         strike

·         table

·         tr

·         td, th

·         tt

·         u

·         ul

·         var

Innerhalb dieser Tags werden folgende Attribute unterstützt:

·         align

·         cellspacing

·         cellpadding

·         class

·         color

·         colspan

·         family

·         height

·         href

·         id

·         rowspan

·         style

Folgende CSS-Elemente werden untersützt:

·         appearance

·         background

·         backgroundattachment

·         background-color

·         background-image

·         background-origin

·         background-position

·         background-position-x

·         background-position-y

·         background-repeat

·         background-size

·         border

·         border-bottom

·         border-bottom-color

·         contenteditable

·         cursor

·         direction

·         display

·         dominant-baseline

·         draggable

·         fill

·         fill-opacity

·         fill-rule

·         filter

·         flex-direction

·         float

·         font

·         font-family

·         font-size

·         size

·         stop-color

·         stop-opacity

·         stroke

·         stroke-dasharray