印刷の編集

印刷の編集とは(追加オプション)

印刷の編集とはスプールを編集することによって
印刷機能そのものを編集する機能のことです。
つまりスプールをOn the Webでブラウザ表示してマウス操作によって
編集すれば次回からの印刷も編集したとおりに印刷される仕組みのことです。

これまでの他社製品の編集機能

(1) 印刷PGM → CSV → Windows上で修正
(2) 印刷PGM → CSV → Windowsで印刷

というようにCSV出力で印刷罫線や画像マージなどもすべて
Windows上でしかできませんでした。
そのため処理は複雑となりパフォーマンスも悪く
Windowsのバージョンに影響を受け続けます。
最大の問題点は操作が複雑になるという点です。
おまけにすべての印刷プログラムの編集が可能というわけではなく
編集するためにはこのような大規模な改造が必要となります。
これらはすべて開発メーカーの技術レベルが低いことに起因しています。

SpoolライターVer5.0の新しい印刷の編集

すべてはブラウザだけのシンプルな操作だけで
ユーザーが開発しているほとんどすべての適用業務の印刷を
編集することができます。
編集結果の適用も自動編集ジョブに任せれば
情報システム室での修正の手間はほとんどありません。

編集画面

On the Webのスプール一覧の中から選んで、 [ 編集] ボタンをクリックすると
次のようにスプールが編集用として表示されます。

■各部の呼称
OUTQツリービュー、編集ツール・バー、中央編集ペイン、フィールド情報
  • PRTFが外部記述ファイル(DDS)で CRTEXPRTF EDIT(*ADD)または EDIT(*REPLACE)
    編集用に作成したときのみフィールド情報が表示されます。
  • フィールド情報は ×ボタンを押すと最小化されて再び再表示することができます。
  • フィールド情報の行をクリックすれば編集ペインの該当する項目が反転して
    それが選択されたフィールドであることを示します。
    この機能によって印刷項目のフィールドを知ることができます。

拡張印刷ファイルの作成 (CRTEXPRTF) の考慮点

On the Webの編集画面には印刷設計のフィールド情報を表示することができます。
フィールド情報とは印刷項目のひとつひとつのフィールドが何であるかを示す情報です。
印刷の編集画面で印刷項目をクリックすると、対応するフィールド情報
反転して示されます。
逆にフィールド情報をクリックすると対応する印刷項目が反転して示されます。
このように印刷項目がどのようなフィールドであるのかを示すことによって、
印刷の編集のための理解を助けることができます。

フィールド情報の表示が不要な場合は、フィールド情報の右上の×ボタンで
いつでもフィールド情報を閉じることができます。

フィールド情報を表示するには

すべてのスプールのフィールド情報が表示されるわけではありません。
フィールド情報が表示されるのは

  • DDS外部記述による印刷ファイルが作成されている場合
  • 拡張印刷ファイルの作成(CRTEXPRTF)編集用に作成(EDIT)パラメータが指定されている場合

CRTEXPRTF には「編集用に作成(EDIT)」パラメータが追加されています。
このパラメータに *ADDまたは *REPLACEを指定すると編集データが作成されます。
編集データの中にはフィールド情報が含まれます。
このフィールド情報がOn the Webのフィールド情報として表示されます。

CRTEXPRTF FILE(QTROBJ/PGM007P) SRCFILE(QTRSRC/QPRTSRC) EDIT(*REPLACE) LVLCHK(*NO) AUT(*ALL)
[解説]

EDIT(*REPLACE)を指定してCRTEXPRTFで印刷ファイルを作成すると
編集データ(SPLUSRSYS/DSPPRTD)にメンバーPGM007Pとして追加されます。

CRTEXPRTFEDIT(*ADD)または EDIT(*REPLACE)が指示されるとDDSソース記述の中に
フィールド番号を透過で埋め込みます。
このフィールド番号は、編集データのフィールド記述の番号と一致しています。
したがってこのフィールド番号の埋め込みによって、印刷項目と編集データの関連づけが
行われてフィールド情報の表示を実現しています。

編集ツール・バー

背景色がの編集はPDF印刷においてのみ有効です。5577系プリンタには印刷されません。

ファイル この編集を保存する 今、行った編集データを保存します。
編集を行うと使用可能(ENABLE)になります。
編集 元に戻す 今、行った編集を元に戻します(UnDo)
やり直し 元に戻す(UnDo)で取り消した操作をもう一度実行します(ReDo)
編集をクリヤーする 編集データを除去します。
編集を初期化する 印刷ファイル(PRTF)に基づいて編集データを再作成します。
編集を初期化できるのは外部記述ファイル(DDS)に対する
スプールだけです。
削除 編集データを削除します。
表示 最初のページ 1ページ目に表示を戻します。
前のページ 前のページに表示を戻します。
次のページ 次のページに表示を進めます。
最後のページ 最後のページに表示を送ります。
拡大 表示を拡大します。
縮小 表示を縮小します。
幅に合わせる この画面サイズに印刷イメージが収まるように表示します。
ページに合わせる ページ全体がこの画面に収まるように表示します。
SI/SOを表示 漢字のシフト文字を表示します。
ブランク文字を表示 フィールドに含まれているブランク文字を表示します。
グリッド線を表示 行/列を表示する罫線を表示します。
挿入 画像 ファイル・ダイアログの中から画像を選択して挿入します。
OVERLAY書式 オーバーレイ書式を選択して挿入します。
罫線 直線 直線をマウスで描画します。
矩形 矩形をマウスで描画します。
文字 文字の大きさ 文字の拡大/縮小を指定します。
文字カラー 文字カラーを指定します。
設定 文字単位 行列単位 文字は行/列を単位として配置します。
1/1000ミリ単位 文字は1/1000ミリ単位で配置します。
ヘルプ この画面の操作方法 この画面の操作方法
オンライン・マニュアル SpoolライターVer5.0のヘルプを表示します。

画像の保管場所

[ 挿入] - [ 画像] および [ OVERLAY書式] によって
画像が保管されるのは IFS

/SPLUSRSYS/OVERLAYオーバーレイ書式画像
/SPLUSRSYS/PICTURE画像ファイル

です。
この保管場所を変更することはできません。

QUERY/400の印刷

QUERY適用業務プログラムによる印刷スプールも編集して、次回以降の編集結果のスプールに
編集データを適用して反映させることができます。

ただしQUERYによる印刷出力は IBM iに用意されているRUNQRYコマンドではなく
SpoolライターVer5.0で提供する RUNPRTQRY によって実行してください。

[例] RUNPRTQRYによるQUERY適用業務の実行

[解説]

RUNPRTQRY は QUERY 定義の印刷=*NO である以外は RUNQRY と同じです。
また出力OUTQが SPLUSRSYS/EDTOUTQ に指定されていますので
スプールがこのOUTQに投入されると、自動編集ジョブによって
スプールは編集されて再作成されます。

編集の対象外となるスプール

すべてのスプールが編集可能というわけではなく、編集の対象とはならない
スプールもあります。
ここではどのようなスプールが、編集の対象外となるのかを解説します。

編集の対象とならない理由

編集データを作成できないスプール

編集データはそのスプール固有の識別ができることが必要です。
編集データの固有の識別は

外部DDS印刷ファイルによる印刷スプールの場合
装置ファイルのライブラリー名が、QAPS, QGPLまたは QUSRSYSでない装置ファイル名が
記述されているスプールは、外部DDS印刷ファイルによるスプールと見なされます。
このとき装置ファイル名が編集データの識別名となります。
上記以外のスプール
上記以外のスプールは、プログラム内部記述によるスプールと見なされます。
このとき編集データの識別名は、スプールに登録されている
「ファイルをオープンしたプログラム名」となります。
ファイルをオープンしたプログラムとは、このスプールを出力したプログラムのことです。
プログラム名の登録のないスプールは、編集データを作成することができません。

印刷を再出力できないスプール

印刷の編集の目的は編集データを作成して、次回以降の印刷に編集データを適用して
編集を反映させることです。
しかし印刷スプールを再作成できないとわかっている場合は、編集すること自体が
意味を成しません。
従って印刷を再出力できないようなスプールの編集は拒否されます。

編集の対象外となるスプールとは

上記の説明にあるように

  • 編集データを作成できないスプール
  • 印刷を再出力できないスプール

では編集の対象外となります。
具体的な編集の対象外のスプールとは

i5/OSユーティリティが出力したスプール

i5/OSによる出力スプールは、内部記述出力によるスプールとして分類されますが
オープンしたプログラム名の登録がありません。
従って編集データを作成することができないので編集の対象外となります。

QUERY適用業務プログラムによる出力スプール

QUERY/400による出力スプールも、内部記述出力によるスプールとして分類されますが
オープンしたプログラム名の登録がありません。
従って編集データを作成することができないので編集の対象外となります。
ただし Spoolライターが提供する RUNPRTQRYコマンドで、QUERYを印刷出力すれば
編集可能となります。

他のIBM i から復元されたスプール

他のIBM i から復元されたスプールでは、実行のためのプログラムやライブラリーが
このIBM i には存在していないことになります。
この場合も印刷を再出力することができませんので、編集の対象外となります。

DDS外部記述ファイル名のソース・ファィル名の登録がない

スプールの装置ファイルのオブジェクトに対して、ソース・ファイル名の登録がない
スプールは処理の対象外となります。

最大記憶容量16MBを超えるスプール

PDF変換では16MB超のスプールも取扱い可能ですが、編集の対象としては除外しています。

*AFPDSのスプール

*AFPDSスプールはサポートしていません。*SCSスプールのみが処理の対象となります。

最初の3ページのみが編集の対象

スプールの最初の3ページのみが編集の対象となります。

実行環境ではスプールを編集することはできません

印刷の編集はあくまでも開発環境で行うことを前提としており
特にDDS外部記述ファイルから出力されるスプールの場合は
DDS外部記述ソース・ファイルを、編集機能が参照する場合がありますので
同じ IBM i 環境に生成の元になったソース・ライブラリーが
存在している必要があります。
印刷の編集は実行環境ではなく開発環境でご使用ください。

ただし 編集の適用は編集データさえ存在していれば実行環境でも
お使い戴くことができます。
編集データの実行環境への移行こちら をご覧ください。

スプールの属性(参考)

編集の対象として判断するためのスプールの属性を参考までに解説します。
スプールの属性が編集の対象か否か、どのように判断されているかを知ることができます。

印刷装置タイプ

このスプールのストリーム型式が *SCSかまたは*AFPDSであるかを示しています。
編集の対象となるのは*SCSだけです。*AFPDSは処理の対象ではありません。

装置ファイル

DDS外部記述ファイルでスプールが作成された場合は、ここにDDS外部記述ファイルの名前が
記録されています。
他のIBM i から復元されたスプールの場合は、DDS外部記述がこのIBM i には存在しない
ことがわかります。
DDS外部記述ファイルが存在しないのであれば、同じスプールを再出力することが
できませんので、編集しても無意味であり編集の対象とはなりません。
装置ファイル名は編集データの識別、つまり編集データのメンバー名として利用されます。
またたとえ装置ファイルが存在していたとしても、装置ファイルのソースの登録が
ない場合も編集の対象外となります。

ファイルをオープンしたプログラム

このスプールを出力したプログラム名です。
DDS外部記述ファイルでない、つまりプログラム内部記述出力によるスプールであれば
このプログラム名を編集データの識別、つまり編集データのメンバー名として利用されます。
i5/OSが出力したスプールやQUERYによる出力のスプールでは
ファイルをオープンしたプログラム名は空欄ですので
編集データを作成することができません。

ユーザー定義オブジェクト

RUNPRTQRYコマンドで実行して出力されたQUERYによるスプールには
この部分にQUERY適用業務プログラム名が登録されます。
オブジェクト・タイプとして*QRYDFNは認められませんので
*DTAARAがライブラリーに作成されて、オブジェクト・タイプにも *DTAARAが登録されます。
*DTAARAは削除しないでください。

編集

項目の移動

各印刷はマウスでクリックして選択して、ドラッグ&ドロップで移動させることができます。
通常は行/列単位で移動しますが、[設定]の[文字単位]の[1/1000ミリ単位]を選択すると
1/1000ミリ単位でも移動させることができます。
ただし1/1000ミリ単位の移動はPDF印刷のみでの印刷で、6677系プリンタでは
印刷できなくなってしまいます。
編集後も5577系プリンタで印刷させたい場合は行/列単位での移動にしてください。

項目の単位

複数の印刷項目がひとつの項目としての塊となっている場合がありますが、
これは印刷ファイル(PRTF)または内部記述印刷の指定です。
これらを分割することはできません。
あいだに空白文字(スペース)が入っている文字列が、ひとつの項目となっているのであれば
それは印刷プログラムでひとつの文字列として出力されるていることを示しています。
あいだに空白文字を含む文字列であってもそれはひとつの文字列として
扱われ分割して移動することはできません。

罫線

罫線は縦および横方向が同時に定義されている場合であっても
それぞれ縦または横方向の線分として移動対象となっています。
同じ方向で連続した罫線はひとつの罫線として扱われます。
ひとつの罫線を分割することはできません。

画像およびオーバーレイ書式

画像およびオーバーレイ書式をファイル・ダイアログを開いて挿入することができます。
オーバーレイ書式とは印刷の背景となるイメージ画像です。
プレプリントしている専用用紙は複合機でスキャンして画像にすれば
オーバーレイ書式として使うことができ、専用用紙を廃止することができます。
複写して印刷している用紙であっても一度の印刷だけで複製のスプールを
作ることもできます。
オーバーレイ書式は挿入した後でも、左上のをドラッグすることによって
書式全体を移動して調整することができます。

画像もオーバーレイ書式も選択して挿入するだけでIFSにアップロードされますので
FTPなどのアップロード操作は必要ありません。
画像は /SPOOLWTR/PICTURE にオーバーレイ書式は /SPOOLWTR/OVERLAY に
保管されます。日本語の名前のファイルも保管することができます。

編集ログ

編集の履歴は編集ログとして記録されてスプールに印刷出力されています。
編集ログはOUTQ : SPOOLWTR/QEZJOBLOG に出力されています。
GO SPOOLWTR/SERVERメニューの「3. ジョブ・ログの表示によって
参照することができます。

[例] 編集ログの例
      
 21/03/27 作成                              編集データ更新ログ                                             PAGE
 ジョブ SPOOLW_EGN ユーザー QTMHHTTP   番号 878167                                                                             
 印刷ファイル PGM007P    ライブラリー QTROBJ                            編集データ : SPLUSRSYS/DSPPRTD(PGM007P)   
--------------------------------------------------------------------------------------------------------------
                                               T  D                                                                            
 メッセージ                                    Y  E                                                                            
* 保守 * FLDNO     RECORD        FLD R_ FLDLEN P  C  行      ACTLIN    列     ACTCOL                                           
---------------------------------------------------------------------------------------------------------------
* 変更 *  0001 PRTHEAD                                       3.000   1       7.000                                             
'PGM007'                                                                                                                       
EDTSPL SPLF(PGM007P) JOB(876483/QTR/QPADEV000S) SPLNO(3) INOUT(*OUT) DEBUG(*NO) DLTSPL(*NO)                                    
 スプールを編集しました。                                                                                                           

編集の保管

編集後は [ファイル] - [この編集を保存する]を選択して変更した印刷の編集を保存してください。

編集データはライブラリー: SPLUSRSYSファイル: DSPPRTD の固有のメンバーとして保管されます。
保管した編集データの内容はWRKEDTDTAコマンドによって参照することができますが
特に内容について知っておいたり学習する必要はありません。

編集後の再表示

編集データを保存しても元のスプールは直ちに変更されるわけではありません。
スプールは保存した編集データを適用して、新しいスプールとして再作成されて
初めて編集の結果が生かされたスプールとなります。
しかし編集データをいったん保存してからOn the Webでもう一度編集の元になった
スプールを再表示すると、あたかもスプールが変更されたかのように
編集後のスプールとして表示されます。
これは編集結果がどのように反映されるのかを知るために
意図的に編集を反映したスプールとして表示しているのですが、
実際のスプールが変更されているわけではありません。

編集のジョブ・ログ

編集のログはSpoolライターのジョブ・ログに出力されますので
障害の原因調査や追跡にご利用ください。

GO SPOOLWTR/SERVER + [実行] によってサーバー管理メニューが次のように
表示されます。

サーバー管理メニュー画面

[解説]

オプション「3. ジョブ・ログの表示」を選択するとジョブ・ログを表示することができます。

[例]

スプール・ファイルの表示

[解説]

ジョブ・ログはエラーが発生したときや、編集データを保管したときに出力されます。

編集の適用

編集データを印刷スプールに適用すると新しい印刷スプールを作成することができます。
これを編集の適用と呼びます。

編集の適用図

編集の適用方法には次の2種類の方法のどちらかで適用することができます。

1. CVTSPLF で EDTOUT(*YES)パラメータを指定する

ユーザーの印刷プログラムCLPの最後に CVTSPLFEDTOUT(*YES)で追加します。

[例] PGM007CL (QTRSRC/QCLSRC.PGM007CL )
0001.00              PGM        PARM(&SHFROM &SHEND &EDTOPT &OUTPUT)                        
0002.00 /*-------------------------------------------------------------------*/             
0003.00 /*   PGM007CL :   商品マスター一覧表                                 */             
0004.00 /*                                                                   */             
0005.00 /*   この CLP:PGM007CL はコマンド PGM007 から呼び出されて            */             
0006.00 /*   実行されます。                                                  */             
0007.00 /*                                                                   */             
0008.00 /*   2021/02/20  作成                                                */             
0009.00 /*                                                                   */             
0010.00 /*-------------------------------------------------------------------*/             
0011.00              DCL        VAR(&SPLF) TYPE(*CHAR) LEN(10) VALUE('PGM007P')             
0012.00              DCL        VAR(&SHFROM) TYPE(*CHAR) LEN(10)                            
0013.00              DCL        VAR(&SHEND) TYPE(*CHAR) LEN(10)                             
0014.00              DCL        VAR(&SHEND) TYPE(*CHAR) LEN(10)                             
0015.00              DCL        VAR(&EDTOPT) TYPE(*CHAR) LEN(4)                             
0016.00              DCL        VAR(&OUTPUT) TYPE(*CHAR) LEN(8)                             
0017.00              DCL        VAR(&OUTOPT) TYPE(*CHAR) LEN(8)                             
0018.00              DCL        VAR(&OPTION) TYPE(*CHAR) LEN(8)                             
0019.00              DCL        VAR(&JOB) TYPE(*CHAR) LEN(10)                               
0020.00              DCL        VAR(&USER) TYPE(*CHAR) LEN(10)                              
0021.00              DCL        VAR(&JOBNBR) TYPE(*CHAR) LEN(6)                             
0022.00              DCL        VAR(&MSG) TYPE(*CHAR) LEN(132)                              
0023.00              DCL        VAR(&MSGID) TYPE(*CHAR) LEN(7)                              
0024.00              DCL        VAR(&MSGF) TYPE(*CHAR) LEN(10)                     
0025.00              DCL        VAR(&MSGFLIB) TYPE(*CHAR) LEN(10)                  
0026.00              DCL        VAR(&MSGDTA) TYPE(*CHAR) LEN(132)                  
0027.00              DCL        VAR(&TYPE) TYPE(*CHAR) LEN(1)                      
0028.00              DCL        VAR(&TOMSGQ) TYPE(*CHAR) LEN(10)                   
0029.00            /*MONMSG     MSGID(CPF0000) EXEC(GOTO CMDLBL(ERROR))*/          
0030.00                                                                            
0031.00              RTVJOBA    JOB(&JOB) USER(&USER) NBR(&JOBNBR) TYPE(&TYPE)     
0032.00              IF         COND(&TYPE *EQ '0') THEN(DO) /*  バッチ  */        
0033.00              CHGVAR     VAR(&TOMSGQ) VALUE('*SYSOPR   ')                   
0034.00              ENDDO      /*  バッチ  */                                     
0035.00              ELSE       CMD(DO) /*  対話式  */                             
0036.00              CHGVAR     VAR(&TOMSGQ) VALUE('*TOPGMQ   ')                   
0037.00              ENDDO      /*  対話式  */                                     
0038.00                                                                            
0039.00              CHGJOB     STSMSG(*NORMAL)                                    
0040.00     /*( 作業進行中メッセージの表示 )*/                                     
0041.00              SNDPGMMSG  MSGID(CPF9897) MSGF(QSYS/QCPFMSG) +                
0042.00                           MSGDTA(' 商品一覧表を印刷中。 ') +               
0043.00                           TOPGMQ(*EXT) MSGTYPE(*STATUS)                    
0044.00 /*-------------------------------------------------------------*/          
0045.00 /*( 1 )  印刷プログラム PGM007 を呼び出して実行する            */          
0046.00 /*-------------------------------------------------------------*/          
0047.00              IF         COND((&OUTPUT *EQ '*') *OR (&EDTOPT *EQ +          
0048.00                           '*YES')) THEN(DO) /*  編集  */                      
0049.00              OVRPRTF    FILE(PGM007P) HOLD(*YES) LVLCHK(*NO) +                
0050.00                           OVRSCOPE(*JOB)                                      
0051.00              ENDDO      /*  編集  */                                          
0052.00              OVRDBF     FILE(SHOHINL1) TOFILE(QTRFIL/SHOHINL1) +              
0053.00                           SECURE(*YES) OVRSCOPE(*JOB)                         
0054.00              CALL       PGM(QTROBJ/PGM007) PARM(&SHFROM &SHEND)               
0055.00              DLTOVR     FILE(SHOHINL1) LVL(*JOB)                              
0056.00 /*--------------------------------------------------------------*/            
0057.00 /*( 2 ) OUTPUT=* または EDTOPT=*YES の場合は CVTSPLF で変換する */            
0058.00 /*--------------------------------------------------------------*/            
0059.00              IF         COND((&OUTPUT *EQ '*PDF') *OR (&EDTOPT *EQ +          
0060.00                           '*YES')) THEN(DO) /*  編集  */                      
0061.00              IF         COND(&OUTPUT *EQ '*PDF') THEN(DO) /*  表示  */        
0062.00              CHGVAR     VAR(&OUTOPT) VALUE('*PDF')                            
0063.00              CHGVAR     VAR(&OPTION) VALUE('*DISPLAY')                        
0064.00              ENDDO      /* *PDF */                                            
0065.00              ELSE       CMD(DO) /*  印刷  */                                  
0066.00              CHGVAR     VAR(&OUTOPT) VALUE('*TEXT')                           
0067.00              CHGVAR     VAR(&OPTION) VALUE('*PRINT')                          
0068.00              ENDDO      /*  印刷  */                                          
0069.00              /*******************************************************/        
0070.00              /* 出力 =*PRINT であっても編集を反映させるために       */        
0071.00              /* CVTSPLF を実行します。                              */        
0066.00              CHGVAR     VAR(&OUTOPT) VALUE('*TEXT')                     
0067.00              CHGVAR     VAR(&OPTION) VALUE('*PRINT')                    
0068.00              ENDDO      /*  印刷  */                                    
0069.00              /*******************************************************/  
0070.00              /* 出力 =*PRINT であっても編集を反映させるために       */  
0071.00              /* CVTSPLF を実行します。                              */  
0072.00              /*******************************************************/  
0073.00              DLTSPLF    FILE(PGM007P) JOB(&JOBNBR/&USER/&JOB) +         
0074.00                           SPLNBR(*LAST)                                 
0075.00              RETURN                                                     
0076.00            /*SPOOLWTR/CVTSPLF SPLF(PGM007P) JOB(&JOBNBR/&USER/&JOB) +   
0077.00                           SPLNO(*LAST) EDTOUT(&EDTOPT) +                
0078.00                           OUTPUT(&OUTOPT) OPTION(&OPTION) */            
0079.00              ENDDO      /*  編集  */                                    
0080.00              IF         COND(&OUTPUT *EQ '*PRINT') THEN(DO) /* +        
0081.00                            印刷  */                                     
0082.00              SNDPGMMSG  MSG(' 商品マスター一覧表を出力しました。 ') +   
0083.00                           MSGTYPE(*DIAG)                                
0084.00              ENDDO      /*  印刷  */                                    
0085.00              ELSE       CMD(IF COND(&OUTPUT *EQ '*') THEN(DO)) /* +     
0086.00                            表示  */                                     
0087.00              DSPSPLF    FILE(&SPLF) JOB(*) SPLNBR(*LAST)                
0088.00              DLTSPLF    FILE(&SPLF) JOB(*) SPLNBR(*LAST)                
0089.00              ENDDO      /*  表示  */                                    
0090.00              DLTOVR     FILE(*ALL) LVL(*JOB)                         
0091.00              MONMSG     CPF5800                                      
0092.00              RETURN                                                  
0093.00                                                                      
0094.00  ERROR:      RCVMSG     MSGTYPE(*LAST) RMV(*NO) MSG(&MSG) +          
0095.00                           MSGDTA(&MSGDTA) MSGID(&MSGID) MSGF(&MSGF) +
0096.00                           MSGFLIB(&MSGFLIB)                          
0097.00  SNDMSG:     IF         COND(&MSGID *EQ ' ') THEN(DO)                
0098.00              SNDPGMMSG  MSGID(CPF9897) MSGF(QCPFMSG) MSGDTA(&MSG) +  
0099.00                           TOMSGQ(&TOMSGQ) MSGTYPE(*ESCAPE)           
0100.00              ENDDO                                                   
0101.00              ELSE       CMD(DO)                                      
0102.00              SNDPGMMSG  MSGID(&MSGID) MSGF(&MSGFLIB/&MSGF) +         
0103.00                           MSGDTA(&MSGDTA) TOMSGQ(&TOMSGQ) +          
0104.00                           MSGTYPE(*ESCAPE)                           
0105.00              ENDDO                                                   
0106.00              ENDPGM  

2. 自動編集ジョブによる監視で編集

自動編集ジョブに編集を任せればCLPでCVTSPLFコマンドを
組み込まなくても、スプールの編集を適用させることができます。
つまり適用業務の変更の必要がないということです。

自動編集ジョブ(WRKEDTJOB)とはサブ・システム SPOOLWTRの配下で
OUTQ: SPLUSRSYS/EDTOUTQ というスプールへの投入を監視して
待ち続けているジョブのことです。

で示された部分が自動編集ジョブ(WRKEDTJOB)です。

自動編集ジョブ

  • STREDTJOB:自動編集ジョブの開始 コマンド によって開始され
  • ENDEDTJOB: 〃   〃 の終了 コマンド によって終了させることができます。

自動編集ジョブの機能

自動編集ジョブはOUTQ:SPLUSRSYS/EDTOUTQ にスプールが投入されると
それを検知して次の処理を行います。

1.読取ったスプールを編集する
読取ったスプールに対応する編集データを探し出して
そのスプールを編集して新しいスプールを作成します。
2.新しく作成したスプールを元のジョブのOUTQに戻します
スプールを投入した元のジョブに割振られているOUTQに
新しく作成したスプールを戻します。
3.編集前のスプールを削除
編集前の元になった編集前のスプールは削除します。

2.と3.の処理によって元のジョブでは印刷を実行すると、印刷結果の
スプールを編集した結果のスプールとして受け取ることができます。
これによってスプールの編集の適用は自動的に行われます。

自動編集ジョブを使うには

自動編集ジョブ編集の適用を任せるには実行したスプールを
OUTQ: SPLUSRSYS/EDTOUTQ に投入する必要があります。

1.OVRPRTF *PRTFで一時変更を指定する
それには適用業務のCLPを変更しなくても簡単にできる方法があります。
OVRPRTF    FILE(*PRTF) OUTQ(SPLUSRSYS/EDTOUTQ)
を実行すれば、以降のすべての印刷出力のOUTQをSPLUSRSYS/EDTOUTQ に変更します。
例えばユーザーの開始プログラムCLPの中にこの命令を組み込んでおけば、
そのユーザーでサイン・オンした後は、すべてこのOVRPRTFが 有効に働きます。
2.プログラム別に OVRPRTFを指定する
もちろんCLPの変更をいとわなければ CLPで
OVRPRTF    FILE(QPRINT) OUTQ(SPLUSRSYS/EDTOUTQ)
CALL       MYPGM
DLTOVR     *ALL
のようにして指定しておくのも有効です。
3.CRTPRTFで OUTQ(SPLUSRSYS/EDTOUTQ) として印刷ファイル(PRTF)を作成しておく
印刷ファイル(PRTF)を CRTPRTF OUTQ(SPLUSRSYS/EDTOUTQ) として
OUTQを明示的に指定して作成しておくと、
スプールは OUTQ: SPLUSRSYS/EDTOUTQ に投入されます。
その後でジョブで指定されているOUTQにスプールは戻されます。
OVRPRTF *PRTF を有効にするには
各CLPで
OVRPRTF QPRINT ... SECURE(*YES)
のように SECURE(*YES) は指定しないでください。
SECURE(*YES) を指定すると、上位の一時変更(この場合はOVRPRTF *PRTF)からは
保護されることを意味します。
なお適用業務CLPで指定している OVRPRTFの内容も有効に機能します。

編集の権限と認可

編集を行う権限を制限する必要があります。
編集操作を行えるユーザーを制限することができます。

編集権限の認可(GRTEDTAUT)によって使用権限を設定することができます。
このコマンドはライセンス・メニュー(GO LICENSE)から呼び出すことができます。

編集権限の認可画面

編集機能を追加オプションとして契約した場合は
必ずこの編集の権限を設定するようにしてください。

編集権限は次の3つのAND条件を満たすユーザーのみに
編集の権限を与えることができます。

ユーザー・クラス

ユーザー・クラスを指定します。指定できるユーザー・クラス
*PGMR *USER *SECADM *SECOFR *ALL
のいずれかです。

特殊権限

指定した特殊権限を持つユーザーにだけ編集の権限を与えます。
指定できる特殊権限
*NONE *ALLOBJ *AUDIT *IOSYSCFG *JOBCTL *SAVSYS *SECADM *SPLCTL
のいずれかです。

ユーザー

具体的なユーザー名を明示的に指定して、編集の権限を与えることができます。

[例] プログラマーにだけ編集の権限を与える
GRTEDTAUT USRCLS(*PGMR) SPCAUT(*NONE) USER(*NONE)
*PGMR を指定したからといって必ずしもこれが社内プログラマー全員を
意味するとは限りません。
御社のユーザーの機密保護管理が確かにプログラマーのユーザー・プロフィールは
*PGMR として設定されているのであれば、この設定がプログラマー全員を指定したことに
なりますが、必ずしも正しく設定されていない会社もありますので
御社の機密保護担当者と十分ご相談ください。

編集データの内容

On the Webのマウスでスプールを編集したデータはデータ・ベース:
ライブラリー : SPLUSRSYS  ファイル : DSPPRTD
という名前のデータとして保管されます。
このデータ・ベースの内容は WRKEDTDTA(= Work Edit Data:編集データ処理) という
コマンドで表示することができます。

[WRKEDTDTA : 編集データ処理]
WRKEDTDTA:編集データ処理画面

F11キーを押すと次のように、編集データ生成の元になったスプールの情報
表示することができます。

[8=生成元のスプール情報]
[解説]

WRKEDTDTAコマンドはSPOOLライターメニュー(GO SPOOLWTR) の中の
ユーティリティ・メニュー (GO UTIL)に登録されています。

オプション=5=表示を選択すると次のように編集データの内容を表示することができます。

[5=表示]
編集データの内容の表示画像
[解説]

この内容を使用者が理解したり修正したりする必要はありません。
編集データの表示はあくまでも印刷の編集の理解を助けるためのもので
実際に学習や修正が必要になることはありません。

実行環境への移行

開発環境と実行環境が別の IBM i 区画で異なった環境である場合
開発環境の編集データを、実行環境へ複製する必要があります。

実行環境にもSpoolライターVer5.0が必要

実行環境にもSpoolライターVer5.0が導入されている必要があります。

編集データは SPLUSRSYS/DSPPRTD

編集データは次のとおりです。

物理ファイル従属する論理ファイル名
SPLUSRSYS/DSPPRTDSPLUSRSYS/DSPPRTL
SPLUSRSYS/DSPPRTN

これらの編集データはライブラリーSPOOLWTRにも、空ですが
同じものが保管されています。
開発環境の物理ファイル DSPPRTD の内容を、実行環境の DSPPRTD
複写してください。
DDMファイルを定義しておくと簡単にコピーすることができます。

[例] 開発環境にDDMファイルを作成する

[解説]

実行環境にはあらかじめDDMファイルだけを収めるためのライブラリー DDM740を作成しておきます。
OS Ver7.4からは SNA on TCPIP が廃止されています。
Ver7.4以降での通信の設定方法は「123.Ver7.4 の SNADS の設定」を参照してください。
リモート・ロケーションとは、実行環境のシステム名を示しています。
このようなDDMファイルを作成しておけば開発環境では

CPYF FROMFILE(SPLUSRSYS/DSPPRTD) TOFILE(DDM740/DSPPRTD) MBROPT(*REPLACE)

のようにCPYFコマンドの実行だけで、編集データを開発環境に複写することができます。