アーカイブプログラムの開発 

アーカイブプログラムは、データをアーカイブファイルのアーカイブオブジェクトに書き込みます。アーカイブプログラムは、必要に応じて調整することができます。アーカイブするデータオブジェクトは、アーカイブプログラムで直接取り出すか、論理データベースによって取り出すことが可能です。

すべてのアーカイブプログラムには、共通点が一つあります。すなわち、 ADK 汎用モジュール(機能グループ ARCH )を使用して、オブジェクトのデータをアーカイブファイルに保存します。この汎用モジュール群は、すべてのアーカイブファイルのアクセスメソッドをカバーします( 標準アーカイブプログラムも参照してください)。

したがって、アーカイブクラスを定義すれば、アーカイブプログラムの開発にとって有利です。アーカイブクラスには、データベースおよびデータコンテナ間の転送のプログラムロジックが含まれています( アーカイブクラスを使用するアーカイブも参照してください)。アーカイブクラスが存在しない場合は、アーカイブプログラムはデータベースからデータを取り出す必要があります。それらのデータは、 ADK 標準クラスによってデータコンテナに渡されます。

ガイドライン

・ データセキュリティのため、アーカイブプログラム自体は、データベース内のいかなるデータも削除することはできません。(削除は、別の削除プログラムによって実行されます)

・ ただし、アーカイブプログラムは、アーカイブフラグを設定することなどのデータベースの変更はできます。どのような変更も、データベースの負荷を大きくし、アーカイブの実行時間を長くすることになるので、こうした変更はどうしても必要な場合にのみ行ってください。

・ アーカイブプログラムがオンラインモードで稼働することができるように、データの選択を注意深く行い、システムの負荷を最小限に抑えるようにしてください。

すべての ADK汎用モジュール(機能グループ ARCH )およびそのパラメータについての拡張文書を、システムで使用することができます。この文書は、汎用ライブラリで呼び出すことが可能です。

1. ツール ABAP/4 Workbench と選択して 汎用ライブラリのプッシュボタンを選択します。

2. 汎用モジュールの名前を入力します。

3. オプション 文書をマークして、照会を選択します。
汎用モジュールの内容説明、およびすべてのインタフェースパラメータが表示されます。

汎用モジュール文書を照会するには、プッシュボタン 汎用モジュール文書を選択します。パラメータ文書または例外を照会するには、該当する行をダブルクリックします。

汎用モジュールの呼び出し順序

1. アーカイブを開く - ARCHIVE_OPEN_FOR_WRITE
このアーカイブオブジェクト汎用モジュールは、 各アーカイブセッションについて一度だけ(アーカイブオブジェクトごとに)呼び出されて、他のすべてのアーカイブ操作に必要な一意のハンドルを戻します。この汎用モジュールは、渡されたアーカイブオブジェクトについて以下のタスクを実行します。

− アーカイブファイルを作成するかどうかのチェック

− 削除プログラムをテストモードで呼び出すかどうかのチェック

− アーカイブ管理へのヘッダエントリの書き込み

− 静的アーカイブクラスのインクルード

− 最初のアーカイブファイルのオープン

− 最初のアーカイブファイルへのヘッダエントリ、たとえば、関連するディクショナリ( Name Tab )テーブルに関する情報の書き込み

2. アーカイブクラスの動的なインクルード - ARCHIVE_REGISTER_CLASS
アーカイブクラスを使用し、それらを動的にインクルードしたい場合は、各アーカイブクラスについてこの汎用モジュールを呼び出し、ハンドルを渡す必要があります。

− アーカイブファイルへの情報の書き込み
(以下のプログラムを使用するため)

ARCHIVE_OPEN_FOR_WRITE の直後に呼び出してください。

以下のステップ( 3 - 5 )は、アーカイブするデータオブジェクトすべてについて、ループで呼び出す必要があります。

3. 新規データオブジェクトの取得 - ARCHIVE_NEW_OBJECT
各データオブジェクトについてこの汎用モジュールを呼び出します。これで、データをアーカイブオブジェクト汎用モジュールに渡すことが可能となります。この汎用モジュールは、以下のタスクを実行します。

− データコンテナの初期化

− アーカイブクラス初期化ルーチンの呼び出し

OBJECT_ID によるインデックスエントリ値のパス(必要な場合)
この文字列値の構成は変更できず、渡された値は一意でなければなりません( インデックス作成、およびアーカイブの個々のデータオブジェクトにアクセスするためのインデックスの使用も参照してください)。

汎用モジュール ARCHIVE_SAVE_OBJECT によってアーカイブファイルにデータオブジェクトを保存したあと、さらにデータをアーカイブしたい場合は、この汎用モジュールを再び呼び出してください。

4. データオブジェクトの構築
汎用モジュール ARCHIVE_PUT_RECORD またはアーカイブクラス汎用モジュールを呼び出します。これらは命名規則のオブジェクトで、“クラス”はアーカイブクラス名: class_ARCHIVE_OBJECT を表します。

渡されたデータを、削除プログラムによって削除するかしないかを決める必要があります。この判断のため、アーカイブクラス汎用モジュールによって、パラメータ OBJECT_DELETE_FLAG が提供されます。
汎用モジュール ARCHIVE_PUT_RECORD は、パラメータ RECORDS_FLAGS によってこの機能を提供します。
アーカイブクラス汎用モジュールによって、データを選択する必要がなくなり、データベースへのアクセスを最適化します。汎用モジュール ARCHIVE_SAVE_OBJECT が呼び出されると、これらのモジュールは、まず要求を収集してから、データベースにアクセスします。これらの汎用モジュールは、データが属するデータオブジェクトをハンドルによって認識します。ハンドルは、汎用モジュールインタフェースに渡される必要があります。

アーカイブしたくないデータをすでに渡してしまった場合には、汎用モジュール ARCHIVE_NEW_OBJECTを呼び出してください。これによって、渡された標準クラスおよびアーカイブクラスのデータは“忘れられ”ます。

5. アーカイブファイルへのデータオブジェクトの保存 - ARCHIVE_SAVE_OBJECT
データオブジェクトを実際にアーカイブすることを要求するには、汎用モジュール ARCHIVE_SAVE_OBJECT を呼び出してください。この汎用モジュールは、以下のタスクを実行します。

− アーカイブクラスデータパケットの取得

− 標準クラスデータの圧縮

− 静的データの収集

− アーカイブ管理レコードの更新

− アーカイブファイルへのデータオブジェクトの書き込み(アーカイブクラスおよび標準クラスによってデータが保存されたデータコンテナから)

− 満杯になったアーカイブファイルのクローズ、および新しいアーカイブファイルのオープン

− アーカイブファイルを閉じた後の、削除プログラムの呼び出し

− データコンテナのクローズ。これによりデータオブジェクトがアーカイブファイルに書き込まれた後、データコンテナにそれ以上データが書き込めなくなります。

ループ終了(ステップ 5

6. アーカイブ終了 I - ARCHIVE_WRITE_STATISTICS
この汎用モジュールによって、アーカイブの最後にアーカイブデータに関する統計を生成することができます。標準クラス( ARCHIVE_PUT_RECORD )で渡されたデータレコードについては、レコードが個別にリストされます。
この汎用モジュールは、以下のタスクを実行します。

− アーカイブ手順を文書化した一覧の生成

7. アーカイブ終了 II - ARCHIVE_CLOSE_FILE
アーカイブを終了するには、この汎用モジュールを呼び出してください。渡されたハンドルは無効化され、それ以上使用できません。

この呼び出しを忘れると、最後に処理された(物理)アーカイブファイルが失われ、アーカイブは完了しないことになります。

− アーカイブ管理レコードの更新

− 現在アーカイブファイルのクローズ

− インクルードされたアーカイブクラスの解放

− 現在ハンドルの破棄

− アーカイブ削除プログラムの呼び出し(自動削除が必要な場合)