APEX Applikationen im Expressverfahren erstellen Denes Kubicek
Vorstellung Denes Kubicek Dipl. oec. Denes Kubicek, selbstständiger Unternehmensberater 5 Jahre Abteilungsleiter in Logistik, Auftragsbearbeitung, Einkauf 7 Jahre Erfahrung als Abteilungsleiter IT im internationalen Umfeld 12 Jahre Erfahrung mit Oracle seit 6 Jahren im Hauptfokus Selbstständig seit Mai 2007 mit dem Fokus auf APEX und Oracle Datenbanken Eigener Blog http://deneskubicek.blogspot.com Denes Kubicek Seite 1
Vorstellung Denes Kubicek Oracle APEX und XE in der Praxis Erschienen am 21.12.2009 Autoren: Denes Kubicek Jens Christian Pokolm Dietmar Aust Denes Kubicek Seite 2 APEX Applikationen im Expressverfahren erstellen
Vorstellung Denes Kubicek Expert Oracle Application Express Erschienen am 25.05.2011 Charity Projekt für Carl Backstrom und Scott Spadafore (verstorbene Mitglieder aus dem APEX Team) Autoren: Dietmar Aust Denes Kubicek Doug Gault Dimitri Gielis Roel Hartman Michael Hichwa Sharon Kennedy Denes Kubicek Seite 3
Vorstellung Denes Kubicek Oracle Apex Entwickler des Jahres 2008 Denes Kubicek Seite 4
Vorstellung Denes Kubicek Oracle ACE Director Denes Kubicek Seite 5
Vorstellung Denes Kubicek APEX Advisory Board Member https://apex.oracle.com/pls/apex/f?p=55447:1 Denes Kubicek Seite 6
Vorstellung Denes Kubicek APEX und Oracle PL/SQL Projekte Anbindung APEX ebusiness Suite 11g bei Synventive GmbH Interseroh AG und ALBA Angebotserfassungsysteme Siemens AG Interne Anwendungen T Systems SAP und Apex mehrere Projekte T Shop Interne Applikationen BASF Interne Applikationen Postbank mehrere Projekte Einige Kunden im Ausland (Australien, USA und Luxemburg) Interne Schulungen (Oracle und Apex) für viele Unternehmen Denes Kubicek Seite 7
Vorstellung Denes Kubicek Zu erreichen unter deneskubicek@yahoo.de training@opal consulting.de Denes Kubicek Seite 8
Agenda RAD Was kann APEX und was kann es nicht? APEX Komponenten Übersicht Web Browser ist alles, was man für APEX benötigt APEX Listener APEX und Excel Import APEX und Web Services APEX Plugins und Dynamic Actions APEX Entwickler Skills Denes Kubicek Seite 9
RAD Was kann APEX und was kann es nicht? APEX wird häufig als eine gute Alternative für Java ins Gespräch kommen Die Gründe dafür sind die Zeiten, die man für die Entwicklung benötigt Dadurch ist die Erwartungshaltung falsch es wird erwartet, dass APEX auf die gleiche Art und Weise entwicklelt und Deployed wird, wie Java Anwendungen Merge und SVN sind die populärsten Begriffe APEX Anwendungen können nicht gemerged werden Denes Kubicek Seite 10
RAD Was kann APEX und was kann es nicht? APEX ist kein Allheilmittel und kann nicht alles ersetzen APEX ist datenbankzentrisch und lebt in der Datenbank Die Vorteile davon sind: Sicherheit im Bezug auf die Daten und Entwicklungsergebnisse Die Möglichkeit alle Datenbankfeatures zu nutzen: Oracle Text Oracle Spatial Data Encryption VPD und viele andere Features Denes Kubicek Seite 11
RAD Was kann APEX und was kann es nicht? Bei der Entwicklung von APEX Anwendungen müssen folgende Punkte berücksichtigt werden: der Programmcode wird in Packages ausgelagert die Anwendung benutzt die Funktionen und Prozeduren kein Code wird direkt in die Anwendung geschrieben der Code ist formatiert und gut leesbar die einzelnen APEX Komponenten werden funktionsgerecht eingesetzt eine Dynamic Action wird z.b. das tun, worür sie gedacht wurde Denes Kubicek Seite 12
RAD Was kann APEX und was kann es nicht? Was kann APEX sehr gut? Alles, was in der HTML Welt entwickelt werden kann bzw. Sinn macht Diese Technologie entwickelt sich immer weiter und erschließt immer mehr Möglichkeiten durch: Bessere Browser und support für den HTML 5 Schnelleres Internet Neue Komponenten (jquery) Denes Kubicek Seite 13
RAD Was kann APEX und was kann es nicht? Performance ist kein Thema APEX ist immer so schnell, wie die darunterliegende Datenbank die Anzahl der Benutzer, die man mit einer Anwendung bedient spielt keine Rolle die Grösse einer Anwendung kennt keine Limits APEX hat sich weiterentwickelt und ist nicht mehr nur ein Ersatz für MS Access sondern viel mehr Denes Kubicek Seite 14
APEX Komponenten Übersicht Application Builder Database Applications Websheets Packaged Applications SQL Workshop Object Browser SQL Commands Viele Utilities Team Development Administration Denes Kubicek Seite 15
Web Browser ist alles, was man für APEX benötigt APEX Entwicklung benötigt nur einen guten Browser Firefox ist und bleibt die erste Wahl Chrome kann auch benutzt werden Internet Explorer muss zum Testen genutzt werden da noch viele Firmen IE einsetzen IE9/10 ist nicht für eine ernsthafte Entwicklung geeignet obwohl es etwas schneller ist als Firefox oder Chrome Denes Kubicek Seite 16
Web Browser ist alles, was man für APEX benötigt Firefox hat die grösste Anzahl an Extentions Webanwendungen benötigen entsprechende Tools, mit denen man diese testen und weiterentwickeln kann Die wichtigsten Extentions: Firebug Webdeveloper Toolbar Measureit Colorzilla Denes Kubicek Seite 17
Web Browser ist alles, was man für APEX benötigt Denes Kubicek Seite 18
APEX Listener http://docs.oracle.com/cd/e37099_01/doc/doc.20/e25066/in stall.htm#chdidhcd APEX Listener 2.0 hat kein Interface für die Verwaltung Es wird über die Komandozeile verwaltet oder über SQL Developer Kann nur mit der Datenbank 11g und höher verwendet werden Denes Kubicek Seite 19
APEX Listener Die Konfiguration kann entweder: als APEX Listener Standalone erfolgen oder in Kombination mit einem der folgenden Server: Oracle Weblogic Oracle Glasfish OC4J Container Denes Kubicek Seite 20
APEX Listener WICHTIG! Nach der Installation von APEX unbedingt @apex_rest_config.sql ausführen Denes Kubicek Seite 21
APEX Listener Schritt 1: Konfiguration von APEX Listener java jar apex.war configdir C:\apex_listener (Konfigurationslokation) Images unter C:\apex_listener\images kopieren, falls Standaloneoption gewählt wird. Ansonsten werden Images für einen der Webserver konfiguriert java jar apex.war standalone apex images C:\apex_listener\images (für Standalone Konfiguration) java jar apex.war (für die Konfiguration mit einem Webserver) Denes Kubicek Seite 22
APEX Listener Denes Kubicek Seite 23
APEX Listener Schritt 2: Parametereingabe Databaseserver Port SID APEX_PUBLIC_USER / Passwort APEX_REST_PUBLIC_USER / APEX_LISTENER User Passwort Konfiguration beenden oder Standalone ausführen Denes Kubicek Seite 24
APEX Listener Denes Kubicek Seite 25
APEX Listener Schritt 3: Konfiguration des Zugriffs über SQL Developer java jar apex.war user adminlistener "Listener Administrator" ADMINLISTENER Benutzerpasswort eingeben Authentifizierung über HTTPS ist default. Um diese auszuschalten muss die defaults.xml Datei unter dem Konfigurationspfad (C:\apex_listener) editiert und <entry key="security.verifyssl">false</entry> vor dem </properties> Tag eingefügt werden Denes Kubicek Seite 26
APEX Listener Denes Kubicek Seite 27
APEX Listener Denes Kubicek Seite 28
APEX Listener Denes Kubicek Seite 29
APEX Listener Schritt 4: Konfiguration von Glasfish http://docs.oracle.com/cd/e37099_01/doc/doc.20/e2506 6/install.htm#CHDIDHCD Denes Kubicek Seite 30
APEX und Excel Import APEX Listener kann Exceldateien lesen Auch Umlaute werden richtig verstanden Ein Setup ist relativ einfach Kein Speichern als CSV notwendig APEX kann mehrere Excel Blätter importieren und deuten Denes Kubicek Seite 31
APEX und Excel Import Ein File Browse Element auf der Seite erstellen Denes Kubicek Seite 32
APEX und Excel Import Ein Button mit der ID XLS2COLLECTION auf der Seite erstellen (die ID ist wichtig wird als REQUEST benutzt): Denes Kubicek Seite 33
APEX und Excel Import defaults.xml in dem Konfigurationsverzeichnis von APEX Listener anpassen und folgende vier Zeilen hinzufügen den Listener danach neu Starten: <entry key="apex.excel2collection">true</entry> <entry key="apex.excel2collection.onecollection">true</entry> <entry key="apex.excel2collection.name">excel_collection</entry> <entry key="apex.excel2collection.usesheetname">true</entry> Denes Kubicek Seite 34
APEX und Excel Import Einen Bericht auf der Seite erstellen mit der folgenden SQL: Denes Kubicek Seite 35
APEX und Excel Import DECLARE v_column VARCHAR2 (4000); v_sql VARCHAR2 (4000); v_length_0 NUMBER; v_length_1 NUMBER; v_length_2 NUMBER; BEGIN FOR c IN (SELECT c002 ':' c003 ':' c004 ':' c005 ':' c006 ':' c007 ':' c008 ':' c009 ':' c010 ':' c011 column_title FROM apex_collections WHERE collection_name = 'P2_UPLOAD' AND seq_id = 1) LOOP v_column := c.column_title; END LOOP; v_column := RTRIM (v_column, ':'); v_length_1 := LENGTH (v_column); v_length_2 := LENGTH (REPLACE (v_column, ':')); v_length_0 := (v_length_1 - v_length_2) + 1; v_sql := 'SELECT '; FOR d IN 1.. v_length_0 LOOP v_sql := v_sql 'c' LPAD (d + 1, 3, '0') ', '; END LOOP; v_sql := RTRIM (v_sql, ', '); v_sql := v_sql ' FROM apex_collections WHERE collection_name = ''P2_UPLOAD'' AND seq_id > 1 AND c004 IS NOT NULL'; RETURN v_sql; EXCEPTION WHEN OTHERS THEN RETURN 'SELECT ' 1 ' error FROM DUAL WHERE 1 = 2'; END; Denes Kubicek Seite 36
APEX und Excel Import Report Attributes > Headings Type > PL/SQL DECLARE v_column VARCHAR2 (4000); BEGIN FOR c IN (SELECT c002 ':' c003 ':' c004 ':' c005 ':' c006 ':' c007 ':' c008 ':' c009 ':' c010 ':' c011 column_title FROM apex_collections WHERE collection_name = 'P2_UPLOAD' AND seq_id = 1) LOOP v_column := c.column_title; END LOOP; v_column := RTRIM (v_column, ':'); RETURN v_column; EXCEPTION WHEN OTHERS THEN RETURN NULL; END; Denes Kubicek Seite 37
APEX und Excel Import Ein Excel Sheet erstellen und hochladen: Denes Kubicek Seite 38
APEX und Excel Import Nach dem Upload sieht der Bericht wie folgt aus: Denes Kubicek Seite 39
APEX Deployment Die empfolene Vorgehensweise, wenn die Entwicklung auf Test oder Produktion geht ist die skriptbasierte Installation durchzuführen Komandozeile Die Skripte umfassen sowohl DML als auch DDL und die Anwendungsskripte Denes Kubicek Seite 40
APEX Deployment Deployment Skript Denes Kubicek Seite 41
APEX Deployment Ihre DBA s müssen nicht wissen, wie man APEX installiert Installation erfolgt durch einen Benutzer SYS as SYSDBA Die Installation der übersetzten Anwendungen ist dadurch problemlos und es müssen keine Eingriffe nach der Installation erfolgen Das Testen der Installation kann jederzeit in einer Integrationsumgebung erfolgen Das verkürzt die Zeit, die für einen reibungslosen Übergang zwischen der Entwicklung, Test und Produktion Geeignet für die Umgebungen in denen die Anwendungen nicht einmal entwickelt und profuktiv gesetzt werden sondern dort, wo die Entwicklung fortlaufend ist Denes Kubicek Seite 42
APEX Deployment Deployment Skript readme.txt IMPORTANT: Prior to the installation set the NLS_LANG to GERMAN_GERMANY.AL32UTF8. This is different for C-Shell or K-Shell/Bash. On the OS level do the following: Bourne or Korn shell: NLS_LANG=GERMAN_GERMANY.AL32UTF8 export NLS_LANG C shell: setenv NLS_LANG GERMAN_GERMANY.AL32UTF8 Windows: set NLS_LANG=GERMAN_GERMANY.AL32UTF8 After that, you can proceed with the installation: 1. Start sqlplus and login as sys 2. run @install.sql 3. The installation will create a log file: apex_deployment_26c.log Denes Kubicek Seite 43
APEX Deployment Deployment Skript install.sql set define '&' spool install_apex_deployment_26c.log set verify off prompt prompt Run ccp_load_ddl.sql for the schema CCP_LOAD set define '&' ALTER SESSION SET CURRENT_SCHEMA = CCP_LOAD; @ccp_load_ddl.sql; set define '&' prompt prompt Run ccp_adm_ddl.sql for the schema CCP_ADM set define '&' ALTER SESSION SET CURRENT_SCHEMA = CCP_ADM; @ccp_adm_ddl.sql; Denes Kubicek Seite 44
APEX Deployment Deployment Skript install.sql set define '&' prompt prompt Switch User to SYS ALTER SESSION SET CURRENT_SCHEMA = SYS; set define '&' prompt prompt Install Application 900 @f900.sql CCP_OC; set define '&' prompt prompt Install Application 1901 @f1901.sql CCP_OC; set define '&' prompt prompt Recompile Schema @?/rdbms/admin/utlrp prompt prompt End of Installation spool off Denes Kubicek Seite 45
APEX Deployment Nachdem die DDL und DML Skripte fertig gestellt wurden, kann die Anwendung (primäre Anwendung und Übersetzte Versionen) exportiert werden Zwei Änderungen an der Exportdate müssen durchgeführt werden Denes Kubicek Seite 46
APEX Deployment APEX Installationsskripte set define '&' prompt prompt Switch User to SYS ALTER SESSION SET CURRENT_SCHEMA = SYS; set define '&' prompt prompt Install Application 900 set define off set verify off set serveroutput on size 1000000 set feedback off WHENEVER SQLERROR EXIT SQL.SQLCODE ROLLBACK begin wwv_flow.g_import_in_progress := true; end; / @f900.sql CCP_OC; Denes Kubicek Seite 47
APEX Deployment APEX Installationsskripte begin -- Assumes you are running the script connected to SQL*Plus as the Oracle user APEX_040200 -- or as the owner (parsing schema) of the application. wwv_flow_api.set_security_group_id(p_security_group_id=>nvl(wwv_flow_application_install.get_work space_id,14513926354519974)); end; / declare v_sgi number; begin select TO_CHAR (HTMLDB_UTIL.find_security_group_id ('&1')) into v_sgi from dual; dbms_output.put_line(v_sgi); -- Assumes you are running the script connected to SQL*Plus as the Oracle user APEX_040200 -- or as the owner (parsing schema) of the application. wwv_flow_api.set_security_group_id(p_security_group_id => v_sgi); end; / set define off Denes Kubicek Seite 48
APEX Deployment install.log als Ergebniss der Installation Wenn keine Fehler, Installation erfolgreich und kann freigegeben werden Denes Kubicek Seite 49
APEX und Web Services Grants setzen: ALTER USER dkubicek GRANT CONNECT THROUGH apex_rest_public_user; Denes Kubicek Seite 50
APEX und Web Services ACL nicht vergessen: DECLARE acl_path VARCHAR2 (4000); acl_id RAW (16); BEGIN SELECT acl INTO acl_path FROM dba_network_acls WHERE HOST = '*' AND lower_port IS NULL AND upper_port IS NULL; SELECT sys_op_r2o (EXTRACTVALUE (p.res, '/Resource/XMLRef')) INTO acl_id FROM xdb.xdb$acl a, path_view p WHERE EXTRACTVALUE (p.res, '/Resource/XMLRef') = REF (a) AND EQUALS_PATH (p.res, acl_path) = 1; DBMS_XDBZ.validateacl (acl_id); IF dbms_network_acl_admin.check_privilege (acl_path, 'APEX_040200', 'connect') IS NULL THEN dbms_network_acl_admin.add_privilege (acl_path, 'APEX_040200', TRUE, 'connect'); END IF; EXCEPTION WHEN NO_DATA_FOUND THEN dbms_network_acl_admin.create_acl ('power_users.xml', 'ACL that lets power users to connect to everywhere', 'APEX_040200', TRUE, 'connect'); dbms_network_acl_admin.assign_acl ('power_users.xml', '*'); END; / COMMIT ; Denes Kubicek Seite 51
APEX und Web Services Webservices werden im SQL Workshop unter RESTfull Services konfiguriert Ein in APEX erstellter Webservice kann von allen Fremdsystemen benutzt werden, die RESTfull verstehen Alle APEX Anwendungen können diesen Webservice nutzen Denes Kubicek Seite 52
APEX und Web Services Webservice Definition Denes Kubicek Seite 53
APEX und Web Services Parameter Definition Denes Kubicek Seite 54
APEX und Web Services Innerhalb einer Anwendung, die den Webservice nutzt, wird dieser wie dargestellt definiert: Denes Kubicek Seite 55
APEX und Web Services Die Definition und die Funktionalitäten der Webservices in 4.2 wesentlich besser, einfacher und stabieler als in den früheren Versionen Denes Kubicek Seite 56
APEX und Web Services Die Einbindung auf einer Seite mit Hilfe von dem Wizard Form and Report on Web Service: Denes Kubicek Seite 57
APEX Plugins und Dynamic Actions Plugins (und Dynamic Actions) wurden mit der Version 4.0 von APEX vorgestellt Alles, was man früher aus Einzelteilen immer wieder bauen musste, wurde standardisiert Die meisten Plugins basieren auf jquery Sourcen kombiniert mit dem PL/SQL Code Das Ziel ist feste Standarde einzuführen und die Redundanz vom Code zu minimisieren Denes Kubicek Seite 58
APEX Plugins und Dynamic Actions Dynamic Actions wurden mit APEX 4.0 eingeführt Deklarative Definition der Prozesse auf der Client Seite Definition der Dynamic Actions per Wizard Wann? Aktion? Betroffene Elemente? Viele Möglichkeiten Eingebaute Actions (Show / Hide, Add / Remove Class, Enable / Disable, Set Value, Execute JavaScript Code, Execute PL/SQL Code and more) Plug in Actions (7 Oracle / 100+ nicht Oracle, und viele die dazu kommen) Denes Kubicek Seite 59
APEX Plugins und Dynamic Actions Wir haben plötzlich jede Menge an Plugins, die wir in unserer Anwendung benutzen können Eine zentrale Seite für die Plugins: http://www.apex plugin.com/ Viele Anbieter: http://www.enkitec.com/products/plugins http://skillbuilders.com/oracle APEX/APEX Consulting Training.cfm?category=apex plug ins&tab=free plugindownloads Denes Kubicek Seite 60
APEX Plugins und Dynamic Actions Denes Kubicek Seite 61
APEX Plugins und Dynamic Actions Denes Kubicek Seite 62
APEX Plugins und Dynamic Actions Plugins können in mehrere Gruppen geteilt werden: Item Plugins Region Plugins Dynamic Action Plugins Process Plugins Authentication und Authorization Plugins Denes Kubicek Seite 63
APEX Plugins und Dynamic Actions Gute Plugins, die sich auf jeden Fall lohnen: http://www.enkitec.com/products/plugins/clob load http://skillbuilders.com/oracle APEX/APEX Consulting Training.cfm?category=apex plug ins&tab=free plugindownloads Denes Kubicek Seite 64
APEX Entwickler Skills PL/SQL an der ersten Stelle Javascript und jquery HTML und CSS APEX und Oracle entwickeln sich ständig ein guter Entwickler muss in der Lage sein Schritt zu halten Denes Kubicek Seite 65
APEX Entwickler Skills Beteiligung in den APEX Foren und generell in der APEX und Oracle Community Weiterbildung durch regelmässige Trainings bezüglich Best Practices New Features Denes Kubicek Seite 66
Fragen? Denes Kubicek Seite 67