So trivial ist das leider nicht.
Es gibt seit JVx 2.5 den Support für dynamische Parameter, z.B:
- Code: Select all
dbs.setFromClause("getVIP(:FROM, :TO)");
Die Parameter werden aus der Fetch Condition ermittelt und "ignoriert" fürs eigentliche Statement.
Es wird komplex bei der Verwendung von dynamischen Parametern in der FROM clause, weil die DBStorage die Metadaten ermittelt und zu diesem Zeitpunkt noch keine Condition vorhanden ist. Somit müsste die Funktion mit null Werten aufgerufen werden. Allerdings ist nicht bekannt um welchen Datentyp es sich beim Parameter handelt (Integer, String, Datum, ...). Im Moment ist es bei der DBStorage nicht möglich, die Typen für dynamische Parameter zu definieren.
Um zum Ziel zu kommen, sollten Sie auf jeden FAll JVx 2.6 einsetzen da damit die dynamischen Parameter besser behandelt werden als mit 2.5.
Sie müssen aber etwas tricksen um die Typ-Probleme zu umgehen, sprich sie müssen null vermeiden:
Server Code- Code: Select all
DBStorage dbs = new DBStorage();
dbs.setDBAccess(dba);
dbs.setFromClause("getVIP(0, 0)");
dbs.open();
dbs.setFromClause("getVIP(:FROM, :TO)");
Vor dem open() call müssen fixe Werte übergeben werden, die nicht null sind. Das wird für die Ermittlung der Metadaten benötigt.
Danach kann auf dynamische Parameter gewechselt werden. Allerdings sollten Sie immer darauf achten, das die Werte ungleich null sind. Sie sollten also Leerstring oder -1 verwenden.
Client Code- Code: Select all
dataBook.setFilter(new Equals("FROM", BigDecimal.valueOf(300)).and(new Equals("TO", BigDecimal.valueOf(1000))));
Wir werden die Unterstützung für dynamische Parameter weiter verbessern, aber im Moment müssen Sie sich an obiges halten. Natürlich können Sie jederzeit eine eigene Storage implementieren, wie bereits vorgeschlagen. Dann hätten Sie keinerlei Einschränkungen.