Ein Serverauftrag (z. B. eine Datenbankserverinstanz für ODBC/JDBC) wird unter einem Systembenutzerprofil ausgeführt. Bei gespeicherten Prozeduren ist der Systembenutzer normalerweise QUSER. Objekte, die in einem Job erstellt werden, gehören normalerweise dem Jobbenutzer.
Serveraufträge führen im Allgemeinen im Auftrag anderer Benutzer aus. Sie teilen dem Server-Job mit, welcher Benutzer beim Aufbau einer Verbindung ist. (Beachten Sie, dass ein bestimmter Serverjob während seiner Lebensdauer im Auftrag vieler verschiedener Benutzer funktionieren kann.)
Speziell für die gespoolte Ausgabe ist dies ein Problem, da das Spooling-Subsystem länger existiert als das "Web" "und bevor wir eine beträchtliche Anzahl von Benutzern hatten, die sich mit entfernten Datenbanken verbanden.Das Verhalten des Wechselns von Benutzer zu Benutzer ist einfach nicht Teil des Spooling-Subsystems, noch kann ein Anbieter wie IBM feststellen, wann eine Spool-Datei einem bestimmten Job-Benutzer oder Verbindungsbenutzer gehören sollte. (Spooling ist kein Hauptelement von Datenbankverbindungen.)
IBM hat die Ausgabe von Spooling für Benutzer angepasst, indem standardmäßig die Ausgabe von "Switched Users" in a job named QPRTJOB ausgegeben wurde, aber es passt nicht so wie gewünscht ein späteres RPG-Programm für die Ausgabe.
Wenn Sie jedoch einen gespeicherten Proc erstellen, der eine gespoolte Ausgabe generiert, kann der Proc auswählen, wem die Ausgabe gehört, und sich so dafür entscheiden, sie im selben Job zu behalten. Betrachten Sie diese Beispiel wird die Funktion ‚Run SQL Scripts‘ in die iSeries Navigator eingefügt werden kann:
call qsys2.qcmdexc ('OVRPRTF FILE(*PRTF) SPLFOWN(*JOB) OVRSCOPE(*JOB)' , 48);
call qsys2.qcmdexc ('DSPMSGD RANGE(CPF9899) MSGF(QCPFMSG) OUTPUT(*PRINT)' , 51);
call qsys2.qcmdexc ('DLTOVR FILE(*PRTF) LVL(*JOB)' , 28);
Wenn Sie sie als Set laufen, sie Ausgabe zeigt die Attribute der Nachrichtenbeschreibung für CPF9899 gespult erstellen. Wenn Sie anschließend überprüfen, sollten Sie feststellen, dass QUSER jetzt eine Spooldatei mit dem Namen QPMSGD besitzt und sich im QZDASOINIT-Job befindet, der Ihre Remote-Datenbankanforderungen verarbeitet. Ein RPG-Programm in diesem Job kann in diesem Fall die Spool-Datei "* LAST" leicht finden. Wenn Sie das erste und das letzte CALL löschen und jetzt nur das mittlere CALL ausführen, sollten Sie feststellen, dass Sie die nächste Spooldatei besitzen.
(QUSER ist die IBM Standard Wenn Ihr System ein anderes Benutzerprofil verwendet, Ersatz, dass der Benutzer für "QUSER"..)
Empfehlung:
Ihre SP Ändern eines entsprechenden OVRPRTF Befehl zur Ausgabe von vor dem Spoolen der Ausgabe, die Sie im Job erfassen müssen, und zum Ausgeben von DLTOVR, nachdem die Ausgabe generiert wurde.
Sie könnten Befehle ähnlich den hier gezeigten verwenden, um eine Testprozedur zu erstellen. Experimentieren Sie mit verschiedenen OVRSCOPE() Einstellungen und mit FILE (* PRTF) oder mit speziell benannten Dateien. Erstellen Sie außerdem Ausgaben vor und nach den Übersteuerungsbefehlen, um zu sehen, wie unterschiedlich sie sich verhalten.
Beachten Sie, dass der Serverjob möglicherweise einen anderen Benutzer behandelt, nachdem Ihr SP beendet wurde (oder ein anderer SP später im Job aufgerufen wird). Sie sollten also sicherstellen, dass DLTOVR ausgeführt wird. (Das ist ein Grund, es in der Nähe des OVRPRTF zu halten.)