-
API QWTRTVTA Codebeispiel
Hallo i5 Forum,
hat jemand ein Code Beispiel für die API QWTRTVTA?
Würde gern die IP-Adresse der PC-Sitzung ermitteln.
Viele Grüße
-
Hier gibt es ein Beispiel, aber nur nach Registration:
http://iprodeveloper.com/rpg-program...ion-using-apis
-
Vor Jahren gab es hier mal ein GETIPADR
QCLSRC GETIPADR
PHP-Code:
PGM PARM(&DEVD)
DCL VAR(&RCV) TYPE(*CHAR) LEN(893) /**/
DCL VAR(&RCVLEN) TYPE(*CHAR) LEN(4) /**/
DCL VAR(&RCVLEND) TYPE(*DEC) LEN(9) /**/
DCL VAR(&ERR) TYPE(*CHAR) LEN(100) /**/
DCL VAR(&DEVD) TYPE(*CHAR) LEN(10) /**/
DCL VAR(&FRMDEV) TYPE(*CHAR) LEN(8) +
VALUE('DEVD0600') /**/
DCL VAR(&IP) TYPE(*CHAR) LEN(15) /**/
IF COND(&DEVD *EQ '*') THEN(DO)
RTVJOBA JOB(&DEVD)
ENDDO
CHGVAR VAR(&RCVLEND) VALUE(893)
CHGVAR VAR(%BIN(&RCVLEN)) VALUE(&RCVLEND)
CALL PGM(QDCRDEVD) PARM(&RCV &RCVLEN &FRMDEV +
&DEVD &ERR)
CHGVAR VAR(&IP) VALUE(%SST(&RCV 878 15))
SNDPGMMSG MSG(&IP)
ENDPGM
QCMDSRC GETIPADR
PHP-Code:
CMD PROMPT('GET IP ADDRESS')
PARM KWD(JOBNAME) TYPE(*CHAR) LEN(10) DFT(*) +
MIN(0) PROMPT('JOB - NAME')
QRPGLESRC GETIP
PHP-Code:
H DFTACTGRP(*NO) BNDDIR('QC2LE')
D GetIpAdr PR 20a
D Device 10a CONST
*
D I_Net_Adr S 16a
*
D SDS
D sds_zeit80 282 289 0 Datum für GRPPDP
D Device 244 253
*---------------------------------------------------------
* Retrieve IP Address
C Eval I_Net_Adr = GetIpAdr(Device)
C Eval I_Net_Adr = %trim(I_Net_Adr)
C I_Net_Adr Dsply
C Eval *Inlr = *On
* RtvIpAdr - Subprocedure To Get IP Address
*---------------------------------------------------------
P GetIpAdr B Export
D GetIpAdr PI 20A
D Inp_Device 10A Const
D Apierr DS
D Bytprv 1 4B 0 Inz(216)
D Bytavl 5 8B 0 Inz
D Errorid 9 15A Inz
D Reserved 16 16A Inz
D ErrorDesc 17 216A Inz
D Net_Address S 20A INZ
D Format S 8A Inz('DEVD0600')
D Rcvar S 5000A Inz
D Varlen S 4B 0 Inz(5000)
C Eval Device = Inp_Device
C Call 'QDCRDEVD'
C Parm Rcvar
C Parm Varlen
C Parm Format
C Parm Device
C Parm Apierr
C If BytAvl = 0
C Eval Net_Address = %Subst(Rcvar:877:16)
C Endif
C Return Net_Address
P GetIpAdr E
Gruß
Ronald
-
Je nach Release geht das auch mit einem 1-Zeiler in SQL:
Code:
Exec Sql Select v_client_ip_address into :Host_Var from table(QSYS2.GET_JOB_INFO('*')) t;
oder
Code:
Exec Sql set :host_var = SYSIBM.client_ipaddr;
lg Andreas
-
Nicht, dass da dann wieder eine JVM gestartet wird.
-
Zitat von Fuerchau
Nicht, dass da dann wieder eine JVM gestartet wird.
... diese Befürchtung ist unbegründet, das sind (derzeit) nur die http bezogenen Funktionen. Allerdings frage ich mich generell, was das alles mit Datenbank zu tun hat und meine Nackenhaare kräuseln sich da aus Designgründen...
D*B
-
Man sollte sich das Leben nicht unnötig schwer machen.
Wenn ich aus Designgründen einen ganzen API Aufruf gegen einen 1-Zeiler vorziehe kräuseln sich mir da eher die Nackenhaare ;-)
-
Der Hintergrund hierzu ist der "system i director?" oder so ähnlich.
Dieser löst ja den iSeries Navigator ab.
Da dieser neue Director wohl nicht so einfach wie früher mit API's umgeht bzw. umgehen will, hat die IBM sich da SQL-Prozeduren/Funktionen überlegt um sich das Leben zu vereinfachen, nur eine zentrale Schnittstelle, nämlich SQL.
Zusätzlich halt mit dem Nebeneffekt, dass diese SQL-API-Aufrufe der Allgemeinheit zur Verfügung gestellt werden und somit eine z.T. doch komplexe API-Programmierung entfallen kann.
Warum auch nicht?
-
... von wegen 1-Zeiler, das ist ja nur die halbe Wahrheit. Man muss eine weitere Programmiersprache, SQL, in Aktion bringen und benutzt Komponenten mit ungeklärtem Status. So heißt es zum Beispiel in IBM Materialien über die SYSTOOLS: "they are not subject to IBM service and support." (die alten Hasen fühlen sich an TAATOOLS erinnert - die war dann plötzlich weg).
Die APIs sind dokumentierte Schnittstellen, mit dokumentiertem Verhalten und werden als Bestandteil des Betriebssystems in ihrer Funktion unverändert am laufen gehalten und wenn man die geforderte Fuktion (ermitteln client IP Adresse) einmal gebaut hat, kann sie als echter Einzeiler aus allen ILE kompatiblen Kontexten aufgerufen werden.
D*B
-
Da wird ja wieder einiges durcheinander gebracht.
1. In meinem Beispiel wird die QSYS2 oder SYSIBM benützt, nicht SYSTOOLS.
2. APIs sollen angeblich unverändert bleiben?? Das halte ich für ein Gerücht.
Beim Umstieg auf 7.3 wurde ein API für Socket-Verbindung UNDOKUMENTIERT geändert.
Die Doku beinhaltet zwar die aktuellen Parameter, aber dass sich da was bei diesem API geändert hat wirst du nicht mal finden wenn du ganz speziell danach suchst.
Und nein, das war bis jetzt nicht das einzige mal das soetwas passiert ist. Kommt aber zum Glück sehr selten vor.
3. Ja klar, man kann alle Zeilen Code irgendwo verpacken um sie als 1-Zeiler aufrufen zu können. Ich erspare mir aber auch gern die x-Zeilen Code irgendwohin zu verpacken.
-
Was die API-Veränderungen angeht, so betrachtet die IBM das wohl eher als Fehlerbehebung.
Nach dem Motto: Ein Bug ist ein Feature, allerdings nicht für die Ewigkeit.
-
... die Releaseprobleme, die ich mit APIs kenne, hängen eher mit falscher Bedienung zusammen (feste Position statt Offset verwendet), oder da hat jemand "inoffizielle" Schnittstellen verwendet, die dann aus Security-Gründen dichtgemacht wurden, oder den Unterschied zwischen Command processing Programms und APIs nicht verstanden...
Tags for this Thread
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