|
XCP Blackboard | ||||
|
|||||
| Tip No. 5 Eine Anwendung mit Auswahllisten in XCP per Hand erstellen (Teil 2.) | |
Unsere Anwendung (Teil 1) erweitern.
Wir wollen ein Modul für die Abteilungen erstellenAufgabeSuche über die Abteilungen mit Anzeige der Mitarbeiter
Software für die Entwicklung:
1. VorbereitungZuerst laden wir die bereits erstellten Module vom Februar 2004 als *.zip-Datei von der XCP-Homepage http:\\www.netcos.de oder verwenden unsere bestehenden aus dem Tip 4.Mit diesen Modulen und dem Tip Februar 2004 prüfen wir die richtige Konfiguration aller Komponenten. 2. Das Abfragemodul erstellenDie Tabelle DEPT soll nach allen Feldern abgefragt werden können. Dazu erstellen wir die *.sql-Datei query_dept.sql.query_dept.sql
select DEPTNO, DNAME, LOC
from DEPT
&where
Die SQL-Anweisung wird in der Datei query_dept.sql im Unterverzeichnis sql gespeichert. Die Textersetzungsvariable &where wird später von XCP ausgewertet und durch die aktuellen Suchparameter ersetzt. Eine Abfrageseite für die DEPT-Tabelle wird erstellt. start_dept.html
<html>
<body>
<form action="query_dept.xcp">
Abteilungsname:
<input type="text" name="qp_like_dname" /> <br>
Ort:
<input type="text" name="qp_like_loc" /><br>
<input type="submit" value="Suchen" />
</form>
</body>
</html>
Als nächstes wird die XCP-Datei für das Query-Modul erstellt: query_dept.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_dept.html" >
<html:markup type="query"
name="datarow"
rows="20"
file="sql/query_dept.sql"/>
</html:template>
</xcp:page>
Das aufzurufende XCP Modul query_dept.xcp wertet die Request-Parameter aus und erstellt mit der hinterlegten SQL-Abfrage in query_dept.sql mit dem &where Platzhalter das notwendige SQL-Statement für die Abfrage. Dazu muss die folgende Namensgebung eingehalten werden: qp_<Prädikat_kürzel>_<Spaltenname> wie zum Beispiel im SQL-Statement: qp_e_deptno wird zu ?empno = <value>? qp_like_dname wird zu ?dname like <value>? Das passende Template: query_dept.html
<html>
<body>
##DATAROW_BEGIN##
$$DEPTNO$$ | $$DNAME$$ | $$LOC$$ <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_dept.xcp kann nun die Abfrageseite geöffnet und zum Beispiel mit % nach allen Abteilungen gesucht werden. Wie alles im Browser aussieht sehen Sie hier: Das Such-Modul:
Das Ergebnis:
3. Die Mitarbeiter als Detail in der Ergebnisliste anzeigenBisher haben wir nur die Grundlagen aus dem Tip vom Februar 2004 wiederholt. Als nächstes möchten wir aber als Detail-Information in der Ergebnisliste alle Mitarbeiter der jeweiligen Abteilung anzeigen.Bei diesem einfachen Beispiel ließ sich das Problem auch über ein verknüpftes SQL-Statement l&oml;sen. Wir wollen aber zur Demonstration zwei SQL-Abfragen verwenden. Dazu ben&oml;tigen wir eine äußere Abfrage über alle Abteilungen und eine innere Abfrage über die Mitarbeiter der jeweiligen Abteilung. Zur Verknüpfung der Daten verwenden wir die Abteilungsnummer, in unserem Datenmodell die Spalte Für das äußere Statement können wir unsere Dept-Abfrage von query_dept.sql verwenden, für die innere Abfrage erstellen wir eine neue Datei. query_dept_emp.sqlselect EMPNO, ENAME, JOB, MGR, HIREDATE, SAL, round(COMM) as COMM, DEPTNO from emp where deptno=:DEPT_DEPTNO Wichtig ist hier die Referenzierung der äußeren Schleife (Name der Schleife DEPT) über die Bind-Variable :DEPT_DEPTNO. Im XCP-Modul wird die Schleife aufgebaut: query_dept.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_dept.html" >
<!-- Aeussere Schleife -->
<html:markup type="query" name="dept" rowdata="true" prefix="true" file="sql/query_dept.sql">
<!-- inneres Schleife -->
<html:markup type="query" name="emp" file="sql/query_dept_emp.sql"/>
</html:markup>
</html:template>
</xcp:page>
Wichtig ist hier in der äußeren Schleife der Parameter rowdata = true und der Parameter prefix=true, damit wird erreicht, dass aus der inneren Schleife die Werte der äußeren Schleife referenziert werden können. Der Name der äußeren Schleife wird über den Parameter name=?dept? gesetzt und muss im HMTL-Template und in der inneren SQL-Anweisung verwendet werden. Das Ganze sieht dann so aus:
|
|
| ©2005 netcos AG | www.netcos.de |