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.

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 3 – Application Builder

Anwendungen erstellen Sie in APEX mit dem Application Builder. Hierzu mehr im 3. Teil des deutschsprachigem APEX Einsteiger Tutorials.

Application Builder

Der Application Builder ist das Tool in APEX, mit dem Sie Anwendungen erstellen, bearbeiten und verwalten.

Abbildung 14: Application Builder
Abbildung 14: Application Builder

Öffnen Sie den App Builder über die gleich benannte Schaltfläche oder über den zugehörigen Menüpunkt, so erhalten Sie eine tabellarische Übersicht aller Anwendungen Ihres Workspaces. Diese werden in einem Interactive Report dargestellt. Dieses bietet Ihnen mannigfaltige Möglichkeiten, die Anwendungen zu filtern, gruppieren, sortieren, usw.

Abbildung 15: Anwendungsübersicht im Application Builder
Abbildung 15: Anwendungsübersicht im Application Builder

Anwendung erstellen

Neue Anwendundungen legen Sie über einen Wizzard an, den Sie über den Create Button – siehe Abbildung 15 – starten.

Im ersten Schritt werden Sie gefragt, welche Art von Anwendung Sie erstellen wollen. Wählen Sie New Application.

Abbildung 16: Create an Application
Abbildung 16: Create an Application

In der nächsten Seite (Abbildung 16) können Sie neben dem Namen der Anwendung auch diverse Eigenschaften festlegen.

Über den Button in der Select-List Appearance können Sie in einem Details-Dialog das Aussehen Ihrer Anwendung festlegen.

Abbildung 17: Appearance
Abbildung 17: Appearance

Wählen Sie neben einem Themen, ein Icon für diese Anwendung und im Navigation-Bereich Side Menü. Speichern Sie die Eingaben.

Sie gelangen wieder zurück zur Hauptseite des Application Wizzards. Wie Sie in Abbildung 16 sehen, wurde bereits eine Home Seite der Anwendung hinzugefügt. Auf das Anlegen weiterer Seiten verzichten ich an dieser Stelle. Auch zusätzliche Features sind für dieses Tutorial nicht von Belang.

Klicken Sie auf Create Application.

Der Wizzard legt nun die Web-Anwendung an und öffnet diese im Application Builder.

Abbildung 18: Cooking with APEX
Abbildung 18: Cooking with APEX

Anwendung ausführen

Starten Sie die Applikation Cooking with APEX durch anklicken des Buttons Run Application.

Es öffnet sich nun in einem neuen Registers Ihres Browsers die App.

Abbildung 19: Sign In
Abbildung 19: Sign In

Anmelden können Sie sich mit Ihrem APEX-Account. Auf Ihrem Rechner wird dabei ein Cookie mit der SessionId erzeugt.

Die Anwendung startet mit der Home -Seite.

Abbildung 20: Cooking with APEX
Abbildung 20: Cooking with APEX

Im Kopfbereich finden Sie links neben dem Anwendungstitels einen Burger-Button über den Sie das Seiten Menü verkleinern können.

Diese Minimaldarstellung des Menüs erhalten Sie auch wenn Sie die Anwendung z.B. auf einem Smartphone öffnen. APEX-Anwendungen, die auf dem aktuellen Universal Theme beruhen, sind von Haus aus responsive. Sie passen Ihr Aussehen also der Device -Größe an.

Da Sie die Anwendung aus der APEX-Entwicklungsumgebung heraus aufgerufen haben, wird Ihnen im Fußbereich der Anwendung die sogenannte Developer Toolbar angezeigt. Diese bietet verschiedene Werkzeuge, die Sie bei der Anwendungsentwicklung unterstützen werden.

Klicken Sie dort bitte einmal auf den Button Edit Page 1. Es öffnet Sie in dem ursprünglichen Register Ihres Browsers indem Sie die APEX-Anwendung geöffnet hatten, der Page Designer.

Abbildung 21: APEX Page Designer
Abildung 21: APEX Page Designer

Dieser zeigt nun alle Bestandteile der eben geöffneten Seite 1 (Home). Hier definieren Sie den Inhalt der Seiten und legen das Verhalten Ihrer Anwendung fest.

Die Seite selbst, können Sie direkt über das Run-Icon der Toolbar – siehe Abbildung 21 – laden. Auf diese Weise können Sie sehr intuitiv zwischen Ihrer Anwendung und der Entwicklungsumgebung hin und her wechseln.

Beitragsreihe

Im Teil 4 wird es um das Erstellen  von Seiten mit dem Page Designer gehen.

[catlist name=”Apex 18.2 Tutorial”]

 

 

Oracle APEX 18.2 Tutorial Teil 2 – SQL Commands

Im zweiten Teil des Einführungstutorials geht es um die Ausführung von DDL Anweisungen über das Modul SQL Commander. 

In diesem Teil des Tutorials soll der Rest des Datenmodells angelegt werden. Hierzu kommt zu Anschauungszwecken das Werkzeug SQL Commands zum Einsatz.

SQL Commands

Im ersten Teil der Beitragsreihe ging es darum eine Tabelle mit dem Objects Browser zu erzeugen. APEX bietet unter dem SQL-Workshop neben diesem Tool mit dem SQL Commands ein weiteres Werkzeug mit dem Sie direkt mit der Datenbank interagieren können.

Abbildung 9: SQL Commands
Abbildung 9: SQL Workshop – SQL Commands

Über das Tool SQL Commands ist es möglich einfach Freihand SQL Befehle und SQL-Scripte auszuführen.

Abbildung 10: SQL Commands
Abbildung 10: SQL Commands

Im oberen Textfeld können Sie SQL bzw. PL/SQL Befehle eingeben. Über den Button Run führen Sie diese aus.

Mit Find Tables können Sie sich die Tabellen Ihres Workspaces anzeigen lassen. Klicken Sie in der Übersicht von “Find Tables” auf den Tabellennamen wird Ihnen die Struktur der Tabelle präsentiert.

Abbildung 11: Find Tables
Abbildung 11: Find Tables

Die Skripte, die Sie mit SQL Commands erstellt haben, lassen sich in APEX über die Schaltfläche Save speichern. Laden können Sie diese dann über den Tab Saved SQL.

Tabellen und Trigger anlegen

Das folgende SQL-Skript (Listing 1) erzeugt für die noch fehlenden Tabellen ingredients, processing_steps und product_classification. Zu jeder Tabelle wird je ein Trigger angelegt, über den ein künstlicher Schlüssel als Primärschlüssel erzeugt wird.

Das Skript habe ich mit einem weiteren APEX-Tool namens Quick SQL erzeugt. Anschließend habe ich noch einige kleine manuellen Anpassungen vorgenommen. Wenn Sie sich näher mit der schnellen Erzeugung von Datenmodellen beschäftigen möchten, werden Sie doch einfach mal einen (lohnenswerten) Blick auf den Beitrag Oracle Apex – Quick SQL.

-- create tables
create table co_processing_step (
  id number not null constraint co_processing_step_id_pk primary key,
  name varchar2(255),
  description varchar2(4000),
  media_name varchar2(255),
  media_object blob,
  media_filename varchar2(255),
  media_mime_type varchar2(48),
  media_size number,
  media_content_type varchar2(4000),
  order_number number,
  created date not null,
  created_by varchar2(255) not null,
  updated date not null,
  updated_by varchar2(255) not null
)
;

create table co_ingredients (
  id number not null constraint co_ingredients_id_pk primary key,
  processing_step_id number
  constraint co_ingredient_processing_st_fk
  references co_processing_step on delete cascade,
  name varchar2(255),
  quantity number,
  quantity_unit varchar2(10),
  calories number,
  product_classification_id number,
  created date not null,
  created_by varchar2(255) not null,
  updated date not null,
  updated_by varchar2(255) not null
)
;

create table co_product_classification (
  id number not null constraint co_product_classif_id_pk primary key,
  name varchar2(255),
  description varchar2(4000),
  created date not null,
  created_by varchar2(255) not null,
  updated date not null,
  updated_by varchar2(255) not null
)
;

CREATE SEQUENCE co_processing_step_seq ORDER;

CREATE SEQUENCE co_ingredients_seq ORDER;

CREATE SEQUENCE product_classification_seq ORDER;

-- triggers
create or replace trigger co_processing_step_biu
   before insert or update
   on co_processing_step
   for each row
 begin
   if :new.id is null then
      select co_processing_step_seq.nextval into :new.id from dual;
   end if;
   if inserting then
     :new.created := sysdate;
     :new.created_by := nvl(sys_context('APEX$SESSION','APP_USER'),user);
   end if;
   :new.updated := sysdate;
   :new.updated_by := nvl(sys_context('APEX$SESSION','APP_USER'),user);
end co_processing_step_biu;
/

create or replace trigger co_ingredients_biu
   before insert or update
   on co_ingredients
   for each row
  begin
      if :new.id is null then
         select co_ingredients_seq.nextval into :new.id from dual;
      end if;
      if inserting then
        :new.created := sysdate;
        :new.created_by := nvl(sys_context('APEX$SESSION','APP_USER'),user);
      end if;
      :new.updated := sysdate;
      :new.updated_by := nvl(sys_context('APEX$SESSION','APP_USER'),user);
end co_ingredients_biu;
/

create or replace trigger co_product_classification_biu
   before insert or update
   on co_product_classification
   for each row
  begin
    if :new.id is null then
        select product_classification_seq.nextval into :new.id from dual;
    end if;
    if inserting then
      :new.created := sysdate;
      :new.created_by := nvl(sys_context('APEX$SESSION','APP_USER'),user);
    end if;
    :new.updated := sysdate;
    :new.updated_by := nvl(sys_context('APEX$SESSION','APP_USER'),user);
end co_product_classification_biu;
/

-- indexes
create index co_ingredients_i1 on co_ingredients (processing_step_id);
create index co_product_classification_i1 on co_product_classification (ingredient_id);

Listing 1: Create ingredients , processing_steps, …

Kopieren Sie den Inhalt des Skriptes in den Eingabebereich des SQL Commands und klicken Sie dann auf Run.

Abbildung 12: Skript ausführen
Abbildung 12: Skript ausführen

Sie bekommen anschließend eine Zusammenfassung und mögliche Fehlermeldungen angezeigt.

Select-Statements ausführen

Über das Tool SQL Commands lassen sich aber auch Select-Anweisungen entwickeln und ausführen.

Um zu prüfen, welche Tabellen in Ihrem Schema vorhanden sind, können Sie beispielsweise dieses Select-Staement bemühen.


select *
  from user_tables
 where table_name like 'CO%'

Führen Sie es einfach in SQL Commands aus. Das Ergebnis wird Ihnen als Tabelle angezeigt.

Abbildung 13: Select Statement in SQL Commands
Abbildung 13: Select Statement in SQL Commands

Beitragsreihe

[catlist name=”Apex 18.2 Tutorial”]

Oracle APEX 18.2 Tutorial Teil 1 – SQL Workshop

Deutschsprachiges Einsteiger Tutorial für Oracle APEX 18.2. Tabellen mit dem SQL Workshop erstellen.

In dieser Beitragsreihe möchte ich Ihnen anhand einer einfachen Anwendung zur Verwaltung von Kochrezepten eine Einführung in die Anwendungsentwicklung mit der Low-Code Entwicklungsumgebung Oracle Application Express bieten. Um dieses Tutorial nachstellen zu können, benötigen Sie eine lauffähige Apex Installation. Wie Sie APEX einrichten habe ich in dem Beitrag Installation Oracle Apex dieses Blogs beschrieben. Alternativ können Sie sich unter https://apex.orale.com einen Testzugang anlegen und die von Oracle in der Cloud betriebenen APEX-Plattform zu Bildungszwecken nutzen.

Aufgabenstellung

Als Beispiel soll eine einfache Anwendung erstellt werden, mit der Kochrezepte verwaltet werden können. Ein Rezept kann dabei mehrere Zutaten besitzen. Die Verarbeitung der Zutaten soll in einfachen Arbeitsschritten dargestellt werden.

Datenmodell

  • Kochrezepte (cooking_recipe)
    • name
    • description
    • number_of_persons
  • Zutaten (ingredients)
    • name
    • quantity
    • unit
    • product_classification ( bio, vegetarian, vegan, …)
    • calories
  • processing_step
    • name
    • description
    • Pictures/Videos
    • product_id
    • order_number

APEX-Anwendung

Haben Sie sich für eine eigene APEX Installation entschieden, müssen Sie als Erstes als Instanzadministrator einen sogenannten WORKSPACE und eine  Workspace-Developer anlegen. (siehe dazu auch Installation Oracle Apex )

Bei der Nutzung des Server von Oracle apex.oracle.com erfolgt dieser Schritt im Rahmen der Erstanmeldung.

Je nach Variante gibt es verschiedene URLs über die Sie die APEX-Entwicklungsumgebung starten. Sie sollten bei allen Varianten zu der in Abbildung 1 dargestellten Login-Seite gelangen.

Abbildung 1: Anmeldung als APEX-Developer
Abbildung 1: Anmeldung als APEX-Developer

Hier melden Sie sich an Ihrem WORKSPACE an.

Anschließend gelangen Sie zur Startseite der APEX-Entwicklungsumgebung.

Abbildung 2: APEX-Entwicklungsumgebung
Abbildung 2: APEX-Entwicklungsumgebung

Dort können Sie die einzelnen Module von APEX starten. Für den Anfang sind für Sie der APPLICATION BUILDER und der SQL-WORKSHOP von Bedeutung.

Über den SQL-WORKSHOP können Sie mit Hilfe verschiedener Werkzeuge in Ihrem Datenbankschema Objekte wie z.B. Tabellen, Views,… und Daten bearbeiten.

Mit dem APPLICATION BUILDER erstellen Sie die APEX-Anwendungen.

Bei der Entwicklung einer APEX Anwendung werden Sie durch unterschiedliche Wizzards unterstützt. Alle diese Assistenten nutzen massiv die Metadaten Ihrer Oracle Datenbank. Die Metadaten der Datenbankobjekte fungieren quasi als Modell ( im Sinne eines MDA-Ansatzes ) für die Erstellung der Anwendung. Aus diesem Grund, ist es ratsam immer zuerst die zugrunde liegenden Datenbankobjekte anzulegen.

SQL-Workshop

Der SQL-Worshop bietet diverse Werkzeuge zum Bearbeiten von Datenbankobjekten.

Abbildung 3: SQL-WORSHOP
Abbildung 3: SQL-WORKSHOP

Der OBJECT BROWSER zeigt Ihnen alle Datenbankobjekte der Schematas, die dem Apex Workspace zugeordnet sind. Diese können mit diesem Tool bearbeitet werden.

Mit dem Werkzeug SQL COMMANDS können Sie direkt SQL-Befehle ausführen.

Hinter dem Bereich SQL SCRIPTS verbirgt sich ein Verwaltungswerkzeug zum Speichern und Ausführen ganzer SQL Skripte.

Der UTILITIES-Bereich fasst nützliche Datenbankwerkzeuge zusammen.

Das sehr mächtige Modul RESTFUL SERVICES ermöglicht es Ihnen Restfull Web Services auf Basis von SQL und Pl/SQL Anweisungen zu definieren.

Tabelle mit dem OBJECT BROWSER erstellen

Wie bereits erwähnt, sollten Sie mit dem Datenmodell beginnen. Anhand der Tabelle cooking_recipe möchte ich Ihnen das Erstellen einer Tabelle mit dem OBJECT BROWSER zeigen.

Starten Sie als erstes den OBJECT BROWSER.

Abbildung 4: Object Browser
Abbildung 4: Object Browser

Auf der linken Seite können Sie mittels verschiedener Filter unterschiedliche Datenbankobjekte anzeigen lassen. Diese lassen sich selektieren und dann über entsprechende Eingabemöglichkeiten bearbeiten.

Um eine neue Tabelle anzulegen, klicken Sie im rechten Bereich auf + und dann auf Tabelle.

Abbildung 5: Tabelle definieren
Abbildung 5: Tabelle definieren

Legen Sie hier die Spalten der Tabelle fest.

Mit Next > geht es weiter.

Abbildung 6: Sequence und Trigger erzeugen
Abbildung 6: Sequence und Trigger erzeugen

Im nächsten Schritt des Wizzards können Sie definieren, wie der Primärschlüssel der Tabelle erzeugt werden soll. Wie Abbildung 6 zeigt, können Sie durch APEX eine Sequence anlegen lassen.

Klicken Sie auf Next > .

Im nächsten Schritt können Sie Foreign Key Constraints anlegen. In diesem Beispiel überspringen Sie den Punkt mit Next > .

Jetzt folgt eine Seite, über die Sie weitere Constraints für Ihre Tabelle ergänzen können. Auch darauf können Sie hier verzichten. Weiter mit Next > .

Abbildung 7: Create Table
Abbildung 7: Create Table

Abschließend bietet der Assistent Ihnen die Funktion sich das SQL Skript anzusehen.


CREATE table "CO_COOKING_RECIPE" (
   "ID" NUMBER,
   "NAME" VARCHAR2(50),
   "DESCRIPTION" VARCHAR2(2000),
   "NUMBER_OF_PERSONS" NUMBER,
   "CREATED_BY" VARCHAR2(50),
   "CREATED" DATE,
   "CHANGED_BY" VARCHAR2(50),
   "CHANGED" DATE,
  constraint "CO_COOKING_RECIPE_PK" primary key ("ID")
)
/

CREATE sequence "CO_COOKING_RECIPE_SEQ"
/

CREATE trigger "BI_CO_COOKING_RECIPE"
  before insert on "CO_COOKING_RECIPE"
  for each row
 begin
   if :NEW."ID" is null then
     select "CO_COOKING_RECIPE_SEQ".nextval into :NEW."ID" from sys.dual;
   end if;
end;
/

Lassen Sie die Tabelle über Create Table anlegen.

Abbildung 8: Tabelle im Objekt Browser
Abbildung 8: Tabelle im Object Browser

Sie landen nun wieder im Object Browser. Dort können Sie weitere Strukturanpassungen an der Tabelle vornehmen. Für dieses Beispiel ist das aber nicht notwendig.

Die anderen Tabellen werden in den folgenden Beiträgen angelegt, um andere Werkzeuge und Aspekte der Anwendungsentwicklung mit APEX zu verdeutlichen.

Beitragsreihe

[catlist name=”Apex 18.2 Tutorial”]