Web Programmierung mit
CGI, ILE RPG und SQL
Andreas Prouza
Andreas.Prouza@tasklink.com
1
© Andreas Prouza 2011
Themen





2
CGI Technik
Installation Webserver
Aufruf von CGI (RPG) Programmen via
HTTP
Kommunikation Client mit RPG Programm
SQL Optimierung
© Andreas Prouza 2011
Abkürzungen

CGI


RPG


Report Program Generator
SQL

3
Common Gateway Interface
Structured Query Language
© Andreas Prouza 2011
CGI Technik
4
© Andreas Prouza 2011
Installation Webserver
/www/WebServer/conf/httpd.conf
 STRTCPSVR SERVER(*HTTP)
HTTPSVR(*ADMIN)
 http://192.168.0.10:2001/HTTPAdmin
 Mit QSECOFR oder gleichwertigen
User anmelden
 PDF Anleitung

5
© Andreas Prouza 2011
RPG Aufruf (httpd.conf)
http://192.168.0.10:95/pgms/dfmtest.pgm
 LIB: WFM40OBJ
 PGM: DFMTEST

6
© Andreas Prouza 2011
Kommunikation
Client  RPG

HTML-Buffer einlesen


HTML-Buffer ausgeben


QtmhWrStout
Umgebungs-Variable einlesen

7
QtmhRdStin
QtmhGetEnv
© Andreas Prouza 2011
QtmhRdStin
D*=====================================
D*?API StdIn
D*=====================================
DAPIStdIn
C
'QtmhRdStin'
DInData
S
4096A
INZ
DInDataln
S
9B 0 INZ(4096)
DInActLn
S
9B 0
8
© Andreas Prouza 2011
QtmhWrStout
D*======================================
D*?API StdOut
D*======================================
DAPIStdOut
C
'QtmhWrStout'
DOutBuff
S
4096A
INZ
DOutBuffln
S
9B 0 INZ(4096)
9
© Andreas Prouza 2011
Programm-Beispiel RPG
C*================================
C** ?Buffer
C*================================
C ' ' checkr OutBuff
in
C
CALLB
APIStdOut
C
PARM
OutBuff
C
PARM
in
OutBuffLn
C
PARM
QUSEC
10
© Andreas Prouza 2011
RPG Aufruf
11
© Andreas Prouza 2011
RPG Aufruf 2 (LOGIN)
12
© Andreas Prouza 2011
PGM-Aufruf via HTML
<form
action="/pgms/WFM30AX.PGM"
name="login"
method="POST">
13
© Andreas Prouza 2011
Programm-Beispiel RPG
C*================================
C** ?Buffer
C*================================
C
CALLB
APIStdIn
C
PARM
' '
INData
C
PARM
INDataLn
C
PARM
INActLn
C
PARM
QUSEC
14
© Andreas Prouza 2011
Webseite
15
© Andreas Prouza 2011
Datenstrom Client  PGM
&Feld=Wert
 Konvertierung von Zeichen
&
 %50
Blank  +


&P3TXT=Muster+%50+Maxi&P3DP=&DRPLG=G&P3
ML=Maxi.Muster@tqs.at&DRPSL=U
16
© Andreas Prouza 2011
HTML-Beispiele
Workflows
 Stammdaten
 Client/Server

Filter
 Firmenabgleich
 Dynamischer SQL Aufbau

17
© Andreas Prouza 2011
Index
Binary Radix Tree Index
 Logischer Baum
 Encoded Vector Index (EVI)
 Auch Bitmap Index genannt

18
© Andreas Prouza 2011
Binary Radix Tree Index
Seit 1988
 Verwendung

Auswahlkriterien
 Sortierung

Summe der DS < 70 % - 80 %
 Entscheidung vom Optimizer

19
© Andreas Prouza 2011
Binary Radix Tree Index
Root
Node
Node
A
W
Node
Node
Node
Node
Node
Al
Am
An
Wien
Wies
Leaf Node
Leaf Node
01 Wien
03 Wiener Neustadt
10 Wiesbaden
Node
Node
Leaf Node
Leaf Node
All
Alt
04 Amstetten
09 Ammersee
06 Ansfelden
07 Andorf
Leaf Node
Leaf Node
08 Allensteig
02 Altheim
05 Althofen
20
© Andreas Prouza 2011
Encoded Vector Index (EVI)
Seit 1998 (10 Jahre später)
 Verwendung

Gruppierung
 Zeilenauswahl
 Logische Operationen (AND, OR, …)

Summe der DS 20 % – 70 %
 Entscheidung vom Optimizer

21
© Andreas Prouza 2011
Encoded Vector Index (EVI)

System Tabelle
Unique-Key
 Statistiken


Binär
Code
1
17
38
25
1
9
13
5
7
32
Eindeutiger
Schlüssel
Allensteig
Amstetten
Altheim
Althofen
Andorf
Ansfelden
Ammersee
Wien
Wiener Neustadt
Wiesbaden
Vector
22
© Andreas Prouza 2011
Erster
Satz
Letzter
Satz
Anzahl
1
2
3
4
5
6
7
8
9
10
1
121
95
193
5
88
45
367
93
185
1
6
2
4
1
9
7
115
34
10
DB2 Engine

SQE (SQL Query Engine)


23
Eingeführt ab V5R2
CQE (Classic Query Engine)
© Andreas Prouza 2011
CQE
24
© Andreas Prouza 2011
SQE
25
© Andreas Prouza 2011
DDS vs. DDL

DDL Data Definition Language


26
CREATE TABLE
DDS Data Description Specifications
© Andreas Prouza 2011
DDS vs. DDL
DDS ist stabilisiert
Keine Neuheiten
 DDS ist potentielle Gefahr für SQE
 DDL bieten viele Möglichkeiten
(Index, MQTs, UDF, SP, …)

27
© Andreas Prouza 2011
Native I/O vs. SQL

Native I/O (z.B. in RPG)
READE
 WRITE
 DELETE
 UPDATE


SQL

28
SELECT * FROM TABLE
© Andreas Prouza 2011
Native I/O

Fixer Zugriffspfad
Dadurch kein Overhead wie bei SQL
 Direkter Datenzugriff

29
© Andreas Prouza 2011
SQL

Dynamischer Zugriffspfad

Immer der Optimale
Internationale Sprache
 Anpassungen sind einfacher
 Plattform unabhängiger Zugriff
 Monitoring

30
© Andreas Prouza 2011
SQL
Vielfalt an Funktionen (Order By)
 Mehrere Cursor für den gleichen
Zugriffsplan möglich
 Keine Abstürze von Programmen 
Error Handling
 SQL (und SQE) wird weiter entwickelt
 uvm.

31
© Andreas Prouza 2011
Index Advisor
Vorschläge vom System
 Mit statistische Informationen
 Art des Vorschlages (Binär, EVI)

32
© Andreas Prouza 2011
Materialized Query Table
Eine Tabelle ähnlich wie ein View
erstellt.
 Daten sind Physisch vorhanden
 Aktualisierung der Daten geschieht
manuell

33
© Andreas Prouza 2011
MQT

Vorteil
Schneller Zugriff durch Aufteilung
 Zusätzliche Indizes möglich


Nachteil
Speicherverbrauch
 Know-How

34
© Andreas Prouza 2011
Stored Procedure (SP)
SQL Prozedur
 Externe Prozedur

35
© Andreas Prouza 2011
User-Defined Function
Sourced UDF
 SQL UDF
 External UDF

36
© Andreas Prouza 2011
Tuning des Systems
Aktivierungsgruppen
 Indizes
 MQTs
 DDS LF mit Select/Omit Spezifikation
 SQL immer auf Basistabellen
 Select Into
 Dynamisches SQL wieder verwenden
 In Blöcke einlesen

37
© Andreas Prouza 2011
Error Handling
Whenever Statement
 Get Diagnostic Statement

38
© Andreas Prouza 2011
Workflow-System
http://tasklink.com/
TQS EDV-Software GesmbH
Tel.: +43 (2252) 508 708 - 17
Fax: +43 (2252) 508 708 - 13
andreas.prouza@tasklink.com
39
© Andreas Prouza 2011
DB2 und RPG Schulungen
http://www.erfolgsbildung.at/
DB2 Optimierung und Tuning
 ILE RPG
 Auf Anfrage mit 1 oder 2 Tage auch:
CGI mit RPG

40
© Andreas Prouza 2011
Danke!
Fragen?
Andreas Prouza
Andreas.Prouza@tasklink.com
41
© Andreas Prouza 2011