Im Folgenden findest du einen Überblick zu den Bausteinen, die der Software Composer zur Verfügung stellt. Aber keine Sorge, wenn Du nicht jedes Detail gleich verstehst. Es geht hier lediglich darum, dir einen Überblick zu verschaffen.
Mit unserem Basis-Kurs erklären wir dir ganz genau, wie du mit dem Software Composer deine Anwendungen erstellst (siehe Online-Akademie).
Du kannst Datenobjekte (sogenannte Entitäten, englisch: Entity) mit Datenfeldern und Beziehungen untereinander definieren. Die Datenfelder bezeichnen wir als Attribute.
Typische Attribute sind
Ein Beispiel wäre die Entität Person mit den Attributen Name, Geburtsdatum und den typischen Attributen für die Adresse wie Straße, PLZ und Ort.
Typische Beziehungen zwischen den Entitäten sind:
Jede Entität definiert automatisch eine Datenbank-Tabelle. Der Software Composer übernimmt die Pflege der Datenbank und der Datenbank-Tabellen zu den Entitäten. Du hast also in der Regel nichts mit der zugrunde liegenden Datenbank zu tun. Das bedeutet konkret, dass du keine DDL-Skripte für die Schema-Pflege der Datenbank erstellen und nachziehen musst.
Mit Biz kannst du Masken und Formulare erstellen, die aus aus Widgets und Panels bestehen. Als Widgets stehen dir die üblichen GUI-Elemente wie Textfelder, Memofelder, Auswahlfelder, Checkboxen oder Radio-Buttons zur Verfügung. Darüber hinaus gibt es spezielle Widgets, falls du im aktuellen Datensatz eine Referenz auf andere Entität hast, beispielsweise ein Widget für den Empfänger (Entität Person) einer Rechnung.
Layouts
Jedes Panel hat, so wie die Maske selbst auch, ein bestimmtest Layout und kann selbst wieder aus Widgets und Panels aufgebaut werden. Die folgenden Layouts stehen dir zur Verfügung:
Tabellen
In einer Maske kannst du auch Tabellen oder Formulare einfügen, falls du eine Liste von Entitäten darstellen oder verarbeiten möchtest. So kannst du beispielsweise eine Maske erstellen, in der eine Tabelle mit allen aktuellen Rechnungen dargestellt wird. In der Tabelle kannst du eine Aktion hinterlegen, um eine weitere Maske für den gewählten Datensatz zu öffnen.
Detail-Tabellen und Master/Detail
Du kannst eine Tabelle auch für eine sogenannte Master/Detail-Beziehung verwenden. Falls du in deiner Anwendung z.B. zu einem Firmenkontakt mehrere Personen hinterlegen möchtest, kannst du in der Maske für einen konkreten Firmenkontakt eine Auflistung aller Personen hinzufügen. Der Firmenkontakt ist in diesem Fall "Master", die Personen dazu die "Details".
Ein weiteres Beispiel ist, dass du in der Maske des Firmenkontakts eine Auflistung aller Rechnungen anbauen kannst, also eine Auflistung der Rechnungen, die du dieser Firma gestellt hast.
Jede Entität definiert eine Datenbank-Tabelle, die du mit einer Datenabfrage als Tabellen-Widget anzeigen kannst. Bei einer Datenabfrage kannst du festlegen, nach welchen Kriterien die Daten gefiltert werden oder gesucht werden können. Zusätzlich hast du auch die Möglichkeit, die Sortierung von vornherein vorzugeben.
Aber keine Sorge: Du musst keine SQL-Abfragen erstellen - das übernimmt der Software Composer automatisch für dich. Du kannst dich voll auf die Anforderungen für deine Anwendung konzentrieren.
Optionale Filter
Ein optionaler Filter basiert in der Regel auf einem Attribut, nach dem du filtern bzw. suchen möchtest. Das kann z.B. der Name bei Kontakten oder der Status "Offen" bei einer Liste von Aufgaben sein.
Du kannst auch mehrere Attribute kombinieren, um mit einem Suchfeld parallel anhand mehrerer Attribute zu suchen. Beispielsweise kann du ein Suchfeld definieren, mit dem Kontakte nach den Attributen Name des Kontakts, Bemerkung zum Kontakt, Name einer Kontaktpersonen oder Inhalt der Korrespondenz gesucht werden.
Es ist auch möglich, Filter mit Bedingung zu formulieren. Ein Beispiel hierfür ist der Filter "Alle offenen Rechnungen" mit der Bedingung "Rechnung ist fakturiert" und "Rechnung ist noch nicht bezahlt". Wie bereits erwähnt, muss du dafür keine SQL-Abfragen erstellen, sondern kannst dich direkt auf die Attribute beziehen. In diesem Beispiel sähe das so aus:
status = "fakturiert" & bezahlt = false
Permanente Filter
Eine Datenabfrage kann auch einen permanenten Filter anwenden. Wenn du beispielsweise eine Liste der fakturierten Rechnungen anzeigen möchtest, würdest du einen permanenten Filter status = "fakturiert" verwenden.
Sortierung
Wird die Datenabfrage mit einer Tabelle dargestellt, können die Datensätze durch Klick auf die Spaltenüberschrift danach sortiert werden.
Es gibt aber auch Fälle, wo eine Sortierung anhand einer Kombination von mehreren Attributen erfolgen soll. Beispielsweise könntest du eine Liste von Aufgaben nach den Attributen Priorität, Fälligkeit und Aufgabentyp sortieren wollen. Diese Sortierung kannst du als Standard festlegen. Du kannst auch mehrere Sortiermöglichkeiten anbieten, die dann der Anwender selber auswählen kann.
Abschließend sei nochmals erwähnt, dass du keine SQL-Abfragen für die Filter und Sortierkriterien erstellen musst - das übernimmt der Software Composer automatisch für dich.
Zusätzlich zu den Standard-Widgets stehen dir weitere Maskenelement zur Verfügung.
Action Button
Ein Action Button führt eine Aktion aus, die du in der Maske festgelegt hast. Eine Aktion könnte sein, eine Aufgabe als erledigt zu markieren.
Entity-Widget
Nehmen wir als Beispiel eine Rechnung, die eine Referenz auf die Entität Kontakt hat, um den Rechnungsempfänger der Rechnung festzulegen. Das Widget für den Rechnungsempfänger in der Rechnungsmaske stellt den Kontakt dar, z.B. mit dessen Namen. Das Entity-Widget hat rechts einen Button, um einen Kontakt auszuwählen.
Um einen Kontakt auszuwählen, wird die Datenbank-Tabelle der Kontakte als Auswahl-Tabelle geöffnet. Die Datenabfrage wird standardmäßig erstellt. Du kannst aber jederzeit die Datenabfrage und die Auswahlmaske selber festlegen, um z.B. spezielle Filter zu definieren oder mit einem permanenten Filter ganz bestimmte Kontakte von vornherein auszufiltern.
Du kannst das Entity-Widget auch mit einer eigenen Aktion ausstatten. So kannst du z.B. in dem Widget, das den Empfänger einer Rechnung anzeigt, auch einen Button hinzufügen, der die Stammdaten-Maske des Kontakts öffnet. Das ist oft praktisch, weil du dann nicht erst umständlich in einer Kontakt-Übersicht den Kontakt suchen und öffnen musst.
Datei-Widget
Du kannst auch ein Attribute definieren, das eine Datei speichert. Das kann beispielsweise ein PDF eines Vertrags, eine Excel-Datei oder ein JPG-Bild sein.
Das zugehörige Datei-Widget zeigt dir den Namen der hochgeladenen Datei. Das Widget hat rechts - je nach genauer Konfiguration - mehrere Buttons zum Hochladen einer Datei, zum Download der Datei oder zum Löschen der hochgeladenen Datei.
Bild-Widget
Hast du bei einem Datei-Attribut ein Bild hochgeladen, kannst du es mit dem Bild-Widget anzeigen. So kannst du beispielsweise ein Firmen-Logo oder das Portrait-Foto eines Mitarbeiters anzeigen.
Video-Widget
Mit dem Video-Widget kannst du auch Videos integrieren.
Label-Widget und HTML-Widget
Selbstverständlich kannst du auch beliebige Texte in der Maske ausgeben. Das funktioniert auch, wenn die Text als HTML formatiert sind.
Zudem kannst du den Wert eines Attributs auch als Label-Widget anstatt z.B. als Text-Widget anzeigen.
Richtext-Widget
Neben den Text-Feldern und den mehrzeiligen Memo-Feldern kannst du auch Richtext eingeben und anzeigen. Das ist ein Editor, in dem du auch einfache Formatierungen wie Zeichensatz, Schriftgröße und Farben verwenden kannst.
URL-Widget
Mit dem URL-Widget kannst du Links (URL) auf andere Seiten in deine Maske einbauen. Die URL kann auch durch ein Attribute festgelegt, also dynamisch sein.
Du kannst jede Maske und jedes Formular dynamisch auf unterschiedliche Situationen anpassen. So kannst du:
Für die unterschiedlichen Situationen definierst du bei der Entität einen oder mehrere Status-Bausteine. Jeder Status-Baustein kann einen bestimmten Wert annehmen, wobei du festlegst, in welcher Situation welcher Wert gelten soll.
Auf Basis dieser Status-Bausteine definierst du die Dynamik deiner Masken, indem zu festlegst, bei welchem Wert eines Status-Bausteins welches Masken-Element in Bezug auf sichtbar ja/nein, änderbar ja/nein, welche Farbe etc. verändert werden soll.
Betrachte beispielsweise eine Rechnung, die den Status "in Erstellung", "Fakturiert" und "Storniert" haben kann. Jetzt kannst du festlegen, dass der Action Button "Rechnung fakturieren" nur im Status "in Erstellung" und der Action Button "Rechnung stornieren" nur im Status "Fakturiert" sichtbar sichtbar sein soll.
Zudem kannst du festlegen, dass gewisse Eingabefelder nur im Status "in Erstellung" änderbar sein sollen.
Du kannst den Entitäten, Datenabfragen und Masken weitere Bausteine hinzufügen:
Berechnung
Einer Entität kannst du auch Berechnungen als Attribute hinzufügen. Beispielsweise kannst du der Entität Aufgabe das Attribut "Offen seit" hinzufügen, dass die Anzahl der Tage berechnet, seit dem die Aufgabe angelegt, aber noch nicht geschlossen wurde.
Business-Rule
Du kannst einer Entität und einer Datenmenge eine Business-Rule hinterlegen, die bei bestimmten Ereignissen eine oder mehrere Aktionen ausführt. Als Ereignis kannst du wählen zwischen
Mit init können bestimmte Attribute der Entität mit initialen Werten belegt werden, so z.B. das Attribute Status einer Aufgabe auf "Offen".
Mit edit kann auf Änderungen, auch interaktiv während der Bearbeitung in der Maske, reagiert werden. So kann z.B. bei Änderung des Rechnungsdatums automatisch das Zahlungsziel als Datum gesetzt werden.
Invariante
Eine Invariante legt eine Bedingung fest, die immer erfüllt sein muss. Das Datenobjekt kann nicht gespeichert werden, falls die Invariante nicht erfüllt ist. Stattdessen wird eine entsprechende Meldung ausgegeben und ein Widget rot markiert, falls gewünscht.
Ein Beispiel für eine Invariante ist die Bedingung bei einer Rechnung, dass das Rechnungsdatum zum Zeitpunkt der Fakturierung dem aktuellen Datum entsprechen muss.
Bei einer Invariante kannst du festlegen, ob diese schon während der Bearbeitung oder erst beim Speichern geprüft werden soll.
Unique Contraint
Mit einem Unique Constraint kannst du festlegen, dass ein Attribut oder eine Kombination aus Attributen eindeutig sein müssen.
Ein Beispiel für ein Unique Constraint ist die Rechnungsnummer - diese muss eindeutig sein, d.h. sie darf nicht doppelt vergeben werden.
Ein weiteres Beispiel für ein Unique Constraint ist die Kombination aus Kontakt und Veranstaltung bei der Entität Teilnahme: Ein Teilnehmer kann jeweils nur einmal an einer konkreten Veranstaltung teilnehmen..
Generator für laufende Nummern
Mit einem Generator kannst du laufende Nummern nach vorgegebenen Mustern und Regeln erzeugen.
So kannst du automatisch eine Kunden-Nr. als laufende Nummer generieren. Oder aber auch die Rechnungsnummern als laufende Nummer pro Jahr oder eine laufende Nummer einer Rechnungsposition je Rechnung.
Du kannst das Menüs deiner Anwendung frei gestalten.
Es gibt auch die Möglichkeit, im Kopfbereich zwischen dem Logo (links) und den Standard-Menüs (rechts) ein sogenanntes Favoriten-Menü einzufügen, um besonders häufig genutzte Funktionen schnell und einfach zugänglich zu machen.
Des Weiteren kannst Du ein Dashboard definieren, das automatisch nach dem Login angezeigt wird. Das Dashboard kannst du wie eine Maske beliebig gestalten.
Du hast die Möglichkeit, einen Export von Daten in Form von Excel-Dateien oder CSV-Dateien hinzuzufügen. In diesem Fall legst du fest, welche Attribute mit welchen Bezeichnungen exportiert werden. Zudem kannst du einen Kopfbereich definieren, in dem allgemeine Werte exportiert werden.
Auch den Import von Daten aus Excel-Dateien oder CSV-Dateien kannst du sehr einfach hinzufügen.
Zuletzt gibt es auch die Möglichkeit, in deinen Masken ein PDF als Druckversion erzeugen zu lassen.
Du kannst bei deinen Anwendungen folgende Einstellungen vornehmen:
Wir benötigen Ihre Zustimmung zum Laden der Übersetzungen
Wir nutzen einen Drittanbieter-Service, um den Inhalt der Website zu übersetzen, der möglicherweise Daten über Ihre Aktivitäten sammelt. Bitte überprüfen Sie die Details in der Datenschutzerklärung und akzeptieren Sie den Dienst, um die Übersetzungen zu sehen.