Visual LANSA フレームワーク ガイド > フレームワーク・プログラミング > VLF フレームワーク・マネージャー > uQueryCanDeactivate avNotifyDeactivationを使用して未保存の変更を保存

uQueryCanDeactivate/avNotifyDeactivationを使用して未保存の変更を保存

VLF-ONE の場合

VLF-ONE フィルターおよびコマンド・ハンドラーに再定義された uQueryCanClose メソッドが存在することがあります。

これは、フィルターまたはコマンド・ハンドラーを閉じようとユーザーがアクションを取った時に起動されます。

そして、キャンセルまたは閉じる要求が許可されるかどうかを示すブール値パラメータ #CanBeCancelled に渡されます。

これはブール値 #Allow を返し、閉じる要求がキャンセルされるべきかどうかが示されます。閉じる要求がキャンセルできない場合、実績値が返されたかどうかにかかわらず、TRUE (閉じることを許可) だと判断されます。

つまり、uQueryCanClose には次の 2 つの役割があります。

VLF-WIN の場合

VLF-WIN では、uQueryCanDeactivate は、エンドユーザーがコマンド・ハンドラーからフレームワーク内の別の場所に移動したり、フレームワークを終了しようとすると起動されます。これは、ユーザーが別のコマンド・タブ、ビジネス・オブジェクトの新しいインスタンス、または他のビジネス・オブジェクトやアプリケーションをクリックすると、実行されます。

保存されていない変更を保存する場合に、このメソッドは特に役に立ちます。ルーチンは変更を保存する必要があるかどうかを確認します。保存する必要がある場合は、ユーザーに「続行する前に変更を保存しますか?」という質問が表示されます。(はい/いいえ)[はい] と答えると、変更を保存できます。 (※質問のメッセージはプログラムソース上で変更することができます。)

ルーチンの実行時でも、コマンド・ハンドラーには、ユーザーが移動を試みる前の値がすべて保持されています。したがって、保存されていない変更がないか確認して保存するのは簡単です。

このメソッドを使用するには、avNotifyDeActivationプロパティをコマンド・ハンドラーの初期化ルーチンに設定する必要があります。

* 初期化処理

 

Mthroutine Name(uInitialize) Options(*REDEFINE)

 

* 祖先で定義された初期化処理を行う

 

Invoke #Com_Ancestor.uInitialize

 

* 未保存の変更に対するチェックをアクティベート (未保存の変更ロジック)

set #Com_Owner avNotifyDeactivation(TRUE)

 

Endroutine

 

次に、再定義したuQueryCanDeActivateルーチンをコマンド・ハンドラーに追加します。

 

* ユーザーが別のコマンド・タブかビジネス・オブジェクト・インスタンス、ビジネス・オブジェクトやアプリケーションに移動した時、またはフレームワークを閉じる時、フレームワークがこれを初期化

* (フレームワークはこのメソッドを複数回初期化することもある)

 

MTHROUTINE NAME(uQueryCanDeactivate) OPTIONS(*REDEFINE)

* Define_Map For(*Result) Class(#vf_elBool) Name(#Allow)

 

#Allow := True

 

if '(#pty_NeedsSaving *eq TRUE)'

 

* 保存する必要がある場合、これを保存するかユーザーに問い合わせ

 

USE BUILTIN(MESSAGE_BOX_SHOW) WITH_ARGS('YESNO' 'YES' *Default *Default 'The notes have been changed.Would you like to save your changes before continuing?')TO_GET(#MSG_RET)

 

if '#MSG_RET *eq YES'

 

* すべて保存

<< my save logic>>

 

endif

 

#pty_NeedsSaving := False

 

endif

 

endroutine

 

さらに複雑なバージョンでは、保存中にエラーが発生した場合に#Allowをfalseに設定できます。また、そのような場合は、ユーザーはクリックした場所に移動しません(または、フレームワークを終了しようとしていた場合は、フレームワークが開いたままになります)。

また以下も参照してください。

理由コード

コメント/警告