Mittwoch, 17. November 2010

Mit dem Query Module die richtgen Tabellen und Felder auf einer i5 finden

Wie heißt das Feld für die Kundennummer im Kundenstamm, wie heißt überhaupt die Tabelle Kundenstamm?!
VKKUND, KDSTPF, KUND, KUNDE?
Gerade in RPG-lastigen Umgebungen wird man häufig mit netten 6-Stelligen Abkürzungen verwöhnt. Wie also soll man sich hier zurechtfinden. Die Profis auf der i5 greifen kurzerhand zu den DDS Sourcen, oder auch zum Operations Navigator wenn es etwas länger dauern darf.

Was aber wenn man vor DDS Sourcen Angst hat und der Operations Navigator einem zu langsam ist?

Da gibts doch auch was von Ratio... äh scireum.....

Richtig!

Sämtliche Tabellennamen und auch die Spaltennamen sind in zwei Systemtabellen abgelegt.
Tabellen in: QSYS2.SYSTABLES
Spalten in: QSYS2.SYSCOLUMNS

Also zaubern wir einfach ein kleines SQL Statement:
SELECT C.TABLE_SCHEMA, C.TABLE_NAME, t.TABLE_TEXT, 
       C.COLUMN_NAME, C.COLUMN_TEXT, C.DATA_TYPE 
FROM QSYS2.SYSCOLUMNS C 
JOIN QSYS2.SYSTABLES T ON C.TABLE_SCHEMA=T.TABLE_SCHEMA AND  
     C.TABLE_NAME=T.TABLE_NAME 
WHERE t.table_type='P' 
      AND c.table_schema = upper(${Bibliothek}) 
      [and lower(c.DATA_TYPE) LIKE #{Datentyp}] 
      [and lower(c.TABLE_NAME) LIKE #{Tabelle}]
      [and lower(T.TABLE_TEXT) LIKE #{Bez Tabelle}]
      [and lower(C.COLUMN_NAME) LIKE #{Feld}]
      [and lower(C.COLUMN_TEXT) LIKE #{Bez Feld}]
fetch first 300 rows only

Einige Anmerkungen:
  • Bei LIKE Operatoren verwenden wir als Parameter nicht ${Parameter} sondern #{Parameter} dadurch wird am Ende des Strings automatisch ein '%' angefügt. Möchte man auch zu Beginn ein % haben gibt man einfach '*Suchbegriff' an.
  • Durch die Funktion upper() im Bibliotheksnamen ersparen wir uns das Problem mit Groß/Kleinschreibung. (Bibliotheksnamen auf der AS400 sind immer in Großbuchstaben).
  • Durch die eckigen Klammern sind bis auf den Bibliotheksnamen alles optionale Parameter.
  • Das 'fetch first 300 rows only' liefert lediglich 300 Datensätze egal wie groß das Resultset ist. Damit können wir das Ganze gefahrlos als HTML Tabelle bereitstellen.
  • Als Parameter habe ich TEXT verwendet. Theoretisch könnte man bspw. für Tabellen und Felder auch Parameter anlegen (Datenquelle s.o.)
Das ganze habe ich als HTML Tabelle konzipiert und somit kann man nun gemütlich nach den passenden Feldern bzw. Tabellen suchen.

So sieht das dann aus: