ログの目的で SYSUID と JOBID を COBOL プログラムに渡す必要があります。これはどのように可能ですか?
JCL でクエリの入力として同じものを渡すことができます。
前もって感謝します。
SYSUID は単純で、 EXECステートメントのPARMパラメータに追加するだけです。
//ASTEP EXEC PGM=A#PGM,PARM='&SYSUID'
JOBID はパラメーターとして使用できません。必要に応じて、z/OS制御ブロックを介して連鎖する COBOL コードを作成する必要があります (そのリンクにあるデータ域の本を参照してください)。これは実行できますが、お勧めしません。
実際にジョブ番号を取得したい場合は、相対メモリ位置 0 にある PSA 制御ブロックに移動するコードを記述します。そこから、PSA の PSATOLD フィールドにある現在の TCB へのポインタを取得します。 TCB から JSCB へのポインターである TCBJSCBB フィールドを取得し、JSCB の TCBJSCBB フィールドから、ジョブ番号である SSIBJBID フィールドを含む SSIB へのポインターを取得します。これらの制御ブロック、PSA、TCB、JSCB、および SSIB はすべて、上記のリンクで文書化されています (z/OS 2.4 の場合)。そして、これを行うことはお勧めしません。
z/OS 制御ブロックの連鎖に関するチュートリアルが、Longpela から2 つ のパートに分かれています。
@cschneidに同意します。ジョブ番号を取得するためだけに、すべてのポインターチェーンを実行したくないということです。しかしもちろん、私たちは「バナーページ印刷」プログラムを作成しているときにそれを行いました。http://gsf-soft.com/Freeware/COB2JOB.shtmlのコードに基づいています。
LINKAGE SECTION での SET ADDRESS OF 項目、REDEFINE-ing POINTER および COMP-5 項目の使用、およびアセンブラー DSECT からの 01 レベルの構造体の作成に慣れている場合は、ぜひ使用してください。軽量の COBOL サブルーチンとして、アセンブラー ルーチンよりオーバーヘッドはそれほど多くありません (ただし、アセンブラーの方が優れています)。REXX STORAGE 機能に慣れている場合は、Dave Alcock の IPLINFO プログラムを見ることができます。
ただし、私が言及した COBOL 言語構造が不明な場合は、アセンブラー サブルーチンを作成するか、誰かに作成を依頼してください。