Was ist flutter?

Flutter ist ein Open-Source-Software-Development-Kit (SDK) für die Entwicklung von Apps für mobile, Web und Desktop-Plattformen, die auf der Dart-Programmiersprache basieren. Es wurde von Google entwickelt und bietet eine schnelle und effiziente Möglichkeit, benutzerfreundliche Apps mit einer modernen und schnellen Benutzeroberfläche zu erstellen. Flutter nutzt die Dart-Programmiersprache. Flutter bietet eine umfassende Bibliothek an UI-Komponenten und Tools, die es Entwicklern ermöglichen, ihre Apps mit Animationen, Transitions, Shadow Effects, Cupertino- und Material-Design-Elementen anzureichern. Mit Flutter können Entwickler ihre Apps auch mit benutzerdefinierten Widgets erstellen, die aus einer Kombination von vordefinierten und selbst erstellten Komponenten bestehen. Durch den Einsatz moderner Technologien und seiner innovativen Architektur hat Flutter eine sehr hohe Leistung und eine sehr niedrige Latenzzeit. Es verwendet eine eigene Grafik-Engine, die es Entwicklern ermöglicht, native Geschwindigkeit und Animationen zu erreichen, ohne dass eine native Plattform-Komponente erforderlich ist. Insgesamt ist Flutter eine schnelle, leistungsstarke und flexible Plattform für die App-Entwicklung, die es Entwicklern ermöglicht, benutzerfreundliche, performante und ansprechende Apps für mehrere Plattformen zu erstellen.

Mit Flutter kann man native Apps für folgende Plattformen entwickeln: • iOS • Android • Windows • MacOS • Linux • Web (in Form von Progressive Web Apps) Dies bedeutet, dass man mit Flutter eine einzige Codebasis verwenden kann, um Apps für mehrere Plattformen zu entwickeln. Dies spart Zeit und erhöht die Effizienz im Vergleich zur Entwicklung von Apps für jede Plattform separat.

Widgets

Stateless Widgets


In Flutter sind StatelessWidget Widgets Komponenten, die keinen Zustand haben. Das bedeutet, dass sie sich nicht ändern und immer das gleiche Aussehen und Verhalten aufweisen, unabhängig von Benutzereingaben oder Systemereignissen.
StatelessWidget werden normalerweise verwendet, um Teile der Benutzeroberfläche darzustellen, die statisch sind und nicht auf Benutzerinteraktionen oder andere äußere Ereignisse reagieren müssen. Zum Beispiel könnte ein StatelessWidget eine Schaltfläche oder einen Textbereich darstellen.
Ein StatelessWidget wird erstellt, indem die Klasse StatelessWidget implementiert wird und die Methode build überschrieben wird. Die build-Methode gibt ein Widget-Objekt zurück, das die Benutzeroberfläche des StatelessWidget darstellt.
Im Vergleich zu StatefulWidgets sind StatelessWidgets einfacher zu verstehen und zu implementieren, da sie keine dynamische Verhaltensänderungen aufweisen. Außerdem sind sie schneller zu rendern, da ihr Zustand nicht geprüft werden muss.


void main() => runApp(MyApp());

class MyApp extends StatelessWidget {
  @override
  Widget build(BuildContext context) {
    return MaterialApp(
      title: 'Hello World',
      home: Scaffold(
        body: Center(
          child: Text('Hello, World!'),
        ),
      ),
    );
  }
}

Statefull Widgets

In Flutter sind StatefulWidgets Widgets, die einen Zustand haben, d.h. sie können sich ändern und reagieren auf Benutzereingaben oder andere Systemereignisse.
StatefulWidget werden normalerweise verwendet, um Teile der Benutzeroberfläche darzustellen, die dynamisch sind und auf Benutzerinteraktionen oder andere äußere Ereignisse reagieren müssen. Zum Beispiel könnte ein StatefulWidget ein Textfeld sein, das den Benutzertext anzeigt und aktualisiert, wenn der Benutzer Text eingibt.
Ein StatefulWidget wird in zwei Teilen implementiert: als StatefulWidget-Klasse und als Zustandsklasse. Die StatefulWidget-Klasse implementiert das äußere Aussehen und Verhalten des Widgets, während die Zustandsklasse den internen Zustand des Widgets verwaltet.
Wenn sich der Zustand eines StatefulWidget ändert, wird die Methode build der Zustandsklasse aufgerufen, um eine neue Darstellung des Widgets zu erstellen. Diese Methode gibt ein Widget-Objekt zurück, das die Benutzeroberfläche des StatefulWidget darstellt.
Im Vergleich zu StatelessWidgets sind StatefulWidgets komplexer zu verstehen und zu implementieren, da sie einen Zustand haben und auf Benutzereingaben oder andere Systemereignisse reagieren können. Sie können jedoch auch mehr Interaktivität und Dynamik in die Benutzeroberfläche einer App bringen.

Oracle Application Express (APEX) drucken

Einfache Möglichkeiten in Oracle Application Express (APEX) Seiten zu drucken

Eine immer wiederkehrende Aufgabe bei der Erstellung einer APEX Anwendung ist es, die Seiten in ein für den Ausdruck optimiertes Erscheinungsbild zu bringen. Sicherlich gibt es für diese Aufgabe verschiedene Möglichkeiten. Ich möchte in diesem Beitrag eine einfache Möglichkeiten zeigen, wie diese Aufgabe für viele Anwendungsfälle erledigt werden kann.

Der beschriebene Möglichkeit liegt eine einfache Idee zu Grunde. Wenn eine Seite gedruckt werden soll, werden alle störenden Elemente wie das Navigation Menü, die Kopf- und Fußzeile und die Schaltflächen ausgeblendet.

Abbildung 01: Störende Elemente

Dynamic Action

In APEX lassen sich Komponenten einfach ausblenden. Sie können das z.B. über eine Condition erledigen. Eine andere Variante möchte ich Ihnen jetzt vorstellen. Sie können für diese Aufgabe eine Dynamic Action nutzen.

Abbildung 02: Print-Button

Hierzu wird zuerst ein Button in der Seite benötigt. Wenn Sie diesen hinzugefügt habe, klicken Sie mit der rechten Maustaste im Application Builder auf den Eintrag des Buttons in der Seitenstruktur und legen für die Schaltfläche eine neue Dynamic Action an.

Abbildung 03: Neue Dynamic Action

Eine Dynamic Action wird auf Client-Seite im Browser ausgeführt. Hinter ihr verbergen sich JavaScript-Events. In diesem Fall nutzen Sie das OnClick-Event. Das jeweilige Ereignis finden Sie in der Wenn (When) – Sektion. (Ich hatte (leider) bei der Erstellung des Screen-Shots die Entwicklungsumgebung auf Deutsch eingestellt. ) 

Jede Dynamic Action bringt einen True- und einen False-Zweig mit. Sie können also noch eine Bedingung (Condition) hinterlegen, über die Sie steuern können, wann welcher dieser Zweige ausgeführt werden soll. In diesem Fall bedarf es keiner weiteren Einschränkungen. Im True – Zweig werden nun drei Einträge vom Typ JavaScript Expression (JavaScript-Code Ausführen) angelegt.

Abbildung 04: True-Zweig

In dem Ersten Abschnitt tragen Sie nun diesen Quellcode ein.

if ($("body").hasClass("js-navExpanded")) {
     $("#t_Button_navControl").click();
};

setTimeout(3000);

$("#t_Header").hide();
$("#t_Body_nav").hide();
$("#t_Body_title").hide();
$("#t_Body_content_offset").hide();
$(".t-Button").hide();
$(".t-Footer").hide();

Dieser Code ist recht einfach. Zuerst wird das Menü eingeklappt . Nach einer kurzen Pause, werden der Header, die NavBar, der BodyTitle, alle Schaltflächen und auch der Footer ausgeblendet. 

Mit window.print(); wird nun im nächsten Java-Schnipsel der Druck-Dialog des Browsers geöffnet.

Der letzte JavaScript-Teil blendet nach dem Drucken wieder alle versteckten Seitenbestandteile ein.

$("#t_Header").show();
$("#t_Body_nav").show();
$("#t_Body_title").show();
$("#t_Body_content_offset").show();
$(".t-Button").show();
$(".t-Footer").show();


$("#t_Button_navControl").click();

Die Aufteilung in drei eigenständige JavaScript Blöcke sorgt dafür, dass diese synchron – also nacheinander – ausgeführt werden und auf den vorherigen Block warten.

Sie sollten darauf achten, dass Sie die Eigenschaft “Execute On Page Load” der JavaScript-Sektionen auf false setzen.

Abbildung 05: Nicht beim Laden der Seite ausführen.

Die Druckvoransicht können Sie sich in Abbildung 06 exemplarisch für die “Sample Database Application” ansehen.

Abbildung 06: Druckvoransicht

Sicherlich genügt diese Lösung nicht allen Anforderungen. Sie bietet aber eine einfache und schnell zu realisierende Möglichkeit, eine Seite für den Ausdruck zu optimieren.

Oracle APEX 20.2 – Neue Funktionen

Eine erste Auslese der neuen Oracle APEX 20.2 Funktionen. 

Oracle hat APEX in Version 20.2 zum download bereitgestellt. Wer sich nur schnell einen eigenen ersten Eindruck des neusten Oracle Application Express Release verschaffen möchte, kann dies auch wieder auf https://apex.oracle.com/de/ tun.

Region: Karten (Cards)

Eine interessante Neuerung von APEX 20.2 ist sicher der neue Region-Typ Karten. Sie können, wie Sie es von anderen datengebundenen Regionen gewohnt sind, die Daten aus Ihren Tabellen via. SQL dynamisch laden. Allerdings finde ich geht Oracle mit dieser Region für APEX schon einige neue und visuell beeindruckende Wege. Einen ersten interaktiven Eindruck können Sie direkt in der  Beispiel Anwendung zum Universal Theme verschaffen.

Die Karten-Regionen können auf mannigfaltige Weise über ihre Eigenschaften angepasst werden. Darüber hinaus können Sie verschiedene Aktionen direkt an die Karten binden. Je nach eingebettetem Element, lassen sich verschiedene Aktionen hinterlegen. Neben den vor gedachten Möglichkeiten, sind aber auch sehr individuelle Anpassungen via HTML,… direkt in den Eigenschaften der Region möglich.  

Facetted Search

Die Facetten-Suche wurde bereits in APEX Version 19.2 eingeführt und wird seid dem mit jedem Release ausgebaut. In APEX 20.2 fällt dabei zuerst die Möglichkeit auf, die Anzahl der Facetten visuell als Chart darzustellen.

Allerdings finde ich persönlich die erweiterten Filtermöglichkeiten über Facet-Eingabefilter am interessantesten. Über diese Freitextfelder lassen sich individuelle Filter (z.B. Tagging, Umkreissuchen, Größen oder Preise) realisieren.

Automatisierungen

Eine andere, in den Shared Components verborgene Funktion der neuen APEX Version, sind die Automatisierungen. Hier finden Sie eine Mischung aus Event-gesteuerten Aktionen die basierend auf Datenbankinhalten oder Daten aus Remote-Quellen Aktionen auslösen können. Sie können über diese Möglichkeit z.B. Mails versenden, wenn bestimmte Werte in einer Tabelle überschritten werden oder Daten mit Batch-Jobs (PL/SQL) bearbeiten. Die Ausführung erfolgt über einen Scheduler kann aber auch über die APEX_AUTOMATION-API getriggert werden.

Die Automatisierungen erweitern die Möglichkeiten APEX Anwendungen – auch und gerade in der Cloud – in andere Systeme integrieren und mit diesen interagieren zu können. Betrachtet man nicht nur dieses Release sondern sieht sich die Erweiterungen seid Version 19 an, so ergänzen die Automatisierungen die mittlerweile sehr Umfangreichen REST-Schnittstellen sowie die Data Load Funktionen. Dieses Set an Funktionen bietet viele Möglichkeiten Daten aus anderen Systemen zu Laden und zu Verarbeiten. APEX kann mit diesem Toolset sicher noch kein etabliertes ETL-Tool ersetzen, bietet aber bereits jetzt von Haus aus ein beachtliche Vielfalt an Werkzeugen.

Weitere Funktionen

Ich habe in diesem Beitrag nur einige Themen herausgegriffen, die ich für besonders erwähnenswert hielt. Es gibt darüber hinaus noch vieles mehr zu Berichten. Deshalb hier noch einige wenige Punkte in Kürze.

  • Das Universial Theme wurde um eine Anpassung an das Reedwood -Design von Oracle erweitert.
  • Die Entwicklungsoberfäche wurde um den Monaco-Editor, der z.B. auch im Visual Studio Code zum Einsatz kommt, ersetzt. Hierdurch kann jetzt IntelliSense genutzt werden.
  • In QuickSql lassen sich die Modelle nun auch speichern.
  • usw.

Je nach Schwerpunkt setzen Sie vielleicht andere Prioritäten. Eine wirklich gelungene bebilderte Übersicht der aktuellen Neuerungen hat Oracle in diesem Beitrag zusammengetragen.

Erste Hinweise wie es nach Version 20.2 mit APEX weitergehen soll, finden sich im aktuellen Statement of Direction.

Wenn Sie sich die Neuerungen und Funktionen der vorhergehenden Releasestände noch einmal ansehen möchten, finden Sie hier die zugehörigen Blog-Beiträge.

Hibiscus 2 Excel – Teil 2 Finanzdaten importieren

Importieren Sie Ihre Online Banking-Daten aus MySQL bzw. MariaDB mit Bordmitteln nach Excel.

Der erste Teil dieses Tutorials beschäftigte sich vor allem mit der Abholung der Daten Ihrer Bankkonten unter Zuhilfenahme des open Source Online-Banking Tools hibiscus und der exemplarischen Auswertung der Daten via. SQL. Hibiscus bietet die Möglichkeit, über HBCI Kontodaten bzw. Kontobewegungen von den Banken abzurufen und diese in einer relationalen
Datenbank zu speichern.

Im zweite Teil des Tutorial Hibiscus 2 Excel geht es um das regelmäßige Übertragen Ihrer Onlinebanking Daten nach Excel. Microsoft Excel bietet dafür einige Möglichkeiten, die Sie in der Ribbonbar unter Daten finden. So können Sie Daten z.B. aus CSV-Files, anderen Excel Dokumenten oder Access-Datenbanken importieren. Da Hibiscus die Möglichkeit bietet MySQL bzw. MariaDB zur Verwaltung der Bankdaten zu verwenden, möchte ich in diesem Tutorial den Import aus MariaDB über einen ODBC-Treiber demonstrieren.

MariaDB – ODBC Treiber

Bei MariaDB handelt es sich um einen Fork von MySQL. MariaDB ist eine relationale Datenbank, die Ihre Daten verteilt in Tabellen speichert. Um auf diese Daten zuzugreifen, gibt es verschiedene Möglichkeiten. In diesem Beispiel soll der Zugriff über einen ODBC-Treiber erfolgen. Diesen könne Sie hier für MariaDB herunterladen und anschließend installieren.

Abbildung 01: ODBC Data Source

Um aus Excel heraus auf eine MariaDB via. ODBC-Verbindung zugreifen zu können, müssen Sie eine Verbindung konfigurieren. Öffnen Sie dazu die APP ODBC Data Sources (32bit).

Im Register Benutzer-DSN können Sie einen neue Datenquelle Hinzufügen.

Abbildung 02: Datenquelle hinzufügen

Zuerst vergeben Sie einen Namen (hier hibiscus). Klicken Sie auf Next > .

Abbildung 03: ODBC Verbindung

Anschließend geben Sie noch den Server-Namen an, auf dem Sie Ihre Datenbank betreiben. Bei der aktuellen MariaDB Version erfolgt im Standard die Verbindung über den TCP/IP-Port 3307. Je nach Konfiguration der Datenbank (z.B. SSL) sind noch weitere Parameter zu definieren. In der Regel können Sie über Next > Next > Finish die Einrichtung abschließen.

Sie sollten (siehe Abbildung 03) bei der Einrichtung durch Eingabe des Datenbankbenutzers und Passworts + Button Test DSN die Verbindung prüfen. Dies reduziert die spätere lästige Fehlersuche.

Daten in Excel importieren

In Excel können Sie Daten aus MariaDB (oder auch einer einer anderen ODBC Datenquelle) importieren.

Abbildung 04: Excel – Daten abrufen

Dazu navigieren Sie in das Register Daten und klicken dort auf Daten abrufen. Wählen Sie in dem DropDown-Menü Aus anderen Quellen > Aus ODBC.

Abbildung 05: ODBC-Datenquelle wählen

Als nächstes selektieren Sie die ODBC-Datenquelle, die Sie anfangs angelegt haben. in diesem Beispiel “hibiscus”. Weiter geht es mit OK. Geben Sie Ihre Zugangsdaten für die Datenbank ein.

Abbildung 06: Tabellen bzw. Views

Wenn Sie die Verbindung korrekt angelegt haben, sollten Sie eine Übersicht alles Tabellen und Views Ihrer Datenbank sehen. Wählen Sie z.B. die Tabelle konto.

Der Wizzard zeigt Ihnen nun eine Übersicht des Tabelleninhaltes. Über den Button Laden können Sie die Daten in die aktuell gewählte Excel Tabelle importieren. Zusätzlich wird die Abfrage in der Excel Datein gespeichert.

Daten aktualisieren

Sie können über verschiedene Wege den Importvorgang wiederholen, so dass die Daten in Ihrer Excel-Datei aktualisiert werden.

Abbildung 07: Daten aktualisieren

Im Register Daten finden Sie den Eintrag Alle aktualisieren. Über diesen werden alle, in Ihrer Excel Datei enthaltenen Abfragen, neu ausgeführt und die Daten erneut eingefügt.

Über die Schaltfläche Abfragen und Verbindungen können Sie aber auch einzelne Abfragen gezieht ausführen und diese verwalten.

Auswertung

Zur Auswertung Ihrer Daten stehen Ihnen nun alle Möglichkeiten von Excel zur Verfügung. Sie können mit den Daten rechnen, Sie in Pivot-Tabellen analysiere oder mit Hilfe von Diagrammen visualisieren.

Datenbank-Views

Wie Sie eben sehen konnten, wurden Ihnen nur Tabellen und sogenannt Datenbank-Views zum Import angezeigt. Die im ersten Teil des Tutorials entwickelten Select-Statements können Sie nicht direkt eingeben.

Eine Möglichkeit komplexere Abfragen verwenden zu können bieten Datenbank-Views. Eine View ist eigentlich nichts anderes als ein in der Datenbank gespeichertes Select-Statement. Um z.B. die Umsätze Ihrer Konten in Excel auswerten zu können, legen Sie eine entsprechende View in der Datenbank (z.B. über HeidiSQL) an.

CREATE VIEW V_UMSAETZE AS
SELECT k.id,
       k.kontonummer,
       k.blz,
       k.bezeichnung,
       u.empfaenger_konto,
       u.empfaenger_blz,
       u.empfaenger_name,
       u.zweck,
       u.zweck2,
       u.betrag,
       u.saldo,
       u.datum,
       u.art
 FROM konto k, umsatz u
 WHERE u.konto_id = k.id
Quellcode 01: View V_Umsaetze

Diese View können Sie dann wie oben beschrieben in Excel importieren.

Hibiscus 2 Excel – Open Source Alternative zu Money in Excel – Teil 1 Finanzen analysieren

Hibiscus ist eine freie Online-Banking Software. In diesem Beitragsreihe geht es um eine Schnittstelle zu Excel als Alternative zu Money in Excel und die Analyse Ihrer Finanzdaten. Über diesen Weg lässt sich das eigene Haushaltsbuch automatisieren.

Beschäftigt man sich mit mit den eigenen Finanzen, findet man auf diversen Finanzblogger-Seiten – hier mit frugalisten.de, finanzfluss.de mal einige interessante Beiträge zu dem Thema – immer wieder den Ratschlag, ein Haushaltsbuch zu führen. . Oft sind sich die Blogger und auch die Kommentatoren einig, dass ein Haushaltsbuch die Mühe Wert ist, aber eben auch einiges an Mühe und Disziplin kostet, es zu führen. In sehr vielen Fällen läuft es auf eine Lösung in Excel oder einer anderen Tabellenkalkulation heraus. Auch bieten gerade fintechs und mittlerweile auch Banken für Ihre Kunden Analysefunktionen der Kontobewegungen.

In den folgenden zwei Beiträgen möchte ich Ihnen einen Open Source Ansatz zeigen, mit dem Sie eine ähnliche Funktionalität wie Money in Excel selber nachbilden können. Hierzu dient das Open Source Online Banking Tool hibiscus. Es fungiert als Schnittstelle zu Ihren Bankdaten. Wie Sie diese Daten dann nach Excel transportieren können, wird Thema des zweiten Beitrags werden.

Money in Excel

Microsoft bietet mit Money in Excel eine interessante Erweiterung von Microsoft 365 an. Die neue Lösung, die bisher nur in der US Version verfügbar ist, kommt als Template mit einem AddIn daher. Money in Excel bietet die Möglichkeit Konto- und. Kreditkartendaten in Excel zu importieren. Die Excel Vorlage bringt diverse Darstellungen und Auswertungen der eigenen Finanzdaten mit. So können Konten konsolidiert, regelmäßige Ausgaben ermittelt und in entsprechenden Charts dargestellt werden. Abgerufene Daten werden in sogenannten Snapshots eingefroren.

Das interessante an dieser Lösung ist, dass man die Auswertungen selber beliebig erweitern kann. Wer sich einen erste Eindruck zu Money in Excel verschaffen möchte, findet hier eine entsprechenden Artikel von Microsoft.

Microsoft bedient sich für den Import der Kontodaten der Dienste von Plaid. All denen , die Ihre Daten nicht über Plait abholen lassen möchten oder nicht auf die Veröffentlichung von Money in Excel in unseren Gefilden warten möchten, möchte ich hier eine alternative Lösung, basierend auf dem Open Source Online Banking Tool hibiscus, zeigen.

Hibiscus – Open Source Online Banking

Olaf Willhun initiierte mit seinem unter der GPL lizenzierten hibiscus, einem AddIn zu Jameica, ein Open Source Online-Banking Tool. Hibiscus bietet die Möglichkeit, vor allem über HBCI, Kontodaten abzurufen und Überweisungen sowie Lastschriften zu tätigen.

Hibiscus bringt ein eigenes Reporting mit. Es sind zeitliche Verläufe von Kontoständen sowie Einnahmen und Ausgaben Übersichten möglich. Eine sehr gelungene Funktion ist auch die automatisierte Kategoriezuordnung der einzelnen Buchungen. Dazu können Suchbegriffe und sogar Reguläreausdrücke verwendet werden. Kategorien können hierarchisch organisiert und über diese Hierarchie aggregiert ausgewertet werden. So ist es z.B. möglich, alle Ausgaben bei verschiedenen Discountern zu einer Kategorie Lebenshaltung zusammenzufassen.

Hibiscus bietet die Möglichkeit, die Kontobewegungen als CSV-Datei zu exportieren. Dies wäre ein einfacher Ansatz, um die Kontodaten in Excel weiter zu bearbeiten. Allerdings bedarf es dabei immer noch des manuellen Abgleichs.

Eine andere Möglichkeit, die Daten in einem eigenen Reporting respektive Excel-Haushaltsbuch für sich nutzbar zu machen, besteht darin, diese direkt aus der Datenbank zu lesen und in Excel zu importieren.

Hibiscus auswerten

Hibiscus nutzt in der Standard – Version der Anwendung eine dateibasierte H2 Datenbank. Es ist aber auch möglich, die Daten in einer eigenen MySql oder MariaDB – Datenbank zu speichert. Wie das geht, ist hier auf der Entwicklerseite beschrieben.

Nachdem Sie über hibiscus Ihre Bankverbindungen eingerichtet und die zugehörigen Kontobewegungen abgerufen haben, können Sie auf diese Daten über ein Datenbanktool wie z.B. HeidiSQL oder PhPMyAdmin zugreifen.

Abbildung 01 zeigt die Tabellen der aktuellen hibiscus – Version.

Kontostand und Umsatz

Den aktuellen Kontostand finden Sie beispielsweise in der Tabelle Konto.

SELECT k.id,
       k.kontonummer,
       k.blz,
       k.bezeichnung,
       k.saldo,
       k.saldo_datum
 FROM konto k

Quellcode 01: Aktueller Kontostand

Über die Tabelle umsatz, lassen sich alle Kontobewegungen ermitteln. Zur besseren Übersichtlichkeit, kann man die Tabelle konto zu den Umsätzen joinen.

SELECT k.id,
       k.kontonummer,
       k.blz,
       k.bezeichnung,
       u.empfaenger_konto,
       u.empfaenger_blz,
       u.empfaenger_name,
       u.zweck,
       u.zweck2,
       u.betrag,
       u.saldo,
       u.datum,
       u.art
 FROM konto k, umsatz u
 WHERE u.konto_id = k.id

Quellcode 02: Umsätze und Konto

Abbildung 02 zeigt, wie das Ergebnis dieser Abfrage aussehen könnte.

Abbildung 03: Umsätze

Wie bereits oben erwähnt, bietet hibiscus die Möglichkeit, Umsätze automatisch einer Kategorie zuzuordnen. Um diese Kategorien auszuwerten, können Sie das vorhergehende Select-Statement um einen weiteren Join zur Tabelle umsatztyp ergänzen. Sollten Sie in hibiscus nicht alle Umsätze einer Kategorie zugeordnet haben, ist hier ein outer join notwendig.

SELECT k.id,
       t.name AS kategorie,
       k.kontonummer,
       k.blz,
       k.bezeichnung,
       u.empfaenger_konto,
       u.empfaenger_blz,
       u.empfaenger_name,
       u.zweck,
       u.zweck2,
       u.betrag,
       u.saldo,
       u.datum,
       u.art
 FROM konto k,  
      umsatz u left join umsatztyp t ON  u.umsatztyp_id = t.id
 WHERE u.konto_id = k.id
  AND year(u.datum) = YEAR(NOW())

Quellcode 03: Umsatz nach Kategorien

Das Ganze sieht dann in etwa so aus.

Abbildung 04: Umsatz mit Kategorie

Via SQL können Sie natürlich eine Vielzahl an Analysen durchführen. Ich möchte Ihnen aber abschließend nur noch zwei kleine Beispiel zeigen.

Umsatz nach Kategorie

Wenn Sie ermitteln möchten, welche Beträge Sie in Abhängigkeit einer Kategorie erzielt bzw. ausgegeben haben, können Sie ausgehende von dem oben entwickelten Select-Statement einfach eine Gruppierung (group by …) nach der Kategorie (hier t.name) durchführen und die Betrag-Spalte summieren. Mit MIN(DATUM) bzw. MAX(DATUM) ermitteln Sie noch den Zeitraum, in dem die Buchungen durchgeführt wurden. Das Ganze grenzen Sie dann noch über eine entsprechende WHERE – Klausel – hier mit year(datum ) = YEAR(NOW()) auf die Umsätze des aktuellen Jahres – ein.

SELECT year(u.datum) AS jahr,
       nvl(t.name,'?') AS kategorie,
       MIN(u.datum) AS von,
       MAX(u.datum) bis,
       SUM(u.betrag) AS sum_betrag
 FROM  umsatz u left join umsatztyp t ON  u.umsatztyp_id = t.id
 where year(datum ) = YEAR(NOW())
group BY nvl(t.name,'?')

Quellcode 04: Auswertung nach Kategorie

Durch eine geschickte absteigende Sortierung nach dem summierten Betrag, sehen Sie sofort, in welche Kategorien Sie die größten Summen bewegen.

Gruppieren Sie die Daten neben der Kategorie noch nach dem aktuellen Monat (… GROUP BY nvl(t.name,’?’), MONTH(datum) ), so können Sie sich die Beträge je Kategorie pro Monat anzeigen lassen.

SELECT  MONTH(datum) AS monat,
        t.name kategorie, 
        MIN(datum) AS von,
        MAX(datum) bis,
        SUM(betrag) AS sum_betrag
 FROM  umsatz u left join umsatztyp t ON  u.umsatztyp_id = t.id
 where year(datum ) = YEAR(NOW())
group BY 
   nvl(t.name,'?'),
   MONTH(datum) 
ORDER BY 1 

Quellcode 05: Monatsauswertung nach Kategorie

Wiederkehrende Umsätze

In einem anderen Szenario geht es jetzt darum, herauszufinden, welche regelmäßigen Ausgaben Sie haben. ein erster Ansatz könnte so aussehen.

SELECT COUNT(*) AS anzahl_buchungen,
       u.empfaenger_konto,
       u.empfaenger_name,		
        MIN(datum) AS von,
        MAX(datum) bis,
        MAX(MONTH(datum)) AS anzahl_monate,
        SUM(betrag) AS sum_betrag
 FROM konto k, umsatz u
 WHERE u.konto_id = k.id
  AND year(datum ) = YEAR(NOW())
 GROUP BY 
   u.empfaenger_konto,
   u.empfaenger_name
 HAVING COUNT(*) > 1
ORDER BY 1 desc

Quellcode 06: Anzahl Buchungen

Mit dem Select- Statement aus dem Quellcode 06 gruppieren Sie Ihre Umsätze nach dem Empfängerkonto und zählen einfach die Anzahl der Buchungen. Ist die Anzahl größer als 1 ( HAVING COUNT(*) > 1 ) , wird es sich evtl. um eine wiederkehrende Buchung handeln.

Werten Sie, wie in diesem Beispiel nur ein Jahr aus, so können Sie mit MAX(MONTH(datum)) die Anzahl der Monate in denen es Buchungen gibt, ermitteln. Vergleichen Sie die Anzahl der Buchungen mit der Anzahl der Monate, sehen Sie grob, ob sich eine Buchung mehrmals pro Monat wiederholt. Auch über MIN(datum) bzw. MAX(datum) können Sie Rückschlüsse ziehen und sehen in welchem Zeitraum die Buchungen aufgetreten sind.

Sie können durch geschicktes Sortieren – z.B. absteigend nach dem Betrag (ORDER BY SUM(betrag) desc ) – sich auch erst um die großen Posten kümmern. Oder Sie schauen sich die vielen kleinen (HAVING COUNT(*) > 12) Buchungspositionen an.

Zwischenbilanz

Ich hoffe, dass die wenigen Beispiele hier, bereits deutlich machen, welche Informationen Ihre ganz persönlichen Daten hergeben. Fängt man erst einmal damit an, sich mit der Auswertung der Daten zu beschäftigen, fallen einem Dinge auf, die im Tagesgeschäft schnell untergehen. Seien es ungekündigte Verträge oder sich wiederholende Kleinstausgaben, die sich aber über die Zeit zu anschaulichen Beträgen summieren.

Sie können über SQL-Statements auch die Sparquote je Monat berechnen und sich die Kategorien mit den höchsten Umsätzen und damit verbunden mit dem größten Sparpotential ansehen.

Aber auch andere Erkenntnisse sind möglich. Wie oft geht man pro Woche/Monat zum Discounter? Wie oft – und vielleicht wie schnell – wird eine Bestellung bei amazon und Co. platziert? Was kostet im Jahr ein Auto ? (Versicherung, Reparaturen, Steuern, Tanken,..)

Welche Schlüsse Sie letztendlich aus diesen Informationen ziehen, bleibt natürlich Ihnen überlassen. Tipps und Diskussionen dazu finden Sie aber sicherlich in den entsprechenden Finanzblogs.

Wie geht es weiter?

Im zweiten Teil dieser Reihe, wird es – wie im Titel angekündigt – darum gehen, wie Sie die (eben) gewonnenen Daten mit Bordmitteln nach Excel automatisch und reproduzierbar übertragen können. Es ist natürlich auch möglich, die Daten in einem anderen Reporting-Tool auszuwerten. Allerdings ist der Aufwand, dies zu bewerkstelligen recht groß. Excel bietet so viele Möglichkeiten Daten auszuwerten und zu visualisieren, dass es sich im privaten Umfeld einfach anbietet Excel zu verwenden.

Installation Flutter – Entwicklungsumgebung

Möchten Sie eine Entwicklungsumgebung für Flutter – Googles Cross-Plattform UI Framework installieren dann finden Sie hier eine Anleitung für Windows 10 und das Android Studio.

Übersicht

Aller Anfang ist schwer, auch wenn es darum geht, etwas Neues zu lernen. Um mit der Entwicklung von Anwendungen, Apps, Web- bzw. Desktop-Anwendungen mit Flutter zu beginnen, brauchen Sie erst einmal eine Entwicklungsumgebung. In diesem Tutorial geht es darum Flutter und als IDE das Android Studio unter Windows 10 einzurichten, so dass Sie Apps für Android entwickeln können. Die Entwicklungsumgebung für andere Zielplattformen fit zu machen, bleibt anderen (noch folgenden) Tutorials überlassen.

Es ist aber auch möglich Flutter und das Android Studio unter Linux oder macOS zu verwenden. Auch andere IDEs, wie z.B. Microsofts Visual Studio Code oder IntelliJ IDEA, sind möglich.

Um nun eine lauffähige Entwicklungslandschaft unter Windows 10 aufzusetzen, sind folgende Schritte durchzuführen.

  • Systemvorraussetzugen prüfen und gegebenenfalls herstellen
  • Flutter SDK installieren
  • Flutter doctor
  • Android Studio installieren

Generell finden Sie die originale Dokumentation und auch die benotigten Download-Links zu Flutter unter https://flutter.dev .

Abbildung 01: Flutter dev – Get started

Folgen Sie dem Button “Get started” und wählen Sie dann Windows aus.

Systemvoraussetzungen

Als Mindestvoraussetzungen für diese Entwicklungsumgebung benötigen Sie mindestens Win 7 SP1 (64bit) oder später mit mindestens PowerShell 5.0. Bei Windows 10 sollte diese Voraussetzung von Haus aus erfüllt sein.

Dann brauen Sie noch Git für Windows in der minimalen Version 2.0.

Sollten Sie Git noch nicht installiert haben, finden Sie den zugehörige Version hier.

Abbildung 02: Download Git for Windows

Starten Sie einfach den Installer. Achten Sie dabei bitte darauf, dass Sie die Git Bash mit installieren und dass Sie die Option “Git from the command line and also from 3rd-party software.” aktivieren.

Flutter SDK installieren

https://flutter.dev/docs/get-started/install/windowsIn diesem Schritt geht es darum das Flutter SDK auf Ihrem Rechner zu installieren. Wenn Sie sich, wie eingangs beschrieben für die https://flutter.dev zur Installationsanleitung durchgehangelt haben, finden Sie den Download-Link im Abschnitt “Get the Flutter SDK”. Ansonsten folgen Sie diesem Link.

Laden Sie die aktuelle Version von Flutter als Zip -Archiv herunter und entpacken Sie es unter c:\src\flutter. Da Flutter auf der Programmiersprach dart basiert, benötigen Sie auch diese. Allerdings müssen Sie sich in diesem Fall nicht darum kümmern, da die kompatible dart Version bereits in dem SDK enthalten ist.

Jetzt müssen Sie noch den Pfad C:\src\flutter\bin in die Path – Variable aufnehmen.

Abbildung 03: Windows 10 Systemumgebungsvariablen

Über die Suche nach env und dann Umgebungsvariablen für dieses Konto bearbeiten öffnen Sie den notwendigen Dialog.

Abbildung 04: Set Path

In der Liste der Benutzervariablen selektieren Sie jetzt die Variable Path, klicken auf Bearbeiten und ergänzen dort den Eintrag C:\src\flutter\bin.

Flutter doctor

Flutter bringt von Haus aus den flutter doctor mit. Mit diesem Tool können Sie Ihre Flutter-Umgebung und deren Abhängigkeiten prüfen. Geben Sie in einer Konsole folgenden Befehl ein.

C:\>flutter doctor
Abbildung 05: flutter doctor

Je nach Umgebung kann die Ausgabe von dem hier in Abbildung 05 gezeigtem Beispiel abweichen. In diesem Fall erkennen Sie, dass Sie die Android – Lizenzbedingungen noch nicht akzeptiert haben. und dass das Android Studio noch nicht installiert wurde.

Um nun die Lizenzen zu aktivieren starten Sie flutter doctor mit der Option — android-licenses und folgen dann der Ausgabe in der Konsole.

C:>flutter doctor --android-licenses

Das Ergebnis sieht danach wie in Abbildung 06 aus.

Abbildung 06: Lizenzen

HINWEIS: Flutter verwendet intern Google Analytics. Um zu verhindern, dass Daten an Google gesendet werden, können Sie dieses Feature abschalten.

c:\>flutter config --no-analytics

Android Studio installieren

Nach diesem Schritt geht es noch an die Einrichtung des Android Studion. Den Download finden Sie hier.

Folgen Sie einfach dem Installation-Wizzard. Zu Begin werden Sie gefragt, ob Sie den Android-Emulator einrichten möchten. Lassen Sie diese Option ausgewählt.

Starten Sie nach der Installation das Android Studio. Dort finden Sie etwas versteckt das Context-Menü Configure.

Abbildung 07: Settings

In der Version 3.6.3 müssen Sie noch diese Option aktivieren.

Abbildung 08: Google AdMob Ads SDK (Obsolet)

Android Studio : Flutter PlugIn einrichten

In dem letzte Schritt der Installation fügen Sie jetzt noch das Flutter PlugIn im Android Studio hinzu. Dazu öffnen Sie wieder das Configure-Context-Menü.

Abbildung: 09: Flutter PlugIn

Wählen Sie das Flutter – PlugIn aus und installieren es. Anschließend ist noch ein Neustart des Android Studios notwendig.

Fertig!

Oracle Application Express (APEX) 20.1 auf apex.oracle.com erschienen

Oracle hat die Apex Version 20.1 auf apex.oracle.com veröffentlicht. Hier finden Sie erste Informationen zu der neuen Version.

Das Apex Entwickler Team von Oracle hat die Version 20.1 veröffentlicht. Wer erste Erfahrungen mit der neuen Version sammeln möchte kann APEX 20.1 auf https://apex.oracle.com werfen.

Als Download steht die neue Version noch nicht zur Verfügung.

Eine Auflistung der neuen Funktionen finden Sie im Statement of Direction.

Oracle APEX 19 Tutorial Teil 5 – Process and Condition

Dieser Teil des Oracle APEX Tutorials zeigt Ihnen, wie Sie Prozesse und Bedingungen ( Conditions ) in Ihren Anwendungen nutzen können.

Es ist ein wenig Zeit vergangen, seid dem ich den Teil 4 des APEX Einsteiger-Tutorials verfasst habe.  Die bisherigen Beschreibungen basierten noch auf der APEX Version 18.2. Diesem Artikel liegt nun die Version 19.1 zu Grunde, so dass Sie sich direkt mit dieser APEX Version vertraut machen können.

Noch einmal zur Erinnerung. Im letzten Artikel (Teil 4)  habe ich beschrieben, wie Sie für eine Tabelle eine Übersichtsseite und eine Form zum Erfassen und Bearbeiten des Tabelleninhaltes erstellen können.

Abbildung 34: APEX Form
Abbildung 34: APEX Form

Die Abbildung 34 zeigt Ihnen den Ausgangspunkt für dieses Tutorial. Für jede Spalten der Tabelle (NAMEN) wurde in der erstellen Form ein Feld – in APEX Item genannt – eingefügt. Je nach Spaltentyp wurden verschiedene Item-Typen verwendet.

Bei den letzten vier Items der Seite handelt es sich um Audit-Spalten in denen der Ersteller, das Erstellungsdatum sowie den letzten Änderer inkl. Änderungszeitpunkt erfasst werden sollen. 

Life-Cycle

Um zu verstehen, wie und wann ein sogenannter Process in einer APEX-Seite ausgeführt wird, ist es sinvoll sich zu vergegenwärtigen, wie eine Seite erzeugt wird.

Initial wird eine Seite durch einen Seitenaufruf per URL (http get) vom APEX-Web-Server angefordert. Der Web-Server reicht den Aufruf an die Datenbank weiter und führt dabei die PL/SQL Funktion f aus. Die Parameter, die der URL respektive dem http get request mitgegenen wurden, werden als Parameter an f  übergeben. In Abhängigkeit des aktuellen Session-Zustands, welcher im sogenannten Session-Cache gehalten wird, und den übergebenen Parametern, rendert f die neuen HTML-Seite. Diese wird dann als Antwort an den Client zurück geschickt. In anderen Szenarien erfolgt die Anfrage (Requests) mittels http-put, wobei sich der Ablauf aber ähnelt.

Im Rahmen dieses klassischen Anfrage- Antwortzyclusses ermöglicht es APEX Ihnen zu verschiedenen Zeitpunkten sogenannte Processes in der Datenbank auszuführen.

Prozess

Es gibt verschiedene Typen von Prozessen. Sie können z.B. vorgefertigte Prozesse verwenden, um Date aus einer Form in die Tabellen der Datenbank zu übertragen. Sie können eigene PL/SQL – Prozesse erstellen oder auch Web Services aufrufen, Mails versenden und vieles mehr.

Für dieses Beispiel sollen die Audit-Felder automatisch mit den entsprechenden Werten versehen werden.  

PL/SQL-Process erstellen

Eine oft genutzte Variante sind Prozesse, die Sie in PL/SQL erstellen können. Um so einen Prozess anzulegen gehen Sie wie folgt beschrieben vor.

Ausgehend von der Seite 3, welche in Abbildung 34 zu sehen ist, klicken Sie in der Developer Toolbar auf den Button “Edit Page”. 

Abbildung 35: APEX Create process
Abbildung 35: APEX Create process

Im Page Designer finden Sie, wie in Abbildung 35 zu sehen ist, die Möglichkeit einen neuen Prozess zu erstellen. Das geht z.B. über das Kontextmenü des Knotens process.

Geben Sie dem Prozess über seine Eigenschaften einen Namen (ID) und wählen sie als Typ PL/PQL-Code. Im Bereich source können Sie nun Ihren Quellcode unterbringen. 

In diesem Beispiel sollen das Item P3_CHANGED_BY und P3_CHANGED_ON mit einem Wert versehen werden.

Um auf ein Item zuzugreifen, stellen Sie dem Item-Namen einfach ein : voran. So können Sie z.B. über :P3_CHANGED_BY := :APP_USER;  den Namen des angemeldeten Users dem Item zuweisen. Abbildung 36 zeigt den kompletten Quellcode für dieses Beispiel.

Abbildung 36: PL/SQL Process
Abbildung 36: PL/SQL Process

Wie Sie dort sehen können, wird über sysdate noch der aktuelle Zeitpunkt einer Änderung ermittelt. Dieser wird allerdings als Char entsprechend formatiert dem Item zugewiesen. Achten Sie darauf, dass die Formatmaske hier mit der des Items übereinstimmt.

Abbildung 37: Formatmask
Abbildung 37: Formatmask

Anschließend bietet es sich noch an, die beiden Items in der Seite 3 auszublenden.

Abbildung 38: Hidden
Abbildung 38: Hidden

Das können Sie recht einfach bewerkstelligen. Markieren Sie dazu im Page Designer die beiden Items un d ändern Sie den Item-Typ auf Hidden (Ausgeblendet).

Wenn Sie nun über die Seite 3 einen neuen Eintrag erfassen oder einen vorhandenen Eintrag ändern, wird der Zeitpunkt der Änderung und der Name des Users vermerkt.

Conditions – Bedingte Prozesse

Wie Sie sicher bemerkt haben, wird der eben erstellte Prozess bei jeder Änderung in der Seite ausgeführt. Für das Speichern des Erstellzeitpunktes und des Erstellers eines neuen Datensatzes wurden der Seite und der Tabelle die beiden Items P3_CRETED_BY und P3_CREATED_ON zugefügt.

Um die Werte dieser beiden Items über einen weiteren Prozess zu setzten, können Sie wie im vorherigen Beispiel einen Prozess erstellen, der via. PL/SQL die Items setzte. Allerdings soll dieser Prozess nur einmalig ausgeführt werden, wenn ein neuer Datensatz angelegt wird. Für solche Fälle nutzen Sie in APEX sogenannte conditions.

Über eine condition können Sie beispielsweise prüfen, ob ein bestimmter Button gedrückt wurde. Sie können über diese Bedingungen feststellen, ob ein Item null ist oder einen definierten Wert besitzt. Für komplexere Prüfungen nutzen Sie einfach SQL oder PL/SQL.

Abbildung 39: Condition
Abbildung 39: Condition

Eine condition definieren Sie über die Eigenschaften eines Prozesses. Dort finden Sie unter conditions – in der deutschsprachigen Version “Serverseitige Bedingung” genannt – verschiedene Möglichkeiten. Für dieses Beispiel genügt es, den Prozess nur dann ausführen zu lassen, wenn der Button CREATE betätgt wird. 

Redirect Oracle Application Express (APEX)

Nutzen Sie den Wartungsmodus einer APEX Anwendung, um diese umzuleiten. Dies kann z.B. hilfreich sein, um eine neue Version der APEX Anwendung auszurollen.

Möchten Sie in einer Produktivumgebungen eine APEX-Applikation gegen eine neue Version tauschen, haben Sie verschiedene Möglichkeiten dies zu bewerkstelligen.

Erzeugen Sie eine neue Version Ihrer Anwendung vergibt APEX eine neue App-Id, die zum Aufruf des Programms in der URL angegeben werden muss. Damit die Nutzer die neue Version aufrufen können, müssen Sie eine neue URL verteilen. Natürlich gibt es dafür einige Wege.

Ich möchte Ihnen hier eine Variante vorstellen, wie Sie dies elegant mit dem Wartungsmodus einer APEX APP durch Umleitung auf die neue Version der Anwendung erledigen können.

Redirect mittels Wartungsmodus

Legen Sie im ersten Schritt die neue Version der Anwendung in Ihrer Produktivumgebungen an. Es ist egal, ob Sie eine neue Version aus Ihrem Entwicklungssystem per Export/Import transportieren oder eine Kopie der Vorgänger Version anlegen und diese weiter entwickeln.

Abbildung 01: Alte und neue Version einer APEX Anwendung

Der Ausgangspunkt für diesen Tipp ist eine produktive Anwendung und eine parallel installierte neue Version.

Im ersten Schritt ermitteln Sie die URL, mit der Sie das neue Programm aufrufen.

https://apex.oracle.com/pls/apex/f?p=<APP_ID>:LOGIN_DESKTOP::::::

Öffnen Sie nun die alte Anwendung im Application Builder und navigieren Sie zu den Anwendungseigenschaften. (Edit Application Properties)

Abbildung 02: Edit Application Properties

Dort finden Sie im Bereich “Availability” die Select-Liste Status. Dort können Sie eine APEX-Anwendung z.B. in den Wartungsmodus versetzen oder die Nutzung komplett unterbinden. 

Selektieren Sie die Option “Unavailiable (Redirect to URL)”. Im Feld “Message for unavailable application” tragen Sie die URL der neuen Anwendung ein.

Abbildung 03: Unavailable (Redirect to URL)

Jetzt wird beim Aufruf der alten Anwendung ein Redirect auf die neue Version durchgeführt.

Oracle APEX 18.2 Tutorial Teil 4 – Page Designer

Im 4 Teil des deutschsprachigen Oracle APEX Einsteiger Tutorial geht es um die Erstellung von Seiten mit dem Page Designer.

Der Page Designer ist das zentrale Werkzeug mit dem in APEX Seiten erzeugt und bearbeitet werden. Gerade bei diesem Tool wird der zentrale Ansatz der Low Code Entwicklung von APEX sichtbar. APEX nutzt in vielen Fällen die Metadaten aus der Datenbank, um daraus Elemente einer Seite zu erzeugen. Die Elemente eines APEX Seite werden über deren Eigenschaften definiert. Deshalb entwickeln Sie Anwendungen mit APEX deutlich schneller als mit herkömmlichen Programmieransätzen.

Öffnen des Page Designers

Es stehen Ihnen verschiedene Möglichkeiten zur Verfügung, den Page Designer zu starten.

Im Letzten Teil des Tutorials habe ich Ihnen den Zugang über die Developer Toolbar gezeigt.

Sie können aber auch einfach über den Application Builder eine Anwendung auswählen. Anschließend werden Ihnen alle Seiten der Anwendung aufgelistet.

Abbildung 22: Application Builder

Von dieser Seitenübersicht können Sie vorhandene Seiten einfach durch anklicken des jeweiligen Links auswählen und im Page Designer öffnen.

Abbildung 23: Page Designer

Neue Seiten mit dem Page Designer erstellen

Ausgehend von der Seitenübersicht (Abbildung 22) können Sie Ihrer Anwendung eine neue Seite über den Button “Create Page >” hinzufügen.

Befinden Sie sich bereits im Page Designer so finden Sie den Einstieg in den Seitenerstellungsassistenten in der Toolbar hinter dem +.

Abbildung 24: Create Page

Im ersten Dialog geben Sie an, welche Art von Seite sie erstellen möchten. Wählen Sie für dieses Beispiel die Seitenart “Form”.

Abbildung 25: Report with Form on Table

Auch bei den Forms gibt es wieder verschiedene Seitenarten. Eine häufig genutzte und wie ich finde vielseitig einsetzbare Variante Daten einer Tabelle zu bearbeiten, besteht aus einer tabellarischen Übersicht des Tabelleninhaltes. Von so einer Übersichtsseite aus können Sie einen Datensatz in einer zweiten Seite für die Bearbeitung öffnen.

Um soche Seiten von APEX erzeugen zu lassen nutzen Sie an dieser Stelle des Wizzards den Eintrag “Report with Form on Table”.

Klicken Sie auf Next >.

Abbildung 26: Definition des Interactive Reports

Nun geht es an die Definition der Report Page. In diesem Beispiel nutzen Sie den sogenannten Interactive Reports. Hinter einem Interactive Report verbirgt sich eine tabellarische Darstellung des Inhaltes einer (oder mehrerer) Datenbanktabelle.

Wählen Sie noch die Titel der Report Page und der Form Page fest. Mit Next > geht es weiter.

Abbildung 27: Navigation Menu

Beim erstellen der Anwendung im Teil 3 des Tutorials, haben Sie bereits sehne können , dass Ihre Anwendung ein Seiten-Menü besitzt. Um diesem Menü einen Link hinzuzufügen, über den die Übersichtsseite die Sie gerade erzeugen, aufzurufen geht es bei dieser Seite des Page-Wizzards.

Lassen Sie APEX einen neuen Menüeintrag über die Option “Create a new navigation menu entry” für Sie erzeugen. Jetzt benennen Sie diesen Menüpunkt noch und klicken Sie dann auf Next >.

Abbildung 28: Select a table

Als Basis für den Inhalt des Interactive Reports und der Form Page geht es im Schritt 5. An dieser Stelle selektieren Sie die Datenbanktabelle CO_COOKING_RECIPE. Jetzt werden Ihnen die Spalten der Tabelle im linken Auswahlfeld des Shuttle-Items aufgelistet. Meine Empfehlung ist es hier nach Möglichkeit alle Spalten zu übernehmen. Es ist später weniger aufwändig, überflüssige Spalten auszublenden bzw. zu entfernen als Neue einzufügen.

Mit Next> geht es zum nächsten Schritt.

Abbildung 29: Primary Key

APEX bietet Ihnen verschiedene Möglichkeiten die einzelnen Zeilen in der Datenbanktabelle anzusprechen. Ich habe gute Erfahrungen damit gemacht einen künstlichen Schlüssel, der über eine Datenbank-Sequence erzeugt wird, zu verwenden.Um so einen surrogate key zu nutzen, wählen Sie die Option “Select Primary Key Coulmn(s)” und dann im Feld “Primary Key Column 1” den Eintrag ID.

Den Inhalt der ID Spalte wird über den bereits angelegten Trigger in der Datenbank erzeugt.

Jetzt haben Sie es geschafft. Klicken Sie auf Create so erzeugt APEX zwei Seiten für Ihre Anwendung, die es in sich haben.

Abbildung 30: Report Form und Edit Form

Report- und Edit Form

Starten Sie jetzt einfach mal Ihre Anwendung über Run Application.

Über den Menüpunkt Cooking recipe können Sie die Report Form öffnen. Da die Datenbanktabelle noch keine Einträge enthält sieht die Seite noch etwas spartanisch aus.

Abbildung 31: Interactive Report Form

Legen Sie über den Create Button einen neuen Eintrag an. Dafür öffnet sich die zweite Seite – die Edit Form.

Abbildung 32: Edit Form

Der Page Wizzard hat diese Seite so erzeugt, dass Sie neue Datensätze erstellen, vorhandene bearbeiten oder löschen können. Die Seite ist von Haus aus responsiv und lässt sich auf einem Rechner genauso gut nutzen wie auf einem Smartphone oder Tablet.

Die Seite ist auch für den Mehrbenutzerbetrieb geeignet. Versuchen zwei User annähernd gleichzeitig den selben Datensatz zu editieren, wird dem zu letzt speichernden Anwender eine entsprechende Fehlermeldung ausgeben.

Tragen Sie doch zum Test einmal ein erstes “Rezept” in die Anwendung ein. APEX öffnet für die Datumsfelder einen Kalender-Picker. Die Memo (Clobs) Felder wurden als mehrzeilige Items erzeugt. Hier spielt APEX einfach seine Stärken aus. Durch die Nutzung der Metadaten aus der der Datenbank, werden bereits bei der Erzeugung von Elementen (Items, Regions,…) sinnvolle Typen gewählt.

Auch not null constraints finden Sie in Form von Eingangevalidierungen in der Seite wieder.

Speichern Sie die Daten, so gelangen Sie wieder in die Report Form.

Abbildung 33: Report Form

Diese Tabelle wirkt auf den ersten Blick etwas unscheinbar. Aber glauben Sie mir, ein Interactive Report bietet dem Anwender eine unglaubliche Zahl an Möglichkeiten.

Sie können Excel gleich auf die Spalten klicken und erhalten einen Autofilter. Die Suchleiste bietet Ihnen eine spaltenübergreifende Suche über die ganze Tabelle. Sie können Sortieren, nach Spalten gruppieren. Die guppierten Daten aggregieren.

Der Interactive Report bietet Ihnen neben der Pivotieriung der Daten auch die Möglichkeit sich diese als Chart anzeigen zu lassen. Über die Downloadfunktion können Sie die Daten “mitnehmen”. Oder lassen Sie sich die Daten per Mail zuschicken. Das geht übrigens auch mittels Subscription zeitgesteuert.

Oft genutze (Filter)einstellungen können Sie Speichern.

Um alle Möglichkeiten genau zu beschreiben, bedarf es einiger Seiten mehr. Die meisten Funktionen sind aber selbsterklärend.

Beitragsreihe

[catlist name=”Apex 18.2 Tutorial”]