PDA

View Full Version : aktuellen AS400 User in eine variable schreiben in einem RPG Programm



Seiten : [1] 2

PFR
03-07-14, 08:20
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

B.Hauser
03-07-14, 08:29
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

B.Hauser
03-07-14, 08:40
Yep! Knap daneben ist auch vorbei!
Korrigiert!

Birgitta

Fuerchau
03-07-14, 08:41
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"

Fuerchau
03-07-14, 08:47
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

B.Hauser
03-07-14, 08:58
@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

Fuerchau
03-07-14, 08:59
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.