Codegenerator für APEX Collections und Tabular Forms

Ähnliche Dokumente
PL/SQL-Code mit APEX generieren

SQL. Datenmanipulation. Datenmanipulationssprache. Ein neues Tupel hinzufügen. Das INSERT Statement

ApEx effektiv. Lösungen für Standardanforderungen. Stephan Engel OPITZ CONSULTING Bad Homburg GmbH. Nürnberg,

Erzeugung und Veränderung von Tabellen

APEX 5. Mit 6 Klicks kostenfrei zur APEX Webapplikation. Robotron Datenbank-Software GmbH Schulungszentrum Heilbronner Straße Dresden

Datenbanken Labor, MI : Übung 1 SQL - Abfragen Patrick Lipinski

Oracle 10g Einführung

Jedes Byte zählt. Tuning-Rezepte für APEX-Anwendungen in der Cloud. Andreas Wismann WHEN OTHERS

12. Datenschutz: Zugriffsrechte in SQL Datenschutz: Zugriffsrechte in SQL

Gregor Kuhlmann Friedrich Müllmerstadt. MySQL. Der Schlüssel zu Datenbanken-Design und -Programmierung. c 3 E. i- O Rowohlt Taschenbuch Verlag

Warum wird mein Index nicht benutzt?

Die Datenmanipulationssprache SQL

Folien php/mysql Kurs der Informatikdienste

Datenschutz: Zugriffsrechte in SQL

Übung PL/SQL Trigger Lösungen

Datenbanken SQL. Insert, Update, Delete, Drop. Krebs

Buchführung und Zeiterfassung mit APEX mobil erledigen

Prakt. Datenbankprogrammierung. Sommersemester Was sind Constraints? I,11: Verwendung von Constraints. Festlegung von Constraints

Erzeugen von Constraints

Zusammengesetzte Datentypen

Die APEX APIs Schatzkiste. November 2015 DOAG 2015 Ulrike Brenner

Datenbanken SQL Einführung Datenbank in MySQL einrichten mit PhpMyAdmin

<Insert Picture Here> Security-Basics. Privilegien, Rollen, SQL und PL/SQL - inkl. 12c-Update. Carsten Czarski, ORACLE Deutschland B.V. Co.

Fehlertoleranz und Robustheit von ETL-Prozessen Wie gestalten wir Abläufe möglichst widerstandsfähig. Christian Borghardt I BI Consultant

Datenbank und Tabelle mit SQL erstellen

Arbeit mit zusammengesetzten Datentypen

Berechnung von Kennzahlen mit der SQL Model Clause

Folien php/mysql Kurs der Informatikdienste

Neuerungen in Marco Patzwahl MuniQSoft GmbH Unterhaching

Foreign Keys. MySQL 4, 5. Kapitel 16: Fremdschlüssel. Marcel Noe

Application Express Wo ist der Fehler? Debugging im APEX. Copyright Apps Associates LLC. 1

Funktionen. Überblick über Stored Functions. Syntax zum Schreiben einer Funktion. Schreiben einer Funktion

Fortgeschrittene SQL-Techniken für APEX-Formulare und Reports

Üben von DDL und DML. Ergebnis:

APEX Datenverwaltung Wo sind die Daten gerade?

Themen des Kapitels. 2 Grundlagen von PL/SQL. PL/SQL Blöcke Kommentare Bezeichner Variablen Operatoren. 2.1 Übersicht. Grundelemente von PL/SQL.

select DISTINCT Name, ort From Verkauf; selektiert Name und Ort von Tabelle Verkauf - DISTINCT steht dass keine Zeile mehrfach vorkommt

Funktion definieren Gibt Summe der Gehälter zurück. Aufruf in einem SQL-Statement

Matrix Reports mit Apex

Trainingsmanagement Gutschein Management. Beschreibung

Aufbau und Bestandteile von Formularen. Oracle Forms. Erstellen eines neuen Blocks (1) Starten von Oracle Forms

Wie sichert man APEX-Anwendungen gegen schädliche Manipulationen und unerwünschte Zugriffe ab?

PHP und MySQL. Integration von MySQL in PHP. Zellescher Weg 12 Willers-Bau A109 Tel Michael Kluge (michael.kluge@tu-dresden.

AG-VIP App Erste Schritte

Übersicht der wichtigsten MySQL-Befehle

DATENBANKEN SQL UND SQLITE VON MELANIE SCHLIEBENER

Online Table Shrink. Freigabe von ungenutztem Speicherplatz. Autor: Ralf Durben, ORACLE Deutschland GmbH

MySQL-Befehle. In diesem Tutorial möchte ich eine kurze Übersicht der wichtigsten Befehle von MySQL geben.

Prakt. Datenbankprogrammierung. Sommersemester 2005

Dipl. Inf. Dipl. Math. Y. Orkunoglu Datum:

3.3. Implementierung in SQL DDL-Grundlagen Constraint-Verzögerung Implementierungs-Strategien

PHP- Umgang mit Datenbanken (1)

Implementierungsvarianten. mit Oracle Application Express

Moderne Anwendungen und relationale Datenbanken? Natürlich!

Fuzzy-Suche in Application Express

Übungsaufgaben mit Lösungen

Oracle Forms und APEX

Adventskalender. Best Practice. Schritt für Schritt Dokumentation. Wie Sie einen Adventskalender einrichten. Stand:

ACCESS. Berechnete Felder in Tabellen TABELLEN ENTWERFEN BERECHNETE FELDER IN TABELLEN BASICS

Geodaten und Karten in APEX

Neue Welten: Externe Daten mit APEX nutzen

APEX, MIDI und das LAUNCHPAD

Attributs-Wertverteilungen / Distribution of Distinct Values Seite 1 von 5

SQL (Structured Query Language) Schemata Datentypen

E-Commerce: IT-Werkzeuge. Web-Programmierung. Kapitel 6: Datenbankabfragen mit SQL und PHP. Stand: Übung WS 2014/2015

Report Builder 6.1 Einsteiger

Wolkig bis heiter. Andreas Wismann WHEN OTHERS. APEX als Drehkreuz für Web Service-Anwendungen

Eclipse und EclipseLink

Application Express (APEX) Carsten Czarski Business Unit Database. ORACLE Deutschland B.V. & Co KG

Variable. Interaktive Skripte

Datenbanksysteme 2013

Relationales Datenbanksystem Oracle

XML-Schnittstellen zum Import und Export von Daten für eine Oracle DB Ein Erfahrungsbericht DOAG 2006

Datenbanken mit OpenOffice.org 3 Base und HSQLDB

OpenOffice - Base G. Laner 1

Datenbanken mit OpenOffice.org 2.3 Base und HSQLDB

Release 2. Inside 11gR2: Neues für den Entwickler Carsten Czarski und Ulrike Schwinn

APEX New Features Carola Berzl

Dynamische XML-Verarbeitung

Folien php/mysql Kurs der Informatikdienste

SQL, PL/SQL, JavaScript, jquery,... Quellcode in APEX clever organisieren

Performance in der Oracle Datenbank von Anfang an

Die SQL-Schnittstelle

Visualisierung von Geodaten in APEX Interactive Grid und OpenLayers

Kapitel 8: Datenintegrität

Transkript:

Codegenerator für APEX Collections und Tabular Forms Andreas Wismann wismann@when-others.com WHEN OTHERS Beratung Programmierung Coaching

Agenda Andreas Wismann wismann@when-others.com Tabular Forms Features APEX Collection Features Welchen Code brauchen wir Wie wird der Code erzeugt Herausforderungen und Grenzen WHEN OTHERS Beratung Programmierung Coaching

Ausgangspunkt

Tabular Forms-Assistent

Tabular Form maximal 50 Spalten, ein Grid pro Seite

Direkter Zugriff auf die Tabelle!

nur Standardfunktionalität

möchte man "mehr", SELECT APEX_ITEM.HIDDEN(1, empno) APEX_ITEM.DISPLAY_AND_SAVE(2,ename) ename, APEX_ITEM.TEXT (3, salary) job, APEX_ITEM.DATE_POPUP2(4, hiredate) hiredate, APEX_ITEM.TEXT (5, sal) sal, APEX_ITEM.TEXT (6, comm) comm FROM emp

möchte man "mehr", BEGIN FOR i IN 1.. APEX_APPLICATION.G_F01.COUNT LOOP UPDATE emp SET ename = APEX_APPLICATION.G_F02(i),job = APEX_APPLICATION.G_F03(i),hiredate = to_date(apex_application.g_f04(i), 'dd-mon-yyyy'),sal = APEX_APPLICATION.G_F05(i),comm = APEX_APPLICATION.G_F06(i) WHERE empno = to_number(apex_application.g_f01(i)); END LOOP; END;

Zwischenstand Tabular Forms entweder überhaupt kein Code (Assistenten) oder gleich "die volle Breitseite" Zuordnung von Formularspalten (Nummern) zu Tabellenspalten (Namen), fehleranfällig Direktes Arbeiten auf der DB-Tabelle (INSERT, UPDATE, DELETE)

Was sind APEX Collections? zwei echte Datenbanktabellen unbegrenzte Menge Daten privat, der Benutzersession zugeordnet APEX übernimmt die Session-Verwaltung

Was sind APEX Collections? WWV_FLOW_COLLECTIONS$ WWV_FLOW_COLLECTION_MEMBERS$

API-Dokumentation

Ähnlichkeiten? Temporäre Tabellen Materialized Views funktionieren nicht mit APEX Sessions werden laufend gewechselt sind mächtiger als APEX Collections aber nicht privat

Persistenz Collection-Daten sind innerhalb der Session auf allen APEX-Seiten verfügbar.

Flexibilität Abkopplung von fachlichen Tabellen endgültiges Datenmodell muss nicht bekannt sein Fehlerhafte Eingaben können dem Benutzer später wiedervorgelegt werden

APEX Collections sind robust.

Collection anlegen Warenkorb-Prinzip Abfrage-Prinzip Die Collection ist zu Beginn leer Die Collection wird inital mit Daten aus Tabellen oder Views befüllt apex_collection. create_collection ( WARENKORB' ); apex_collection. create_collection_from_query ( MERKLISTE', select * from merkliste where ' );

create_collection_from_query select * from

create_collection_from_query where

Collection auflösen Warenkorb-Prinzip Abfrage-Prinzip Alle Datensätze prüfen in fachliche Tabellen einfügen apex_collection. delete_collection ( collection_name ) Datensätze prüfen INSERT, UPDATE oder DELETE

Hinzufügen eines Datensatzes apex_collection.add_member ( p_collection_name => 'WARENKORB',p_c001,p_c002,p_c003,p_c004,p_c005 -- usw. ); => :P100_C001 => :P100_C002 => :P100_C003 => :P100_C004 => :P100_C005

Aktualisieren eines Datensatzes apex_collection.update_member ( p_collection_name => 'WARENKORB',p_seq => :P100_SEQ_ID,p_c001,p_c002,p_c003,p_c004,p_c005 -- usw. ); => :P100_C001 => :P100_C002 => :P100_C003 => :P100_C004 => :P100_C005

Löschen eines Datensatzes apex_collection.delete_member ( p_collection_name => WARENKORB,p_seq => :P100_SEQ_ID );

Collection-Lifecycle (Beispiel 1) create_collection add_member add_member update_member insert into TABELLE select * from APEX_COLLECTIONS delete_collection

Collection-Lifecycle (Beispiel 2) create_collection_from_query [ Zeile hinzufügen ] add_member [ Speichern ] PL-SQL-Loop, truncate_collection

Tabular Form updaten for i in 1.. apex_application.g_f01.count loop apex_collection.update_member ( p_collection_name => 'WARENKORB,p_seq => apex_application.g_f01( i ),p_c001 => apex_application.g_f02( i ),p_c002 => apex_application.g_f03( i ),p_c003 => apex_application.g_f04( i ),p_c004 => apex_application.g_f05( i ),p_c005 => apex_application.g_f06( i ) ); end loop;

Zwischenstand: Collections Zuordnung Tabellenspalten zu Collection- Spalten, fehleranfällig Erzeugen einer Collection über APEX_COLLECTION -Aufruf Einfügen, Ändern, Löschen, Beenden über APEX_COLLECTION -Aufrufe

Nutzdaten C001 C002 C003 C048 C049 C050 N001 N005 D001 D005 BLOB001 CLOB001 XMLTYPE001

kombiniere Tabelle Collection APEX Fehlerquellen potenzieren sich Viel, viel (sehr viel) Code notwendig

Demo: Code-Generator verwenden

Code und Seite "verheiraten"

Code und Seite "verheiraten" Musterseite anlegen (einmalig) "Buttons"-Region ADD_ROW - Schaltfläche CREATE_COLLECTION (raise_application_error) STORE_MRU (raise_application_error) SAVE_MRU_TO_TABLE (raise_application_error) Musterseite kopieren COPY & PASTE aus dem APEX-Codegenerator Berichtsspalten auf "Standard Report Column" umstellen

Resultat

Validierung? eigenen PL/SQL-Code hinzufügen

Tabular Form Start Index A_Collection B_Collection C_Collection 1 50 apex_application.g_f01 apex_application.g_f50

Debugging privat bedeutet privat Collection-Inhalte (zunächst) nur in derselben Benutzersession sichtbar Auf Formularseiten einen einfachen Report über die Collection anzeigen: select * from tabellenname_cv;

Meta-Informationen C001 C002 C003 C048 C049 C050 N001 N005 D001 D005 BLOB001 CLOB001 XMLTYPE001 N001 N002 N003 N004 N005 neu - geändert sichtbar - unsichtbar Versionsnummer erfolgreich validiert - nicht validiert übergeordneter Datensatz (SEQ_ID)

Verkettete Liste C001 C002 C003 C048 C049 C050 N001 N005 D001 D005 BLOB001 CLOB001 XMLTYPE001 N001 N002 N003 N004 N005 Vorgänger Nachfolger

Historie C001 C002 C003 C048 C049 C050 N001 N005 D001 D005 BLOB001 CLOB001 XMLTYPE001 D001 D002 D003 D004 D005 erstellt am letzte Änderung am validiert am zuletzt gespeichert am gültig bis

Freie Auswahl C001 C002 C003 C048 C049 C050 N001 N005 D001 D005 BLOB001 CLOB001 XMLTYPE001 Direkte Vorversion des Datensatzes Änderungshistorie <aenderung user= Heinz" datum="2012-06-14 23:59:11"> <feld name="x" wert-alt="1" wert-neu= "2"/> <feld name="y" wert-alt="10" wert-neu= "20"/> </aenderung> Informationen für der Benutzer (Kommentare, ToDo, Links, Dokumentverweise ) HTML

Fallstricke Datensatz-Status (neu, geändert, gelöscht) Integrität (Pessimistic Locking)

Demo: Exception Handler Generator

Fazit? Beißen Sie sich durch die Dokumentation Bauen Sie nichts nach, das es bereits gibt Schreiben Sie Code-Generatoren

Lesetipp Expert Oracle Application Express (Verlag: Apress, Mai 2011) ausführlicher Teil zu Tabular Forms gute Einführung zu APEX-Collections Charts, Dynamic Actions, Plugins u.v.m.

Andreas Wismann wismann@when-others.com WHEN OTHERS Beratung Programmierung Coaching