View Full Version : Who is calling
woodstock99
23-07-13, 16:39
Hallo zusammen,
gibt es irgend ein API oder eine andere Möglichkeit mit der ich rausfinden kann in welchen Programmen eine bestimme Prozedur verwendet wird ? Oder auch andersrum. Eine Liste mit den Prozeduren die ein bestimmtes Programm verwendet ?
Bei fertigen Programmen geht das leider nicht mehr, da externe Referenzen aufgelöst sind.
Wenn du die einzelnen Module noch hast (was mit PDM-14 nicht der Fall ist) kannst du die Informationen mit folgendem API auslesen:
List Module Information (QBNLMODI) API (http://pic.dhe.ibm.com/infocenter/iseries/v7r1m0/topic/apis/qbnlmodi.htm?resultof=%22%61%70%69%22%20%22%64%73% 70%6d%6f%64%22%20)
Hier bekommst du die referenzierten und exportierten Prozeduren/Variablen.
Prototyp-Calls auf OPM-Programme (EXTPGM) können so nicht ermittelt werden, die erhältst du weiterhin per DSPPGMREF.
Hallo,
eine Liste auf Prozedur-Ebene kann ich leider nicht bieten. Aber was ich gelegentlich verwende, ist das Tool ANZILEPGM. Damit erhält man 2 Listen bzw. Dateien. Eine Liste mit Programmen und die darin verwendeten Service-Programme. Und eine Liste mit Programmen und die darin verwendeten Module.
Vielleicht hilft Dir das ja schon mal weiter. Einfach mal googlen.
Gruß,
KM
woodstock99
24-07-13, 09:46
hallo zusammen,
danke für die antworten. hmmm, hab ich mir schon gedacht, dass das nicht mehr geht.
das mit den modul und serviceprogramm listen habe ich auch gefunden aber das bringt mir in diesem zusammenhang auch nichts mehr . aber trotzdem vielen dank für eure hilfe . wie immer bekommt man hier sehr schnell und sehr gute infos .
gruss woody
Wenn die Quellen der Programme noch vorliegen, kannst du die ja mit PDM-15 erstellen, also nur die Module.
Dann hast du die Infos ja.
Sofern Dir der Source Code vorliegt, kannst Du ja vielleicht auch mit dem CL-Befehl FNDSTRPDM einfach die Quellen nach dem Procedure-Namen durchsuchen. (Oder über die RDi - Suchfunktion scannen).
Ich weiß ja nicht wofür Du das Ganze benötigst.
Birgitta
Bei fertigen Programmen geht das leider nicht mehr, da externe Referenzen aufgelöst sind.
Wenn du die einzelnen Module noch hast (was mit PDM-14 nicht der Fall ist) kannst du die Informationen mit folgendem API auslesen:
List Module Information (QBNLMODI) API (http://pic.dhe.ibm.com/infocenter/iseries/v7r1m0/topic/apis/qbnlmodi.htm?resultof=%22%61%70%69%22%20%22%64%73% 70%6d%6f%64%22%20)
Hier bekommst du die referenzierten und exportierten Prozeduren/Variablen.
Prototyp-Calls auf OPM-Programme (EXTPGM) können so nicht ermittelt werden, die erhältst du weiterhin per DSPPGMREF.
... die Module Informationen helfen nix, wenn man keine eindeutigen Exportnamen hat (weshalb ich solche immer dringendst empfehle - aber es gibt immer Leute, die Probleme haben wollen, die man nicht haben muss!!!).
In solchen Fällen bleibt nur der blutige Weg, sich die Informationen per API von oben runter zu holen (was ist in dem Programm gebunden, wer liefert die passenden Exporte etc.). Programm(e) neu erstellen hilft hier meist nix, weil das ja genau das ist, was einem ja mit dem einen großen BNDDIR (wie von vielen sogenannten Experten empfohlen) gerade nicht mehr korrekt gelingt.
D*B
woodstock99
24-07-13, 11:23
Ziel sollte sein das wir z.b. ein Liste/Datei erstellen könnten mit folgendem inhalt
PGMA ruft EXT-PROZEDUR a,b,c,e,f,g auf
PGMB ruft EXT-PROZEDUR, aa,b,cc,f,hh auf
usw usw.
Warum wir das brauchen würden liegt an der , hmmm ich nenne sie mal gewachsenen Programmierung durch X User und jeder kocht sein eigenes Süppchen, Programmierung. Und noch ein paar Gründe mehr .
@bender.
Diese Infos kann ich mir doch auch nicht von "oben herab holen" oder??.
Die Modullisten, wie du schon sagtest, usw bringen mir nix weil die nur darstellen welche Prozeduren sie verwenden .
...
DSPMOD DETAIL(*IMPORT) OUTPUT(*OUTFILE) ...
DSPMOD DETAIL(*EXPORT) OUTPUT(*OUTFILE) ...
erstellt 2 Dateien, die man mit SQL zu Cross Referenz Zwecken auswerten kann.
Das bringt aber nix, wenn Exportnamen nicht eindeutig sind!!!
Dann braucht man zusätzlich Informationen welche Module in welchen Programmen/Service Programmen enthalten sind - und zwar von oben nach unten aufgelöst.
Ganz einfach wird das, wenn man:
immer nur ein Modul pro Programm oder Serviceprogramm hat und Name des Programms/SRVProgramms = Modulname wählt und alle exportierten Prozeduren im Prototyp mit dem Namen des Moduls als Prefix renamed.
D*B
Vielleicht hilft dir dieses API ja weiter:
Retrieve Program Interface Information (QBNRPII) API (http://pic.dhe.ibm.com/infocenter/iseries/v7r1m0/topic/apis/qbnrpii.htm)
Scheint aber sehr komplex zu sein!