Netcos AG   XCP™ Blackboard
Tip 3   Tip 3 Tip 5  Tip 5
Tip No. 4   Eine Anwendung mit Auswahllisten in XCP erstellen
Mit dem Generator in iXSQL kann einfach und schnell mit der XCP-Technologie eine Anwendung in XCP erstellt werden. In diesen Tip wird aber beschrieben, wie eine solches Modul auch per Hand erstellt werden kann.

Aufgabe

Anzeige der Daten des EMP-DEPT-Tabellen-Modells.
  • Ein Mitarbeiter muss in einer Abteilung arbeiten
  • Eine Abteilung kann einen oder mehrere Mitarbeiter besitzen
EMP_DEPT
Software für die Entwicklung:

1. Hello World Beispiel

Zuerst prüfen wir mit einem Hello-World-Beispiel die richtige Konfiguration aller Komponenten.

Zum Erstellen der Dateien wird ein Ordner mitarbeiter in unserm XCP-Arbeitsverzeichnis angelegt.

Zum Beispiel unter:

D:\xcp_software\ixsql-standard\jakarta-tomcat\webapps\ixsql-standard
den Ordner mitarbeiter.

In diesem Ordner legen wir für die HTML-Templates den Ordner templates und für die SQL-Dateien den Ordner sql an.

+ixsql-standard
               +mitarbeiter
                           +templates
                                     +sql
Im Verzeichnis mitarbeiter wird die Datei start.xcp angelegt:
start.xcp
<?xcp processor="xslt" filename="/WEB-INF/defaults/html2xcp.xsl"?>
<?xcp processor="xslt" filename="/WEB-INF/defaults/sql2xcp.xsl"?>
<xcp:page xmlns:html="http://www.xcp.info/libs/html"
		     xmlns:sql="http://www.xcp.info/libs/sql"
		     xmlns:xcp="http://www.xcp.info/libs/xcp">
<html:template file="templates/start.html" />
</xcp:page>

Das passende Template wird im Verzeichnis templates angelegt.
start.html
<html>
  <body>
    Hello World
  </body>
</html>

Der Aufruf des ersten Moduls erfolgt über die URL:
http://localhost:28080/ixsql-standard/mitarbeiter/start.xcp
up

2. Arbeiten mit der Datenbank

a.) Verbindungsaufbau zur Datenbank ermöglichen
Zuvor muss in iXSQL die Datenbankverbindung über den Connection-Pool konfiguriert werden. Dies geschieht über die Dateien xcpinit.xml und pools.xml im Verzeichnis WEB-INF Ihrer iXSQL-Installation. In pools.xml die Werte der Datei entsprechend anpassen und in xcpinit.xml den Pool-Parameter einkommentieren.
Beispiel für eine pools.xml:
<connections>
  <connection name="scott" id="demo" current="true">
    <driverclass>oracle.jdbc.driver.OracleDriver</driverclass>
    <databaseurl>jdbc:oracle:thin:@127.0.0.1:1521:OEMREP</databaseurl>
    <username>scott</username>
    <password>tiger</password>
    <size>3</size>
    <validcheck>select '1' from dual</validcheck>
  </connection>
</connections>

Beispiel für eine xcpinit.xml:
<xcp>
   <option name="db.pool.config" value="/WEB-INF/pools.xml"/>
</xcp>
up
b.) Tabelle anlegen
Unsere Mitarbeiterdaten sind in zwei Tabelle EMP und DEPT im Benutzer-Schema SCOTT abgelegt.
Aufbau:
SQL> CREATE TABLE SCOTT.DEPT
(
  DEPTNO NUMBER(2,0),
  DNAME VARCHAR2(14),
  LOC VARCHAR2(13),
  CONSTRAINT PK_DEPT PRIMARY KEY (DEPTNO)
);
CREATE TABLE SCOTT.EMP(
  EMPNO NUMBER(4,0),
  ENAME VARCHAR2(10),
  JOB VARCHAR2(9),
  MGR NUMBER(4,0),
  HIREDATE DATE,
  SAL NUMBER(7,2),
  COMM NUMBER(7,2),
  DEPTNO NUMBER(2,0),
  CONSTRAINT PK_EMP PRIMARY KEY (EMPNO),
  CONSTRAINT FK_DEPTNO FOREIGN KEY (DEPTNO)
  REFERENCES SCOTT.DEPT (DEPTNO) ENABLE
) ;

Anlegen von Testdaten in der DEPT Tabelle:
SQL> INSERT INTO DEPT ( DEPTNO, DNAME, LOC ) VALUES (10, 'ACCOUNTING', 'NEW YORK');
     INSERT INTO DEPT ( DEPTNO, DNAME, LOC ) VALUES (20, 'RESEARCH', 'DALLAS');
     INSERT INTO DEPT ( DEPTNO, DNAME, LOC ) VALUES (30, 'SALES', 'CHICAGO');
     INSERT INTO DEPT ( DEPTNO, DNAME, LOC ) VALUES (40, 'OPERATIONS', 'BOSTON');
     INSERT INTO DEPT ( DEPTNO, DNAME, LOC ) VALUES (60, 'TRAINING', 'AUGSBURG');
commit;

Anlegen von Testdaten in der EMP Tabelle:
SQL> INSERT INTO EMP ( EMPNO, ENAME, JOB, MGR, HIREDATE, SAL, COMM, DEPTNO )
		 VALUES (9997, 'MAIER', 'CONSULT', 7566, TO_Date( '03/12/1991 12:00:00 AM',
		'MM/DD/YYYY HH:MI:SS AM'), 12000, 100, 60);
     INSERT INTO EMP ( EMPNO, ENAME, JOB, MGR, HIREDATE, SAL, COMM, DEPTNO )
		 VALUES (9996, 'BÖCK', 'CLERK', 9999, TO_Date( '03/01/1991 12:00:00 AM',
		 'MM/DD/YYYY HH:MI:SS AM') , 6000, 10, 60);
     INSERT INTO EMP ( EMPNO, ENAME, JOB, MGR, HIREDATE, SAL, COMM, DEPTNO )
		 VALUES (9995, 'MÜLLER', 'CONSULT', 9999, TO_Date( '03/01/1991 12:00:00 AM',
		 'MM/DD/YYYY HH:MI:SS AM'), 7000, 30, 60);
commit;
up
c.) Die SQL-Abfrage
Die Tabelle EMP soll nach allen Feldern abgefragt werden können. Dazu erstellen wir die *.sql-Datei query.sql.
Anlegen von Testdaten in der DEPT Tabelle:
query.sql
select EMPNO, ENAME, JOB, MGR, HIREDATE, SAL, COMM, DEPTNO
  from emp
&where

Die SQL-Anweisung wird in der Datei query.sql im Unterverzeichnis sql gespeichert.
Die Textersetzungsvariable &where wird später von XCP ausgewertet und durch die aktuellen Suchparameter ersetzt.

3. Das Abfragemodul erstellen

Zuerst wird die Start-Seite erweitert, um die Abfrage aufzurufen:
start.html
<html>
  <body>
    <form action="query.xcp">
      <input type="text" name="qp_like_ename" />
      <input type="submit" value="Suchen" />
    </form>
  </body>
</html>
Das aufzurufende XCP-Modul wertet die Request-Parameter aus und erstellt mit der hinterlegten SQL-Abfrage in query.sql mit dem &where Platzhalter das notwendige SQL-Statement für die Abfrage.
Dazu muss die folgende Namensgebung eingehalten werden:
qp_<Prädika_kürzelt>_<Spaltenname>
wie zum Beispiel im SQL-Statement:
qp_e_empno wird zu ?empno = <value>?
qp_like_ename wird zu ?ename like <value>?
up

Als nächstes wird die XCP-Datei für das Query-Modul erstellt:
query.xcp
<?xcp processor="xslt" filename="/WEB-INF/defaults/html2xcp.xsl"?>
<?xcp processor="xslt" filename="/WEB-INF/defaults/sql2xcp.xsl"?>
<xcp:page xmlns:html="http://www.xcp.info/libs/html"
		xmlns:sql="http://www.xcp.info/libs/sql"
		xmlns:xcp="http://www.xcp.info/libs/xcp">

<sql:where/>
<html:template file="templates/result.html" >
  <html:markup type="query"
  		name="datarow"
  		rows="20"
  		file="sql/query.sql"/>
</html:template>

</xcp:page>

Das passende Template:
<html>
  <body>

  ##DATAROW_BEGIN##
    $$EMPNO$$ | $$ENAME$$ | $$JOB$$ | $$MGR$$ | $$HIREDATE$$ | $$SAL$$ | $$COMM$$ | $$DEPTNO$$ <br>
  ##DATAROW_END##
	
  </body>
</html>

Mit $$<SPALTENNAME>$$ kann auf den aktuellen Spaltenwert in der jeweiligen Trefferzeile zugegriffen werden.
Über die URL http://localhost:28080/ixsql-standard/mitarbeiter/start.xcp kann nun die Abfrageseite geöffnet und zum Beispiel mit S% nach allen Mitarbeitern mit einem S als Anfangsbuchstabe gesucht werden.
Wie alles im Browser aussieht, sehen Sie im Anhang von diesem Tip.

up

4. Die Anzeige der Abteilung mit in die Suchmaske aufnehmen

Im Suchformular soll der Namen der Abteilung über eine Auswahlliste (HTML-Select-Box) ausgewählt werden können.
Problem: Wie wird eine Auswahlliste in HTML (<select><option></option></select>) aus der Datenbank erstellt?
a.) SQL-Statement erstellen und in Datei dept.sql speichern
Die notwendingen Daten werden durch das folgende SQL-Statement ermittelt:
select deptno,dname from dept
up
b.) Mit dem HTML-Tag html:markup type="sqllist" wird eine Auswahlliste erzeugt und mit einen Markup in das Suchformular eingebunden

start.xcp
<?xcp processor="xslt" filename="/WEB-INF/defaults/html2xcp.xsl"?>
<?xcp processor="xslt" filename="/WEB-INF/defaults/sql2xcp.xsl"?>
<xcp:page xmlns:html="http://www.xcp.info/libs/html"
		xmlns:sql="http://www.xcp.info/libs/sql"
		xmlns:xcp="http://www.xcp.info/libs/xcp">
<html:template file="templates/start.html" >
<html:markup type="sqllist"
		markup="DEPT_LIST"
		requiered="false"
		name="qp_e_deptno"
		size="1"
		sqlfile="sql/dept.sql" />
</html:template>
</xcp:page>


Mit dem html:markup-Tag vom Typ sqllist kann eine Auswahliste erzeugt werden.
start.html
<html>
  <body>
   <form action="query.xcp">
     <input type="text" name="qp_like_ename"><br>
     ##DEPT_LIST##
     <br>
     <input type="submit" value="Suchen" />
   </form>
  </body>
</html>
Beim Abarbeiten des Tags wird das Markup ##DEPT_LIST## durch die erzeugte Auswahliste ersetzt.
Im HTML-Formular sind Markups immer mit der ##<NAME>##-Notation gekennzeichnet.
Auf gleiche Weise kann ein Radio-Button oder Checkbox-Element mit dem html:markup-Tag vom Typ sqlcheck erzeugt werden.
Wird der Parameter multiple="true" gesetzt, werden Checkboxen angezeigt, wird dieser Parameter auf multiple="false" gesetzt, werden Radion-Buttons angezeigt.
up

5. Eine Detail-Ansicht der Mitarbeiterdaten erstellen

Im nächsten Schritt wollen wir aus der Ergebnis Liste der Suche auf eine Detailansicht des Angestellten-Datensatzes navigieren. In der Ergebnisseite der Suche wird ein Link auf die Detail-Seite eingebunden:
result.html:
...
<a href="detail.xcp?qp_e_empno=$$EMPNO$$">$$EMPNO$$</a>
...
a.) Erstellen des notwendigen XCP-Moduls
Das SQL-Statement von der Ergebnisliste können wir weiterverwenden, da SQL-Statements in XCP dynamisch parametrisiert werden können. (Parameter qp_e_empno)
Unser Detail-XCP-Modul ruft ein neues passendes HTML-Template in Verbindung mit dem SQL Statement auf.
Detail.xcp
<?xcp processor="xslt" filename="/WEB-INF/defaults/html2xcp.xsl"?>
<?xcp processor="xslt" filename="/WEB-INF/defaults/sql2xcp.xsl"?>
<xcp:page xmlns:html="http://www.xcp.info/libs/html"
		xmlns:sql="http://www.xcp.info/libs/sql"
		xmlns:xcp="http://www.xcp.info/libs/xcp">
	<sql:where/>
	<html:template file="templates/detail.html" >
	<html:markup type="query"
		name="datarow" file="sql/query.sql"/>
	</html:template>
</xcp:page>

detail.html
<html>
<body>
  ##DATAROW_BEGIN##
  <form>
    <input type="hidden" name="empno" value="$$EMPNO$$" />
    <table>
      <tr>
        <td>Nummer</td><td>$EMPNO$$</td>
      </tr>
      <tr>
        <td>Name</td><td>$$ENAME$$</td>
      </tr>
      <tr>
        <td>Job</td><td>$$JOB$$</td>
      </tr>
      <tr>
        <td>Nummer des Vorgesetzen</td><td>$$MGR$$</td>
      </tr>
      <tr>
        <td>Einstellungsdatum</td><td>$$HIREDATE$$</td>
      </tr>
      <tr>
        <td>Gehalt</td><td>$$SAL$$</td>
      </tr>
      <tr>
        <td>Provision</td><td>$$COMM$$</td>
      </tr>
      <tr>
        <td>Abteilung</td><td>$$DEPTNO$$</td>
      </tr>
    </table>
  </form>
  ##DATAROW_END##
</body>
</html>

up
b.) Dynamische Auswahllisten in Verbindung mit einer Ergebnisliste
Im nächsten Schritt wollen wir die Abteilung in einer Auswahlliste in der Detailansicht darstellen. Dazu muss die jeweils aktuelle Abteilung des Mitarbeiters ausgewählt und angezeigt werden.
Auch hier kommt das html:markup-Tag zum Einsatz, da aber die Auswahlliste mit dem SQL-Ergebnis verknüpft werden muss, ist folgendes zu beachten:
  • Die Auswahlliste muss VOR dem html:markup type="query" erstellt werden
  • Der Parameter name des html:markup-Tag muss gleich dem Spaltennamen, auf den sich die Liste beziehen soll, sein
  • Im html:markup type="query" muss der Parameter select mit den Spaltennamen, auf die sich die Auswahllisten beziehen, hinzugefügt werden
Auszug aus unserer neuen detail.xcp:
<sql:where/>
<html:template file="templates/detail.html" >
  <html:markup type="sqllist"
     markup="DEPT_LIST"
     name="deptno" size="1"
     sqlfile="sql/dept.sql"
     mtype="data"/>
  <html:markup type="query"
     name="datarow"
     file="sql/query.sql"
     select="deptno"/>
</html:template>

Das Markup in der HMTL-Datei detail.html:
<tr>
   <td>Abteilung</td><td>##DEPT_LIST##</td>
</tr>

Bei Aufruf der Detailseite wird nun das Markup ##DEPT_LIST## ersetzt und an der richtigen Position in HTML das Schlüsselwort ?selected? eingesetzt.
up
c.) Statische Auswahllisten in Verbindung mit einer Ergebnisliste
Zusätzlich soll die Provision auf eine feste Wertemenge eingeschränkt werden. Es sind nur die folgenden Werte zulässig:
        0
       10
       30
       90
      100
      300
      500
     1400
Diese Liste bilden wir in HTML mit einer statischen Auswahlliste ab und setzen diese Liste in unser HTML-Template detail.html ein.
<select name="comm">
  <option value="0">0</option>
  <option value="10">10</option>
  <option value="30">30</option>
  <option value="90">90</option>
  <option value="100">100</option>
  <option value="300">300</option>
  <option value="500">500</option>
  <option value="1400">1400</option>
</select>

Wie aber wird jetzt der aktuelle Wert des Mitarbeiter-Datensatzes berücksichtigt und das richtige Element der Liste ausgewählt?
Für diese Aufgabe gibt es ein spezielles SQL-Markup in HTML:
$$<Spaltenname>_<Spaltenwert>$$
Dieses Markup wird, falls der Spaltenwert der benannten Spalte passt, durch das HTML-Schlüsselwort selected ersetzt und damit als das aktive Element der Auswahlliste gekennzeichnet.
Damit die Ersetzung auch durchgeführt werden kann, muss im html:markup type="query" der Parameter select die benötigte Spalte enthalten:
Erweiterte detail.xcp:
<html:markup type="query"
   name="datarow"
   file="sql/query.sql"
   select="deptno, comm"/>

Erweitertes HTML-Template detail.html:
 <tr>
    <td>Provision</td>
    <td>
       <select name="comm">
          <option value="0" $$COMM_0$$ >0</option>
          <option value="10" $$COMM_10$$ >10</option>
          <option value="30" $$COMM_30$$ >30</option>
          <option value="90" $$COMM_90$$ >90</option>
          <option value="100" $$COMM_100$$ >100</option>
          <option value="300" $$COMM_300$$ >300</option>
          <option value="500" $$COMM_500$$ >500</option>
          <option value="1400" $$COMM_1400$$>1400</option>
       </select>
    </td>
 </tr>

Um Probleme mit Nachkommastellen zu vermeiden, empfehlt sich für das Demo ein Round über die Provision:
Erweitertes SQL Abfrage:
select EMPNO
     , ENAME
     , JOB
     , MGR
     , HIREDATE
     , SAL
     , round(COMM)
     as COMM, DEPTNO
from emp
&where

Beachten Sie hier, dass alle Spalten immer einen festen Namen haben müssen, damit die Templatetechnik zuverlässig funktioniert. Hier im Beispiel wird der Spalte round (COMM) mit dem Schlüsselwort as der Name COMM zugewiesen.

up

6. Die Mitarbeiter-Detailansicht speichern

Nachdem wir nur die Detailansicht erstellen können, wollen wir die Daten verändern und in der Datenbank wieder speichern.

Zuerst wird das HTML-Formular erweitert:
<html>
<body>
##DATAROW_BEGIN##
 <form action="save.xcp">
  <input type="hidden" name="empno" value="$$EMPNO$$" />
  <table>
    <tr>
     <td>Nummer</td><td><input type="text" name="empno" value="$$EMPNO$$" size="30" /></td>
    </tr>
    <tr>
     <td>Name</td><td><input type="text" name="ename" value="$$ENAME$$" size="30" /></td>
    </tr>
    <tr>
     <td>Job</td><td><input type="text" name="job" value="$$JOB$$" size="30" /></td>
    </tr>
    <tr>
     <td>Nummer des Vorgesetzen</td><td><input type="text" name="mgr" value="$$MGR$$" size="30" /></td>
    </tr>
    <tr>
     <td>Einstellungsdatum</td><td><input type="text" name="hiredate" value="$$HIREDATE$$" size="30" /></td>
    </tr>
    <tr>
     <td>Gehalt</td><td><input type="text" name="sal" value="$$SAL$$" size="30" /></td>
    </tr>
    <tr>
     <td>Provision</td>
     <td>
        <select name="comm">
           <option value="0" $$comm_0$$ >0</option>
           <option value="10" $$comm_10$$ >10</option>
           <option value="30" $$comm_30$$ >30</option>
           <option value="90" $$comm_90$$ >90</option>
           <option value="100" $$comm_100$$ >100</option>
           <option value="300" $$comm_300$$ >300</option>
           <option value="500" $$comm_500$$ >500</option>
           <option value="1400" $$comm_1400$$>1400</option>
        </select>
     </td>
    </tr>
    <tr>
       <td>Abteilung</td><td>##DEPT_LIST##</td>
    </tr>
  </table>
 <input type="submit" value="speichern" />
</form>
##DATAROW_END##
</body>

Wichtig ist hierbei, dass die Namen der Request-Parameter in HTML gleich den Spaltennamen in der Datenbank sind, um das bequeme 1:1-Mapping der Request-Parameter auf Datenbank-Spalten nutzen zu können.

Für das Sichern der Daten wird die Datei save.xcp erstellt:
<?xcp processor="xslt" filename="/WEB-INF/defaults/html2xcp.xsl"?>
<?xcp processor="xslt" filename="/WEB-INF/defaults/sql2xcp.xsl"?>
<xcp:page xmlns:html="http://www.xcp.info/libs/html"
    xmlns:sql="http://www.xcp.info/libs/sql"
    xmlns:xcp="http://www.xcp.info/libs/xcp">
  <sql:transaction>
    <sql:execute sqlfile="sql/update_emp.sql"/>
  </sql:transaction>
  <xcp:set-param scope="page" name="qp_e_empno" parameter="empno"/>
  <xcp:redirect url="detail.xcp"/>
</xcp:page>

Mit dem Tag sql:transaction wird ein Transaktionsblock in XCP erstellt. Das SQL-Statement im sql:execute-Tag wird ausgeführt.
Tritt ein Fehler in der Datenbank auf, werden alle Änderungen zurückgesetzt (rollback).
Sind keine Fehler aufgetreten, wird wieder auf unser Detail-Modul verwiesen. Um das Detail-Modul mit den richtigen Daten aufzurufen, wird der Wert des Parameters EMPNO als qp_e_empno-Parameter mit übergeben.

Inhalt der SQL-Datei update_emp.sql im Verzeichnis sql:
update emp
set
ENAME = :ENAME
, JOB = :JOB
, MGR = :MGR
, HIREDATE = :HIREDATE
, SAL = :SAL
, COMM = :COMM
, DEPTNO = :DEPTNO
where EMPNO = :EMPNO

Über die :-Notation wird die Verbindung zwischen den Request-Parametern des HTML-Formulars und den Datenbank-Werten hergestellt.
up

7. Einen Datensatz neu anlegen

Ähnlich unserem Update-Beispiel können Sie auch einen neuen Datensatz anlegen. Sie benötigen zusätzlich ein Insert-Statement, um die Daten zu speichern

Beispiel: insert.sql
insert into emp (EMPNO,ENAME,JOB,MGR,HIREDATE, SAL, COMM, DEPTNO)
values (
EMPNO
, :EMPNO
, :JOB
, :MGR
, :HIREDATE
, :SAL
, :COMM
, :DEPTNO
)

Je nach Datenbank-Version muss an dieser Stelle die jeweilige Methode der verwendeten Datenbank angewandt werden um einen eindeutigen Schlüssel für den Datensatz zu erzeugen.
Im folgenden Modul wird ein etwas komplexerer Ansatz gezeigt, um einen eindeutigen Schlüssel zu erzeugen. Hierbei wird der Wert des Primary-Key über ein Sequenz-Objekt der Datenbank (Oracle Syntax) erzeugt. Es kommt eine Hilfsklasse zum Einsatz und das Ergebnis der SQL-Abfrage wird zu den normalen Request-Parametern gespeichert und kann dann wieder mit der :-Notation referenziert werden.
Zuvor muss die Sequence auf der DB angelegt werden:
scott:sql>create sequence SEQ_EMP;

Das XCP Modul: insert.xcp
<?xcp processor="xslt" filename="/WEB-INF/defaults/html2xcp.xsl"?>
<?xcp processor="xslt" filename="/WEB-INF/defaults/sql2xcp.xsl"?>
<xcp:page xmlns:html="http://www.xcp.info/libs/html"
     xmlns:sql="http://www.xcp.info/libs/sql"
     xmlns:xcp="http://www.xcp.info/libs/xcp">
  <sql:transaction>
    <xcp:code>
      String id = com.netcos.obox.database.sql.SqlUtil.getStringResult(
      this.connection
      , "select SEQ_EMP.nextval as EMPNO from dual"
      , null);
      this.pci_request.set_param("EMPNO", id);
    </xcp:code>
    <sql:execute sqlfile="sql/insert_emp.sql"/>
  </sql:transaction>
  <xcp:set-param scope="page" name="qp_e_empno" parameter="empno"/>
  <xcp:redirect url="detail.xcp"/>
</xcp:page>

In einem <xcp:code> Abschnitt können Sie Java Code direkt angeben und verwenden.
up

Weitere Verbesserungen

a.) Markups bereinigen
Wenn Sie den erzeugten HTML Code über den Browser analysieren,werden Sie noch einige alte Markups entdecken.
Diese Markups können mit dem HTML-Tag <html:markup type="clean"/%gt; bereinigt werden.
b.) Request-Parameter anzeigen
Um Request-Parameter in eine HTML-Seite einzufügen, verwenden Sie die ##<NAME_PARAMETER>##-Notation. Die Markups werden dann nach Abarbeitung des HTML-Tags <html:markup type="request"/> ersetzt.
c.) Ausführung von XCP-Abschnitten über Request-Parameter steuern
Mit dem XCP-Tag
  <xcp:if-param-equals name="parameter" value="value">
     <!-- weiterer code -->
  </xcp:if-param-equals>
können Sie die Ausführung von Abschnitten eines XCP-Moduls parametrisieren. Zum Beispiel können Sie damit alle XCP-Code-Beispiele von diesem Tip in einer Datei abbilden.

Zusammenfassung

In diesem XCP-Tip für den Monat Februar haben Sie die Grundzüge für das Erstellen einer dynamischen Web-Anwendung mit XCP kennen gelernt.
Die wichtigsten Punkte:
  • Direktes Mapping von Request und SQL-Parametern über gleiche Namen und die :-Notation
  • Ersetzen von ##MARKUPS## durch selbst erzeugte Komponenten wie Auswahllisten
  • Anzeige der Ergebnisse eines SQL-Statements durch die $$<SPALTENNAME>$$-Notation
  • Java-Code-Blöcke können über einen <xcp:code>-Block verwendet werden
  • Die Grundlagen der html:markups
  • Die Grundlagen der sql:markups
Wo finden Sie mehr Information
In der IXSQL-Oberfl&aml;che unter Documentation/XCP Developer Guide

Erstellen Sie auch mit dem Generator eine solche Anwendung und analysieren Sie den erzeugten Quellcode. Der Generator nimmt Ihnen viele der hier beschriebenen Schritte ab

up

Anhang

Mit etwas HTML lassen sich die Module natürlich je nach Geschmack verschönern.
Das Query-Modul:
Query Module

Die Ergebnisliste:
Query Module

Einen Datensatz bearbeiten:
Query Module
up