最初のページに戻ります。

総合の目次があるページに戻ります。

よく使うマニュアルです

Wiki

updated on 2004.06.23

a.12. 2000年問題 其の拾弐

[ Previous ] [ HOME ] [ Upper ] [ Next ]


さらに、自動化出来ました。

まず、Y2KCTLPというファイルを作成しました。

     A            C1REFD         1          COLHDG('REFERED')
     A            C1SEQ          5S 0       COLHDG('SEQ')
     A            C1FILE        10          COLHDG('対象ファイル名')
     A*
     A            C1WRKF        10          COLHDG('作業ファイル名')
     A            C1LIB         10          COLHDG('FILEライブラリー名')
     A            C1SCRL        10          COLHDG('新ファイルDDS LIB')
     A*
     A            C1PGM         10          COLHDG('変換PGM名')
     A            C1PGML        10          COLHDG('変換PGM LIB名')
     A            C1PSRC        10          COLHDG('変換PGM SRC MBR名')
     A            C1PSRL        10          COLHDG('変換PGM S.LIB名')
     A                                      DFT('Y2KSRC')
     A            C1HOLD         1          COLHDG('HOLD FLAG')
     A*
     A            C1PIC         10          COLHDG('担当')                  

その後、このファイルに変換対象のファイル名や、条件を追加。この追加もプログラムでするようにして、なるべく手軽にしました。

このファイルを読みながら、(&C1PIC='KAKEFUDA'だけ)

  • DSPDBRのAPIで、ライブラリーUSRSPCに、対象ファイルの従属論理ファイル情報をもつ、ユーザスペースをセットする。

そのユーザースペースの名前は、対象ファイルと同じ名前にする。もし、その名前のユーザースペースがすでに存在していたら、なにもしない。これは、このシーケンスの中で、論理ファイルを削除しているためで、リトライすると、論理ファイルなしのデータがユーザースペースに出来てしまうからです。(このユーザースペースは、ずーっとはとっておけません。なぜなら、異なるライブラリーの、同一ファイルがあるからです。同じファイル名=同じユーザースペース名で違う内容になるのです。過去のヒストリーファイルなどが、該当します。※実は悩んでいます。この変換のシーケンスをパラレルに実行したかったのです。どうしようかなぁ。ユーザースペースをファイルが登録されたライブラリーに作ろうかなぁ。)

  • 旧レイアウトのファイルをリネームする。

    RNMOBJ を利用します。名前は上記ファイル内の&C1WRKFに変更されます。ここは、リトライの時は、元の名前に、マニュアルで戻します。

  • 旧レイアウトに従属する論理ファイルを削除する。

    これは、先ほど作成したユーザースペース の内容を、CLPで、取り出しながら、DLTFをしてゆきます。APIコーナーに掲げた、DSPDBRのAPIを、ユーザースペース作成と、ユーザースペース読みとりに、分解しての利用です。(外部サブルーチンとしています。パラメータで、このDLTFと、後のCRTLFに動きが変わります。)また、早めに削除するのは、ディスクスペースの圧迫を緩和したい(この後、物理データはディスクの上で、倍になる)

  • 新レイアウトの作成。

    CRTPF &C1LIB/&C1FILE &C1SCRL/QDDSSRC SIZE(*NOMAX)。ほんとは、*NOMAXは望ましくないのですが、時間があれば、このあたりのパラメータも、上記Y2KCTLPに含めようと思います。とにかく、今は、テストしたいのです。それから、FORMAT()やREF()は、当然参照されるファイルが先に出来ていなくては、ならないので、Y2KCTLPのC1REFDで順番を細工しています。(尚、メンバーは、この後でADDPFMするので、この時点では追加しません。b_upd.gif (283 バイト)

  • 変換プログラムの作成

    CRTRPGPGM &C1PGML/&C1PGM &C1PSRL/&C1PSRC 。これは、予め準備された、プログラムです。作業ファイルが9文字以上になってしまった場合は、OVRDBFを、CRTRPGPGMの前にします。(この変換プログラムは、事前に変換結果が正しいか、十分テストをしてあることが前提です。b_upd.gif (283 バイト)

  • 変換作業の開始。

    ここでは、APIのメンバーリスト取り出し(CLP)を使い、&C1WRKF(旧ファイル)のメンバー一つに対して、以下を繰り返す。

  1. もし、メンバー件数が2個以上ならば、CHGPF &C1LIB/&C1FILE MAXMBR(*NOMAX)
  2. ADDPFM &C1LIB/&C1FILE MBR(&MBRNAME) TEXT(&MBRTEXT)
  3. OVRDBF &C1WRKF &C1LIB/&C1WRKF MBR(&MBRNAME)
  4. OVRDBF &C1FILE &C1LIB/&C1FILE MBR(&MBRNAME)
  5. CALL &C1PGML/&C1PGM
  6. DLTOVR (&C1WRKF &C1FILE)
  7. 転送元と転送先の件数が一致したか確認する。違えばエラーを出して、論理ファイルを作成しないで、エラー終了。
  • すべてのメンバーがおわったら、CRTLFをする。

    これも先ほどのユーザースペースから、論理ファイル名を取り出して、作成する。

  • 次の、Y2KCTLPのレコードを読む。で、はじめに戻ります。

DDSの修正開始

さて、このプログラムもできて、DDSの修正に取りかかりました。最初は、すべての物理ファイルのDDSを修正します。その次に、RPGの修正ですが、サブシステム単位に、あるランク付け(たぶん難易度)でファイル単位に修正する。このとき、転送プログラムソースの自動生成によりログを取っているので、修正対象ファイルや、フィールドはデータとして落ちることになる。プログラムの修正はこれを参照する。そして、この転送プログラムソースの自動生成ツールは、新旧のDDSを比較して、異なるフィールドや属性を検出して、RPGソースを作ります。つまり、このDDSの変更作業は、今後の作業に取って、とても大事なのです。

以前、FNDSTRPDMをしたときに、該当ソースメンバーが出て来たので、それを当てにしました。でも、以下のことに注意です。

  • ネットワークに対しての送受信は、相手のレコードレイアウトが変わらない限り、変更できない。

    もちろん、これは、直接データストリームを受信して、フィールドに分解する部分の話で、その後の、累積ファイルなどへは、西暦4桁でいいわけです。もし相手が6桁の日付ならば、8桁を6桁に桁を減らして送信だし、受信は6桁から8桁に桁を増やして受信累積する事になります。つまり、桁を修正してはいけないファイルがあるのです。

  • 外部DSも下手に直すと、上記のデータ送受信で使われているかもしれないので、注意。これは、RPGを見るしかありません。
  • なるべく、DDSには、EDTWRD('    /  /  ')やEDTWRD('     /  ')などを、入れること。

    こうすると、後でQRYが見やすい。今度はやたら桁が長いのに、編集コードが無い。それから、データタイプLは見送ろうと思う。10バイトはきついのだ。また、OPMでは限界がある。ディスクをもっと増やして、すべてをILEにしたなら、使えそうです。

  • コンパイル用ワークファイルは、予め、作成しておき、本番以降でも楽なように、ライブラリーを分ける。

    実は、元々、コンパイル用のワークファイルは、WRKDBFというライブラリーに作成さてあるのですが、この新レイアウト版をどこかに作成して置くのです。でないと、まれにコンパイルが通ってしまい、実行するとOVRDBFで旧レイアウトを新レイアウトにしてファイルオープンしようとして、エラーを起こす可能性があります。

修正手順

修正対象の物理ファイルのDDSを見つけたら、

  1. そのソースを、Y2KSRC/QDDSSRC(新レイアウト専用DDS)にコピー。
  2. 元となった、ソースメンバーを\XXXXXXXXと、頭に\をつけて、リネーム。この後、もし、参照ファイルも対象ならば、SEUでFORMAT(),REF()を\付きのファイルに変更する。
  3. Y2KSRC/QDDSSRCのメンバーを修正。
  4. Y2KCTLPにデータを追加。
  5. 以上を、CLPにして作成して、PDMのユーザーオプションに登録した。

本日、午後狂ったように、DDSを修正しました。120本くらい。8桁のものも対象にしたので、ファイル内の全フィールド8桁済みのものもありました。あとで分かったのですが、修正しないでいい、フィールドまで、間違えて、桁を修正していました。注意しなくては。

この後、DDSのリコンパイルを、Y2KCTLPを順次に読み込むCLPを作成して、流しました。さらに、その後、変換ソースを生成して、その、コンパイルまで出来ました。それから、データで、旧レイアウトでも8桁ですが、中身が00981229となっているものもあるので、これを探さなくてはいけません。

あとは、この実行と、実行結果の確認です。たしか、QRY管理で、ソースを作成すれば、出来たような気がする。NEWS400に出ていたかも。でも、今日はもう、くたくたなので、調べるのは明日にしようと思います。あしたは、取りあえず、残った、物理ファイルのソース(\のついてないもの)を再度検索します。とにかく、テスト機でのデータ移行は、今月中にやるぞ!

続く...


[ Previous ] [ HOME ] [ Upper ] [ Next ]

You are at K's tips-n-kicks of AS/400

 

Ads by TOK2