リリース 5.0 PU5 から、Enterprise Server でシンボルをエクスポートして、それをインストリーム データで使用できるようになりました。また、内部読み取りプログラムを使用すれば、サブミットされるジョブにシンボルを渡すこともできます。ここで挙げる例は、SYMBOLS をどのように使用できるかを示しています。
ここで挙げる例は、本製品とともにインストールされる JCL - Symbols サンプルに基づいています。JCL - Symbols Mainframe Samples ブラウザーを参照してください。
MFJUXIT=[full path and name of the MFJUXIT compiled module]
これらのプログラムをコンパイルするには、次のコマンドを使用します。
cbllink -d CALLMFJZ.cbl -oCALLMFJZ.dll cbllink -d MFJUXIT.cbl -oLOADLIB\MFJUXIT.dll
データセット SYS1.PARMLIB(IEASYM00) でシステム全体のシンボルを定義できます。このデータセットはシステムの起動時に読み取られ、定義された値はその後 JCL ジョブで使用できます。
サンプル ジョブ INITSYS.JCL は、このデータセットを作成してシンボルと値を入力する方法を示しています。また、値を定義するサブストリングの使用方法も示します。
このデータセットはシステムの起動時に読み取られるため、後から追加した値は使用できません。環境変数 MFJ_RELOAD_IEASYM00=Y を設定することで、ジョブのサブミットごとにこのデータセットを強制的に再読み取りすることができます。
サンプル ジョブ SYMBOL6.JCL は、インストリーム データでシンボルを使用し、置換する方法を示しています。これは、静的システム シンボル SYSNAME (IEASYM00 で定義される) および動的シンボル SYSJOBNM、SYSJOBID、SYS_CORR_CURRJOB と、ジョブで定義およびエクスポートされるその他の JCL シンボルの使用方法を示します。
シンボルは、IEBGENER ステップ内の SYSUT1 のインストリーム データで使用され、そのステップの SYSUT2 データセットには置換された値が表示されます。
&SYS_JOB_NOTIFY には値が割り当てられていないため、出力ではそのまま表示されることに注意してください。SYSUT1 にはパラメーター SYMBOLS=(JCLONLY,MYLOG) があり、MYLOG データセットには、インストリーム データの各行の値の置換を示すメッセージが含まれます。
SYMBOL6 ジョブの 2 番目のステップである LISTSYMB は CALLMFJZ モジュールを呼び出します。このモジュールは、「IEFSJSYM」を呼び出してジョブのその時点で定義されているすべての JCL シンボルを一覧表示します。その後、値をステップの SYSOUT データセットに書き込みます。
CALLMFJZ.cbl は、IEFSJSYM によって返されたメモリ構造を解釈する方法を示しています。情報が処理されたら、割り当てられているメモリのブロックを解放するために、88-func-freemem 関数を使用して IEFSJSYM を呼び出すことが重要です。これをしないと、メモリ リークが発生し、最終的にシステム全体が停止する可能性があります。
内部読み取りプログラムを使用することにより、エクスポートされたシンボルを、サブミットされるジョブに渡すことができます。SYMBOL8.JCL は、INTRDR を使用して、あるジョブで定義されたシンボルを、そのジョブがサブミットするジョブに渡して使用する方法を示しています。SYMBOL8 は、ジョブ SYMBOL8B をサブミットします。サブミットされた SYMBOL8B は、親ジョブから定義されて渡されたシンボル値を使用します。
ジョブ相関子 (一意のジョブ参照 ID) はシステムによって生成され、シンボル値として使用 (SYMBOL6.JCL の SYS VALUE = &SYS_CORR_CURRJOB のように) できます 。ジョブ相関子は MJFUXIT ユーザー出口で受け取ることもできます。このユーザー出口では SYS_CORR_USERDATA も設定できます。
このデモンストレーションに含まれている MFJUXIT サンプル ユーザー出口は、event-job-stmt-info で、SYMBOL6 ジョブの SYS_CORR_USERDATA を「MY JOB USER DATA」に設定します。
ジョブの実行時、ユーザー出口は event-job-started でユーザー データ値を報告します。コンソール ログにエコーされた設定文をメッセージで確認できます。
JCLXM0000I J000**** SYMBOL6 Job Correlator = J0001029TST.....JES6DFEE255....: JCLXM0000I J000**** SYMBOL6 User Exit set correlator user data to MY JOB USER DATA
ジョブの実行後にその JESYSMSG を表示すると、これらの値がユーザー出口によって読み取られたことを報告するメッセージを確認できます。
JCLXM0000I Job Correlator = J0001029TST.....JES6DFEE255....: JCLXM0000I User Data is: MY JOB USER DATA
しかし、次の「制限事項」で説明するように、JES シンボル サービス IAZSYMBL は現在実装されていないため、これらの値をユーザー出口以外のユーザー プログラムで要求または設定することはできません。