忍者ブログ

ド壺

脳内がNotes/Domino系からASP.NETに移行しつつあるIT系情報ブログなつもり。

   

[PR]

×

[PR]上記の広告は3ヶ月以上新規記事投稿のないブログに表示されています。新しい記事を書く事で広告が消えます。

LS:「変更を保存しますか?」を表示させずに文書を閉じる

いつかブログネタに困ったときに載せようと思ってたネタですが、
ドミノ懇談室側での保存確認メッセージスレッドへの
補足説明と一部説明が間違ってたことによる修正も込めて
記事にさせて頂きます。


まず、編集モードになっている文書を
LotusScriptでバックエンド側から値を変更し
保存メッセージを表示させずにフロントエンド文書を閉じる場合、
①手動でやる仕事を強制的にスクリプトにさせてしまう。
②保存メッセージそのものを表示させずに閉じてしまう。
の2つの方法論があります。

①については、NotesUIDocumentクラスのCloseメソッドに
「保存しないで閉じる」というオプション(引数)がないため、
強制的にスクリプト側で保存を掛けるという一択になります。
このため、Saveメソッドを使用します。

スクリプト例:
Sub Click(Source As Button)
Dim workspace As New NotesUIWorkspace
Dim uidoc As NotesUIDocument
Dim doc As NotesDocument

Set uidoc = workspace.CurrentDocument
Set doc = uidoc.Document
'バックエンド側処理開始
doc.data = "データ1"
Call doc.save(True, True)
'バックエンド側処理終了

Call uidoc.Refresh
Call uidoc.save
Call uidoc.close
End Sub

ただし、ここからが重要ですが、NotesUIDocumentのCloseメソッドは
スクリプトのどこの位置に書こうが、一番最後に処理がなされます。
(※R7では書かれた位置どおりの挙動になるとかなんとか?)
ということで、Closeの前に必ずSaveメソッドをもって来ないといけません。

そのNotesUIDocumentのSaveメソッドも、
フロントエンドでのみ処理されたデータを保存します。
この場合、一旦バックエンド側で処理されたデータを
フロントエンド側に更新する必要があるため、
Saveの前にRefreshメソッドを使用します。

ただし、バックエンド文書をDocumentプロパティで派生させた場合は
バックエンド文書のデータを更新すると、
即時でフロントエンド側にも更新されます。
ので、本来はRefreshもいりません。
が、あくまで変更されたデータがフロントエンド側に更新されるだけで、
その変更データを元にした計算結果フィールドがある場合においては
再計算が必要になるため、Refreshを掛けておくと良いです。
(Refreshはクライアント側でF9を押す代わりと思ってくれるといいかも。)

ドミノ懇談室側に間違って書いたReloadについては、
Documentプロパティでバックエンド文書を派生させた場合はいりません。
が、フロントエンド文書からUNIDを使用し
GetDocumentByUNIDでバックエンド文書を派生させた場合等にのみ
Reloadメソッドが必要になります。
(まぁDocumentプロパティでバックエンド文書が取得できれば、
ワザワザUNIDからの取得はあんまりしないと思うんですけどねぇ)


②については、SaveOptionsのフラグを変更することで対応が可能です。

スクリプト例:
Sub Click(Source As Button)
Dim workspace As New NotesUIWorkspace
Dim uidoc As NotesUIDocument
Dim doc As NotesDocument

Set uidoc = workspace.CurrentDocument
Set doc = uidoc.Document
'バックエンド側処理開始
doc.data = "データ1"
Call doc.save(True, True)
'バックエンド側処理終了

Call uidoc.FieldSetText("SaveOptions", "0")
Call uidoc.close
End Sub

簡単に思われがちですが、これは少し使用を考慮する必要があります。
特に、ユーザ側で編集し、手入力し、Escで終了してしまう使い方をしていると
このフラグを変更する事により、「変更を保存しますか?」が聞いて来なくなり、
保存せずにそのまま閉じてしまいます。
使用方法がスクリプト側だけならそれでも問題ないのですが、
編集モードにしてからアクションなどのイベント駆動で
LotusScriptを動かすということを行う限り
この辺は考慮する必要があります。

対応策として、
1.Querymodechange時にSaveOptionsをチェックし
「0」になってる場合は「1」にするか、
2.Escから逃げれなくするか
の2パターンがあります。

1.はQuerymodechangeに
そのままif文の条件分岐により実装すればいいと思いますが、
2は結構メンドクサイです。


以下に2の場合のスクリプト例を示します。

まず、その文書を開くフォームの(Globals)の(Declaration)に
グルーバル変数を宣言
Dim APLflg As String


次に文書を編集モードにしたときにAPLflg変数に初期値を与え、
Sub Querymodechange(Source As Notesuidocument, Continue As Variant)
APLflg = "0" '文書を開いたとき、初期値をセット
End Sub

アクションボタン「中止」を作成して以下のスクリプトを追加し、
Sub Click(Source As Button)
Dim workspace As New NotesUIWorkspace
Dim uidoc As NotesUIDocument
Set uidoc = workspace.CurrentDocument

Messagebox "保存しないで中止します" ,0 , "中止処理"
APLflg = "9"
Call uidoc.close
End Sub

あとはQueryCloseに仕込みを入れる
Sub Queryclose(Source As Notesuidocument, Continue As Variant)
If APLflg = "0" Then
Messagebox "中止ボタンから終了してください。" _
,0 , "アプリケーション エラー"
Continue = False
Elseif APLflg = "9" Then '中止ボタンを押したとき
'そのまま抜ける
End If
End Sub


んで、指摘のあった抜けの部分(2007/02/21追記)
※たちさん、指摘ありがとうございました~
Sub Queryopen(Source As Notesuidocument, Mode As Integer, Isnewdoc As Variant, Continue As Variant)
If Source.EditMode = True
'編集モードならESC押下時に抜けられないようにする
APLflg = "0"
Else
'読込モードならそのままESCで抜けられる
APLflg = "9"
End If
End Sub


はい、完全にメンドクサイですね。。。
作った自分でも説明するのさえメンドクサイですよっ。
ということで、各自でスクリプトを解読してくださいねー(ぁ

拍手[0回]

PR

COMMENT

NAME
TITLE
MAIL(非公開)
URL
EMOJI
Vodafone絵文字 i-mode絵文字 Ezweb絵文字
COMMENT
PASS(コメント編集に必須です)
SECRET
管理人のみ閲覧できます

あの質問ですね

  • by たち
  • 2007/02/20(Tue)20:53
  • Edit
親切な人が多いな、と思いながら読んでいました。

ところで、②2.の対策はもっと面倒かも・・・
ヘルプを読むと、読込みモードが編集モードになるときにQuerymodechangeが実行されるとなっていますが、それでは文書をいきなり編集モードで開いたらはどのような動きをしますか?

スクリプトが苦手な’たち’の戯言でした。

ネタ提供ありがとうございますw

  • by nami
  • 2007/02/21(Wed)08:41
  • Edit
> 親切な人が多いな、と思いながら読んでいました。

はははははは。。。(´・ω・`)
まあ元々ブログネタに暖めて置いたものなので。
ただネタを記事にまとめるのにメンドクサクって放置してたってのが本当の理由zzz

それとこの件について、
自分的には強制的にsaveしてしまう①の方法を推奨してます。
そのほうが色々と楽ですしねぇ。
編集モードにユーザが切り替えられる以上
フロントエンド文書を保存できない理由ってのは、あんまりないと思いますので。。。

あと、質問になっている件については、
ちょっと動作検証した後にブログネタとして使わせて頂きますw

TRACKBACK

Trackback URL:

カウンター

ブログ内検索

カレンダー

06 2017/07 08
S M T W T F S
1
2 3 4 5 6 7 8
9 10 11 12 13 14 15
16 17 18 19 20 21 22
23 24 25 26 27 28 29
30 31

プロフィール

HN:
nami
性別:
女性
自己紹介:
火星人+/ペガサス/ささ女
の完全変人タイプ。

仕事は1事業所のIT管理者。
ノーツDB開発を主に担当。
鯖管理とNetwork管理にも携わる。
ぶっちゃけIT便利屋。
基本は「広く浅く」。
口癖は「メンドクサ。。。」

ついったーやってます。
@namiphoをフォローしてネ


トラバについて
ここの記事のリンクがない記事については、トラバ許可はしませんのでご承知おきください。

最新コメント

No Title(返信済)
(04/25)
No Title(返信済)
(04/12)
No Title(返信済)
(03/01)
(10/07)
(09/29)

バーコード

アフェリエイト


デル株式会社
シマンテックダウンロードストア

お天気情報

アクセス解析

Copyright ©  -- ド壺 --  All Rights Reserved
Design by CriCri / Photo by Geralt / powered by NINJA TOOLS / 忍者ブログ / [PR]