View Full Version : aktuellen AS400 User in eine variable schreiben in einem RPG Programm
Hallo zusammen,
ich bin gerade dabei ein RPG zu schreiben, in dem ich den aktuell angemeldeten User abfragen will und anschließend an eine variable übergeben möchte!
kann mir jemand behilflich sein, wie ich diese Information abgefragt kriege im RPG.
Gruß
der Newbie
Der aktuelle User steht in der Programm-Status-Datenstruktur, die man in jedes Programm einbinden kann auf Position: 358
Birgitta
dschroeder
03-07-14, 08:30
Hallo,
in der Programm-Status Datenstruktur steht der User:
D ##PGMSTAT SDS PGM-Status-DS
D ##JOBUSER 254 263 Job User
D ##CURUSER 358 367 Current User
Nimm daraus den, den du brauchst. Wir verwenden fast immer den current user. Es gibt ja Jobs, die unter einem speziellen User, z.B QUSER laufen. Der interessiert meistens nicht. Mit dem Current User bekommst du den "echten" User.
Dieter
dschroeder
03-07-14, 08:35
Hallo Birgitta,
kleiner Tippfehler: Du meinst sicherlich Position 358.
Dieter
Yep! Knap daneben ist auch vorbei!
Korrigiert!
Birgitta
Dies ist nur die halbe Wahrheit!
In der SDS steht der Jobuser aus der JobId JobUser/JobName/JobNr.
Wird der User z.B. durch SQL (ins besonders bei ODBC-Job's) oder API QSYSETPH geändert betrifft dies nicht den Jobnamen.
Den tatsächlichen angemeldeten User erfährt man durch
a) RTVJOBA
b) API
c) SQL per "set :MyUser = current user"
Die Frage ist, wann die SDS aktualisiert wird.
Meines wissens nach nur beim Aufruf der *INZSR (die gibt's auch wenn man sie selber nicht verwendet).
Ändere ich den USER per SQL, wird die SDS aktualisiert?
Wenn ich das Programm mit *INLR = *OFF verlasse und das Programm wieder aufgerufen wird, ändert sich die SDS wenn der Current User sich geändert hat?
Hauptproblem ist die Wiederverwendung von JDBC/ODBC-Job's (QZDASOINIT) nach der Trennung eines Clients, wenn hier z.B. Triggerprogramme noch aktiv bleiben und bei der Verbindung mit dem nächsten Client wieder aufgerufen werden.
Ich nehme mal an, dass die SDS dann nicht aktualisiert ist.
Meine Erfahrung zeigt, dass nur per SQL/API der tatsächliche Current User aktuell ist.
S.Neinawaie
03-07-14, 08:48
Guten Morgen.
Es gibt auch noch die Möglichkeit eine 10A Variable mit Inz(*User) zu definieren - vielleicht weiß Fuerchau ob man sich auf diesen Wert verlassen kann.
http://www-01.ibm.com/support/knowledgecenter/api/content/ssw_ibm_i_71/rzasd/sc092508537.htm#dinz
Specifying INZ(*USER) intializes any character field or subfield to the name of the current user profile. Character fields must be at least 10 characters long. If the field is longer than 10 characters, the user name is left-justified in the field with blanks in the remainder.
LG,
Sam
@Baldur: Hast Du Dir die Antworten von Dieter und mir durchgelesen?!
Aus der SDS kann man den Current User ermitteln NICHT NUR den Job-User!
Wir arbeiten mit kleinen (CGI)Programmen und ändern den Benutzer (meist NICHT on the fly) und erhalten über die SDS den richtigen Current User (und nicht QTMHHTTP!).
Wenn's nicht reicht, so liefert SQL einige Special Registers über die man SESSION_USER, CURRENT_USER und SYSTEM_USER ermitteln und unterscheiden kann kann.
Birgitta
Kann ich nichts zu sagen, dies scheint eine der Neuerungen zu sein, das Handbuch sagt da nicht viel zu.
Allerdings würde ich das dann weniger in einer INZ verwenden (nur beim 1. Aufruf wird initialisiert) sondern in einem EVAL zur Laufzeit.
Vielleicht probierts ja mal einer aus und teilt das Ergebnis hier mit.