PTF の作成 (マネージメント・セントラル プロダクト機能)

プロダクト機能では、ライセンスプログラムと同じように個別の修正を PTF として作成することができます。

PTF として作成できる、ということのよいことは大きく 2つあると思います。

まず第一はやはり個別にそれが修正されているかどうか、トラッキングできる、ということでしょう。
もうひとつは、その修正に問題があった場合にはずすことができる、ということだと思います。(「はずすことができる」ということはそのようなコーディングをする必要がある、ということですが)

しかし、ただ適当にプログラムを書いて PTF と登録すればいい、というものではありません。
決まった書き方をする必要があります。
そのあたりも含めて、どういった機能なのか、見ていきましょう。


PTF 処理プログラムの作成

PTF を作成する場合はまず最初にプログラムを作成する必要があります。

今回考えた修正は GO CMDSMB コマンド表示されるメニューにヘルプを追加する、というものです。
SDA を使って簡単なヘルプを追加して、メニューをコンパイルし直しました。

PTF の基本的な構造としては、ちょうどパッケージのように何かを復元/送信する、ということとそのタイミングでプログラムを実行する、という 2つのことの組み合わせになります。処理自体はかなり自由に書くことができます。

今回はコンパイルしたメニューとそのソースを復元/送信して、入れ替える、といった処理になっています。

若干面倒なのは PTF なのではずすことができなくてはなりません。
そこでいったん現状のものを保管しておいて、PTF をはずす、というオペレーションの時はそこからもどす、というようにしています。

こちらが復元/送信する保管ファイルです。

こちらが処理を行うプログラムです。

まず、最初の 9つの引数でプロダクト ID、PTF 番号、その他状況などを判断します。

PGM PARM(&PRODID &PTFID &VRM &OPTION &LOAD &LIB &USRDTA &STS &OPCODE)

/* REQUIRED PARMS FOR PTF EXIT PGM FOR INPUT */
DCL VAR(&PRODID) TYPE(*CHAR) LEN(7)
DCL VAR(&PTFID) TYPE(*CHAR) LEN(7)
DCL VAR(&VRM) TYPE(*CHAR) LEN(6)
DCL VAR(&OPTION) TYPE(*CHAR) LEN(4)
DCL VAR(&LOAD) TYPE(*CHAR) LEN(4)
DCL VAR(&LIB ) TYPE(*CHAR) LEN(10)
DCL VAR(&USRDTA) TYPE(*CHAR) LEN(50)
DCL VAR(&STS) TYPE(*CHAR) LEN(1)
DCL VAR(&OPCODE) TYPE(*CHAR) LEN(1)
/* END OF REQUIRED PARMS FOR PTF EXIT PGM FOR INPUT */

DCL VAR(&FILE ) TYPE(*CHAR) LEN(10)
MONMSG MSGID(CPF0000) EXEC(GOTO CMDLBL(ERREXIT))

IF COND(&OPCODE *EQ '1') THEN(DO)
/* OPERATION IS APPLY (INSTALL) */

CHKOBJ OBJ(&LIB/CRTMNUPTF) OBJTYPE(*FILE)
MONMSG MSGID(CPF9801) EXEC(DO)
CRTSAVF FILE(&LIB/CRTMNUPTF)
SAVOBJ OBJ(CMDSMB) LIB(&LIB) DEV(*SAVF) SAVF(&LIB/CRTMNUPTF)
ENDDO

DLTF FILE(QTEMP/QMENUSRC)
MONMSG MSGID(CPF2105)
RSTOBJ OBJ(QMNUSRC) SAVLIB(SMBCMD) DEV(*SAVF) OBJTYPE(*FILE) SAVF(&LIB/MENUSRC) RSTLIB(QTEMP)
RSTOBJ OBJ(CMDSMB) SAVLIB(SMBCMD) DEV(*SAVF) SAVF(&LIB/MENUSRC) MBROPT(*ALL) ALWOBJDIF(*ALL) RSTLIB(&LIB)
CHGOBJOWN OBJ(&LIB/CMDSMB) OBJTYPE(*MSGF) NEWOWN(QSECOFR)
CHGOBJOWN OBJ(&LIB/CMDSMB) OBJTYPE(*FILE) NEWOWN(QSECOFR)
CHGOBJOWN OBJ(&LIB/CMDSMB) OBJTYPE(*MENU) NEWOWN(QSECOFR)
RMVM FILE(&LIB/QMNUSRC) MBR(CMDSMBOLD)
MONMSG MSGID(CPF5815)
RNMM FILE(&LIB/QMNUSRC) MBR(CMDSMB) NEWMBR(CMDSMBOLD)
CPYSRCF FROMFILE(QTEMP/QMNUSRC) TOFILE(&LIB/QMNUSRC) FROMMBR(CMDSMB)

DLTF FILE(&LIB/MENUSRC)
MONMSG MSGID(CPF2105)
GOTO CMDLBL(EXIT)
ENDDO

IF COND(&OPCODE *EQ '0') THEN(DO)
/* OPERATION IS RMV (UNINSTALL) */

RSTOBJ OBJ(CMDSMB) SAVLIB(&LIB) DEV(*SAVF) SAVF(&LIB/CRTMNUPTF)
DLTF FILE(&LIB/CRTMNUPTF)
MONMSG MSGID(CPF2105)
GOTO CMDLBL(EXIT)
ENDDO

ERREXIT: SNDPGMMSG MSGID(CPF3639) MSGF(QCPFMSG) MSGTYPE(*ESCAPE)
MONMSG MSGID(CPF0000)
EXIT: ENDPGM

オペレーションコードは以下のようになっています。
この状況に応じて処理を考える必要があるわけですね。

0 Remove temporarily
1 Apply temporarily
2 Apply permanently
3 Remove permanently
4 Pre-remove temporarily
5 Pre-apply temporarily
6 Pre-apply permanently
7 Pre-remove permanently

詳しくは Information Center の該当ページを見てください。
サンプル・プログラムも載っています。

修正の導入(生成と適用)

PTF も定義の作成と「インストール」を行います。

PTF の生成

プロダクト定義を選択して、右クリックメニューから「修正の生成」を選択します。

こんな画面になります。

一番上の「修正」はいわゆる PTF 番号にあたります。
適当に重複しないものを指定します。

ここの「組み込むオブジェクト」に復元/送信するもの、今回の場合で言えば保管ファイルを指定します。
PTF のプログラムは指定しないでください。「出口プログラム」ボタンを押して指定します。

「出口プログラム」ボタンを押すと、プロダクトの時の出口プログラムの指定とは違って、「参照」ボタンでシステム上を検索に行くことができます。
以下のように選択してください。

上の画面で「OK」を押すとこんな画面です。

元の「修正の生成」画面で「OK」ボタンを押すと PTF の生成が始まります。
プロダクトのインストールの時と同様にこの「修正の生成」も QSYSWRK の中の QYPSPRC から依頼されて QUSRWRK の中の QZRCSRVS ジョブで実際の処理は行われます。

PTF のインストール

PTF が生成できたところで今度はそれを適用してみましょう。

プロダクトの定義を選んで、右クリックメニューから「修正」を実行します。

こんなふうに現在定義されている修正がリストされます。

適当したい修正を選んで、右クリックメニューから「インストール」を実行します。

修正の導入用のウィザードが始まります。

「送信およびインストール」の方ではないので、現在のローカルなシステムへの導入になります。

PTF の確認です。

PTF を適用するタイミングです。

最後の確認画面です。
「完了」を押して実行しましょう。

サーバー上で起きていること

「完了」ボタンを押すと QSYSWRK サブシステムで QYPSPTF というジョブが動きます。

こんな処理を行っています。
そのまんま LODPTF、APYPTF をやっていることがわかりますね。

確認

適用が終わったあと、5250 画面から DSPPTF コマンドで見てみると「一時的に適用」になっています。

「5. PTF の明細の表示」を見てみましょう。

「修正インベントリー」では「インストール済み」になっています。いわゆる「一時適用」と同じ状態になるようです。

PTF のアンインストール

この修正は以下のように「アンインストール」を使用してはずすことができます。
(5250 からの RMVPTF ではうまくいきませんでした)

やはりこれもウィザードです。

適用の時と同じような画面展開ですね。

RMVPTF で言えば *TEMP か *PERM かの違いです。

アンインストールのタイミングですね。

確認画面です。
「完了」で実際の処理が始まります。

これもやはり「インストール」の時と同様に QSYSWRK サブシステムの QYPSPTF ジョブが動いて処理を行います。

送信およびインストール

他システムに修正を送る時は「送信およびインストール」または「送信」してから「インストール」を使います

送信およびインストール

以下のように送信した修正を選んで、右クリックメニューから「送信およびインストール」を実行します。

修正の送信のウィザードが始まります。

送信する修正の確認ですね。

送信先の指定です。

「参照」ボタンでシステムを選択します。

「拡張送信オプション」ボタンで前提 PTF に対する処置を指定できます。

修正を適用するタイミングの指定です。

ここで「完了」ボタンを押すと送信およびインストールが開始されます。

特に詳しくは触れませんが、ローカルでの PTF のインストールの時と同様に、実際の処理はターゲット側サーバーの QYPSPTF ジョブが行います。

送信

「送信」しておいて後でインストールすることもできます。

送信先の指定をします。

送信時のオプションです。

その他

PTF の管理のしかた(たとえば削除のしかた)がよくわからない、PTF を開発/デバックするための何か便利なものはないのか、などよくわからないことがいっぱい実はあります。
これもみんなに使ってもらってこなれていくのを期待したいところですね ...

[Top Pageに戻る]

Ads by TOK2