Sie sind nun wieder eingeladen, die Diskussion spezieller technischer Sie sind nun wieder eingeladen, die Diskussion spezieller technischer Probleme mit zu verfolgen. Bitte schicken Sie Fragen, Anregungen oder Antworten zu den vorgestellten Themen – ebenso wie Ihre Kritik – an unsere e-Mail-Adressen: dieter.bender@MidrangeMagazin.de oder Redaktion@MidrangeMagazin.de

Frage:

Wir setzen den OS/400-Befehl FNDSTRPDM im Bereich Qualitätssicherung/Programmierung ein. Man kann mit diesem Befehl leicht feststellen, in welchen Programmen bestimmte Konstruktionen oder auch Variablen verwendet werden. Gibt es eine einfache Möglichkeit, FNSTRPDM dazu zu veranlassen, für jeden Treffer den Namen der Quelldatei in eine Datei wegzuschreiben?

Antwort:

FNDSTRPDM ist in der Tat eines der flexibelsten Tools im PDM-Umfeld. Erstaunlicherweise gehört eine der stärksten Möglichkeiten zu den weniger bekannten. Im Parameter OPTION können neben festen Auswahlen – wie z.B. *DSP – auch selbstdefinierte PDM-Operationen eingetragen werden. Die Idee ist nun, eine eigene Option zu definieren, der man als Parameter die Umgebungsvariablen &L (für die Bibliothek), &F (für die Datei) und &N (für die Teildatei) übergibt, um diese dann in eine Datei wegzuschreiben. Dieser Weg ist ohne aufwendige Programmierung möglich und am einfachsten mit dem Query Manager realisierbar.

Mit einem kleinen QM Query erstellt man sich zunächst die Datei; der Benutzer muss im QM-Profil selbstredend entsprechende Rechte eingetragen haben. Der Erstellungsmodus wird auf SQL eingestellt und dann kann eine SQL-Anweisung eingegeben werden. Selbstverständlich hat man auch den Prompter zur Verfügung. In unserem Beispiel sollen später dann in diese Datei die Sätze weggeschrieben werden. Nach Ausführung der SQL-Anweisung mit Befehlstaste 6 ist die Datei bereits erstellt. Das abgespeicherte *QMQRY-Objekt kann aber auch mit STRQMQRY ausgeführt werden.

Abfrage editieren
Spalten . . . : 1 70 Abfrage . . : CREATE2
QM . .
SQL-Anweisung eingeben
************************** Anfang der Daten **************************
0001.00 CREATE TABLE Sourcen
0002.00 (
0003.00 SLIBRARY char(10)
0004.00 , SFILE char(10)
0005.00 , SMEMBER char(10)
0006.00 )
**************************** Ende der Daten **************************

Für das Wegschreiben der Sätze benötigen wir nun ein zweites kleines QM Query. Die einzufügenden Werte in der VALUES-Klausel des SQL-Statements sind durch das vorangestellte &-Zeichen für den Query Manager als Variablen erkennbar. Ein wenig erinnert das an CL. Auch diese zweite Abfrage wird nun gespeichert.

Abfrage editieren
Spalten . . . : 1 70 Abfrage . . : INSERT2
QM . .
SQL-Anweisung eingeben
************************** Anfang der Daten **************************
0001.00 insert into
0002.00 sourcen
0003.00 values(
0004.00 &LIB
0005.00 , &FIL
0006.00 , &MBR
0007.00 )
**************************** Ende der Daten **************************

Die eigentliche Ausführung des Query soll dann später automatisch durch PDM aufgerufen werden. Hierzu benötigen wir eine so genannte Benutzer-Option, zu deren Erstellung man zunächst PDM startet. Ob man mit WRKLIBPDM, WRKOBJPDM oder WRKMBRPDM PDM einsteigt, ist hierbei ohne weitere Bedeutung, allerdings reicht lediglich das PDM-Menü noch nicht aus. Mit Befehlstaste 16 erreicht man die Oberfläche zur Erstellung benutzerdefinierter Auswahlmöglichkeiten.

Ich habe mich in dem Beispiel für den Namen Q2 entschieden. In der Befehlszeile wird der Aufruf für das Query eingetragen. Bei dem OS/400-Befehl wird im Parameter QMQRY der Name unseres INSERT-Query eingetragen. Im Parameter SETVAR werden unsere drei Variablen mit den PDM-Umgebungsvariablen &L, &F und &N belegt. Auch dies erinnert wieder ein wenig an CL. Die schwierigste Herausforderung, die an dieser Stelle zu lösen ist, ist das korrekte Abzählen der Hochkommas. Die Variablen-Namen des PDM müssen in dreifache Hochkommas eingepuffert werden, damit sie alle folgenden Tokenizer „ungerupft“ überstehen und der SQL-Prozessor später auch noch welche übrig hat. Die Syntax des eingetragenen Befehls-Strings duldet keinerlei noch so kleine Abweichung.

STRQMQRY QMQRY(INSERT2) SETVAR((LIB “’&L“‘) (FIL “’&F“‘) (MBR “’&N“‘))

Hier kommt es auf jedes Hochkomma und auf jede Klammer an. Zu beachten ist auch, dass das &-Zeichen vor den Variablen-Namen des Query Managers weggelassen werden muss, dafür aber die PDM-Variablen mit „&“ gekennzeichnet werden müssen.

Benutzerdefinierte Auswahl erstellen
Auswahl-ID und Befehl eingeben und Eingabetaste drücken.
Benutzerdefinierte Auswahl Q2 ID der zu erstellenden Auswahl
Befehl . . . . . . . . . STRQMQRY QMQRY(INSERT2) SETVAR((LIB “’&L“‘) (F
IL “’&F“‘) (MBR “’&N“‘))

Wenn alles von der Syntax aus CL-Sicht in Ordnung ist, wird die Option nach Betätigung der Eingabetaste gespeichert und das Bild verlassen. Die soeben gespeicherte benutzerdefinierte Option kann jetzt bei der Ausführung von FNDSTRPDM verwendet werden. Dazu wird sie lediglich beim Parameter OPTION mit ihrem Namen eingetragen.

Zeichenfolge mit PDM suchen (FNDSTRPDM)
Auswahl eingeben und Eingabetaste drücken.
Suchen ‚Zeichenfolge‘ . . . . . STRING > ‚*INLR‘
Datei . . . . . . . . . . . . . FILE > QRPGLESRC
Bibliothek . . . . . . . . . . > BENDER
Teildatei . . . . . . . . . . . MBR > *ALL
+ für weitere Werte
Durchzuführende Operation: OPTION
Auswahl . . . . . . . . . . . > Q2
Eingabeaufforderung . . . . . *NOPROMPT

Im vorstehenden Beispiel ruft nun FNDSTRPDM bei jedem Vorkommen der Zeichenkette *INLR in einer Quelldatei meiner QRPGLESRC (hoffentlich ist das nirgends der Fall) das kleine QMQRY INSERT2 auf und übergibt diesem den Namen der Bibliothek, der Datei und der Teildatei. Das SQL-Programm trägt dann die ihm übergebenen Parameter in die Datei-Sourcen ein, die wir uns mit dem zweiten QMQRY erzeugt haben.

Den Autor Dieter Bender erreichen Sie unter dieter.bender@midrangemagazin.de