-
Lib eines Programms ermitteln
Hallo,
ich weiß, es klingt etwas seltsam, aber ich muss ein Programm aufrufen, von dem ich nicht weiß, in welcher Bibliothek es sich befindet. Die Bibliothek, in der sich das Programm befindet, ist zu diesem Zeitpunkt auch nicht in der *LIBL.
Deshalb möchte ich (wie ich das z.B. mit WRKOBJ machen würde) alle Bibliotheken ermitteln, in denen sich ein PGM mit dem spezifischen Namen befindet.
Kennt jemand dazu eine einfache Möglichkeit?
Danke im Voraus,
Dieter
-
Wir wärs mit einem DSPOBJD nach *OUTFILE und anschließenden RCVFs über die Ausgabedatei in Schleife?
-
Das gehört eigentlich verboten!
Außerdem kann es da verschiedene Versionen des selben Programmes in verschiedenen Lib's geben.
Zusätzlich kann dieses Programm dann Ressourcen benötigen, die dann auch nicht in der LIBL verfügbar sind (z.B. andere Programme oder Dateien).
Sicherstellen kannst du das wirklich nur, wenn deine LIBL stimmt.
Ansonsten gibt es leider keine "einfache" Möglichkeit, hierfür musst du die Objekt- und USRSPC-API's bemühen.
Mittels Objekt-API das/die Objekt(e) ermitteln. Dieses API stellt dir einen USRSPC mit einer Liste zur Verfügung die du mit den entsprechenden API's dann auslesen kannst.
Ob das dann so funktioniert wie von dir gewünscht bleibt dann abzuwarten.
Das Risiko dabei ist sehr hoch.
-
DSPOBJD geht zwar auch, aber man muss dabei aufpassen, dass man hier eindeutige Dateinamen (QTEMP) verwendet. Immerhin können das ja mehrere Jobs gleichzeitig machen.
-
 Zitat von Fuerchau
Das gehört eigentlich verboten!
Ob das dann so funktioniert wie von dir gewünscht bleibt dann abzuwarten.
Das Risiko dabei ist sehr hoch.
... wer wird denn da so streng sein, immerhin ist das schon besser als die LIB zu kennnen und dann das Programm auszuwürfeln - und außerdem gilt: no risc no fun...
D*B
-
 Zitat von Fuerchau
DSPOBJD geht zwar auch, aber man muss dabei aufpassen, dass man hier eindeutige Dateinamen (QTEMP) verwendet. Immerhin können das ja mehrere Jobs gleichzeitig machen.
Das Problem hast Du aber auch bei den List APIs wenn Du den gleichen User Space Namen verwendest und nicht in die QTEMP kopierst.
Das API für Objekte is QUSLOBJ (List Objects) und Format OBJL0100 sollte reichen.
Birgitta
-
Als USRSPC gebe ich ja gezielt QTEMP an, bei DSPOBJD in QTEMP brauche ich aber noch einen OVRDBF, da ja zum Compilezeitpunkt ggf. die Datei nicht da ist.
Ich könnte da natürlich auch anschließend SQL nehmen.
Wie immer, es gibt viele Möglichkeiten (auch ein Programm zum Absturz zu bringen).
-
Vielen Dank für die schnellen und zahlreichen Antworten.
Das API ist wahrscheinlich die eleganteste Lösung. Nur sind API-Aufrufe (für mich) meistens mit zeitintensiver Tüftelei verbunden.
Deshalb werde ich wohl erstmal die DPSOBJD-Lösung favorisieren.
Zur Erklärung, was das ganze soll: Wir setzen ja Profound ein und möchten Profound-Releasewechsel ohne Nachtarbeit erledigen. Deshalb wollen wir die User mit einer vorgeschalteten Apache-Instanz auf die von uns (der Programmierung) gerade gewünschten Profound-Instanz leiten, wenn die User eine neue iSeries-Sitzung (im Browser) öffnen. Dazu müssen wir im Startprogramm des Users aber die richtige Profound-Bibliothek (passend zur Apache-Instanz) setzen. Um die richtige Bibliothek herauszufinden, müssen wir ein bestimmtes Profound-Tool aufrufen, dass uns die gewünschte Information liefert. Das Aufrufen des Tools ist allerdings schwierig, solange sich noch keine Profound-Lib in der *LIBL befindet.
Während ich das ganze hier schreibe, merke ich gerade, dass ich den Wald vor lauter Bäumen nicht sehe: Ich kann ja das Profound-Tool einfach in eine feste, beim Releasewechsel nicht veränderbare eigene Lib kopieren und damit immer ohne Suchen finden!
Tja, sorry für die Mühe.
Und danke, das wir darüber gesprochen haben :-).
Viele Grüße,
Dieter
-
Wenn du verschieden Versionen hast würde ich diese Info doch in einer bekannten Lib in einer Datei vorhalten.
Somit reicht SQL um die korrekte Lib zur Version herauszufinden und die LIBL anzupassen.
-
Wenn du stattdessen einen eigenen Befehl schreibst, der das gewünschte Programm aufruft, und diesen in die feste Bibliothek legst, dann brauchst du diesem nur die entsprechenden Produktbibliothek (Parameter PRDLIB) einmalig einzutragen.
-
Man kann sich auch mit einem Zweizeiler eine User Defined Table Function (UDTF) schreiben, die man dann immer wenn man sie braucht über SQL aufrufen und verarbeiten kann:
Code:
Create Or Replace Function YourLib/FindLibPGM
(ParPGM VarChar(10))
Returns Table (ObjLib Char(10) ,
Obj Char(10) ,
ObjDescr Char(50) )
Language SQL
Modifies SQL Data
Called On NULL Input
Disallow Parallel
Not Fenced
Begin
Declare CLCmd VarChar(256) Not Null Default '';
Set CLCmd = 'DSPOBJD OBJ(*ALL/' concat Trim(ParPGM) concat ') '
Concat ' OBJTYPE(*PGM) '
Concat ' OUTPUT(*OUTFILE) '
Concat ' OUTFILE(QTEMP/TMPOBJD) '
Concat ' OUTMBR(*FIRST *REPLACE) ';
Call QCMDEXC(CLCmd, Length(CLCmd));
Return Select ODLBNM, ODOBNM, ODOBTX
From QTEMP/TMPOBJD;
End ;
Wenn das Skript ordnungsgemäß ausgeführt wurde, d.h. die UDTF erstellt wurde, kann man sie von überall und jederzeit mit dem folgenden SQL-Befehl aufrufen:
Code:
select *
From Table(FindLibPgm('PGMNAME')) x;
Anstatt PGMNAME kann natürlich auch eine (Host-)Variable eingesetzt werden.
Birgitta
-
Hallo Birgitta,
wollte natürlich das gleich einmal aus probieren. Beim Erstellen der Funktion kann erst eine Meldung, das er mit "LENGTH" nichts anfangen kann. Also habe ich den Code etwas abgewandelt.
PHP-Code:
Declare CLCmd VarChar(256) Not Null Default '';
Declare CLCmdL DEC(15, 5) Not Null Default 0,0;
Set CLCmd = 'DSPOBJD OBJ(*ALL/' concat Trim(ParPGM) concat ') '
Concat ' OBJTYPE(*PGM) '
Concat ' OUTPUT(*OUTFILE) '
Concat ' OUTFILE(QTEMP/TMPOBJD) '
Concat ' OUTMBR(*FIRST *REPLACE) ';
Set CLCmdL = Length(CLCmd);
Call QCMDEXC(CLCmd, CLCmd);
Return Select ODLBNM, ODOBNM, ODOBTX
From QTEMP/TMPOBJD;
End
Damit konnte ich die Funktion erstellen. Führe ich den SELECT aus kommt
"Abfrage kann nicht ausgeführt werden".
Und eine Ebene tiffer in der Meldung
"Zeichen in CAST-Argument ungültig"
Hast du eventuell noch einmal Zeit dir diese Function anzuschauen?
Gruß
Ronald
Similar Threads
-
By FNeurieser in forum NEWSboard Programmierung
Antworten: 16
Letzter Beitrag: 14-02-13, 18:59
-
By GreatEMU in forum NEWSboard Programmierung
Antworten: 10
Letzter Beitrag: 29-03-07, 10:39
-
By ulbrecht in forum NEWSboard Programmierung
Antworten: 7
Letzter Beitrag: 06-12-06, 17:06
-
By Weki in forum NEWSboard Server Software
Antworten: 6
Letzter Beitrag: 29-08-06, 09:09
-
By JonnyRico in forum NEWSboard Programmierung
Antworten: 14
Letzter Beitrag: 30-03-06, 12:33
Berechtigungen
- Neue Themen erstellen: Nein
- Themen beantworten: Nein
- You may not post attachments
- You may not edit your posts
-
Foren-Regeln
|
Erweiterte Foren Suche
Google Foren Suche
Forum & Artikel Update eMail
AS/400 / IBM i
Server Expert Gruppen
Unternehmens IT
|
Kategorien online Artikel
- Big Data, Analytics, BI, MIS
- Cloud, Social Media, Devices
- DMS, Archivierung, Druck
- ERP + Add-ons, Business Software
- Hochverfügbarkeit
- Human Resources, Personal
- IBM Announcements
- IT-Karikaturen
- Leitartikel
- Load`n`go
- Messen, Veranstaltungen
- NEWSolutions Dossiers
- Programmierung
- Security
- Software Development + Change Mgmt.
- Solutions & Provider
- Speicher – Storage
- Strategische Berichte
- Systemmanagement
- Tools, Hot-Tips
Auf dem Laufenden bleiben
|
Bookmarks