コンテンツフレーム起動

更新汎用モジュールをコールするダイアログモジュール 文書を SAP ライブラリストラクチャに組み込む

ダイアログモジュールの場合は、実行可能プログラム(レポート)と違って、コールされたときに新しい 更新トランザクションが開始されません。ダイアログモジュールからの更新タスク汎用モジュールのコールでは、呼出元プログラムにおける更新キーと同じキーが使用されます。このため、ダイアログモジュールからの更新タスク汎用モジュールのコールは、呼出元プログラムの中で COMMIT WORK 命令が処理されるときにのみ実行されます。

注記

ダイアログモジュールの中に COMMIT WORK を入れると、変更内容がデータベースに書き込まれます(たとえば UPDATE によるもの)。しかし更新タスクは開始されません。ダイアログモジュールによって更新タスク汎用モジュールが呼び出された場合には、呼出元プログラムで COMMIT WORK に到達するまで開始されません。

注記

ダイアログモジュールを使用するときには、 PERFORM ON COMMIT によってコールされるサブルーチンの中に、更新タスク汎用モジュールのコールを入れないようにしてください。一般に、ダイアログモジュールの中で PERFORM ON COMMIT (更新タスク汎用モジュールのコールあり / なし)を使用すると、障害が発生しやすくなります。

その理由としては、ダイアログモジュールは自身のロール領域の中で実行されるのですが、このロール領域はモジュールが終了すると消滅してしまうことがあげられます。つまり、メインプログラムでコミットが実行されると、すべてのローカルデータ(更新タスク汎用モジュールのコール時にパラメータ値として使われたデータなど)が失われてしまいます。

ダイアログモジュールにおいてどうしてもこの方法を使用するときには(つまりサブルーチンの中で更新タスク汎用モジュールをコールするときには)、実パラメータの値が、更新タスク汎用モジュールが実際に実行されるときに必ず存在しているように注意する必要があります。そのためには、必要な値を EXPORT TO MEMORY によって格納しておき、 COMMIT 命令の前に、 IMPORT FROM MEMORY を使ってメインプログラムに値をインポートすることができます。

 

 

コンテンツフレーム終了