nsfl10n

Lotus Notes/Domino のブログ。nsf:Notes Storage Facility。l10n:Localization。

スポンサーサイト

上記の広告は1ヶ月以上更新のないブログに表示されています。
新しい記事を書く事で広告が消せます。
  1. --/--/--(--) --:--:--|
  2. スポンサー広告|
  3. トラックバック(-)|
  4. コメント(-)

カスタムOK/キャンセルボタンと入力チェック

CustomOKCancelDialogs.png ButtonTypes.png
Custom OK/Cancel Buttons and Validation

 皆様と共有したいと思う面白いことを発見しました。ダイアログボックスでオリジナルな(Notesが生成するデフォルトのボタンじゃない)OK/キャンセルボタンを使いたい方だけにぴったりな情報ですが。この話をご存じない方でも、ダイアログボックスでOKとキャンセルボタンを指定することが出来ることあご存じかと。ダイアログフォームにホットスポットボタンを追加して、"OK"か"キャンセル"というボタンの種類("ヘルプ"というのもある)を選べばいい(こちらの画像参照)。ボタンの中には何もロジックを組み込んではいけない。そして、ダイアログボックスを呼ぶ出すロジックの中で、NotesにOKボタンとキャンセルボタンを表示させないようにします。それは、それぞれスクリプトのws.DialogBox メソッドの4番目と11番目のパラメーターです。

 サンプルコード:

Sub Click(Source As Button) Dim ws As New NotesUIWorkspace Dim doc As NotesDocument Set doc = ws.CurrentDocument.Document If ws.DialogBox("sfrmTemp", True, True, True, False, False, False, "Title", doc, True, True) Then Msgbox "OK がクリックされました" Else Msgbox "キャンセルがクリックされました" End If End Sub

 4番目のパラメータが"True"だとキャンセルボタンが非表示で、11番目のパラメータが"True"だと、OKボタンが非表示になります。

 そして、これがオリジナルなOK/キャンセルボタンを作成する方法になります。しかし、これがこの Tip のポイントではありません。この Tip の目的は、オリジナルなOKキャンセルボタンを使うときに分かっただけのものです。 このダイアログフォーム上のフィールドに input validation チェックが入ってると、オリジナルOK/キャンセルボタンが使えなくなります。どうしてこうなるのか理由は定かではありませんが、問題が起こりうる場合というのは説明することができます。ダイアログボックスを開いて、入力チェックにひっかかっている(例えば未入力の場合とか)のにOKボタンを押したとき、入力チェックプロンプトのOKボタンを押してしまうと、OK/キャンセルボタンが効かなくなってしまうのです(どちらを押してもダイアログボックスは開いたままです)。一番最初にすべての入力チェックをパスした場合だけ、すべてうまく機能してくれます(ダイアログボックスは閉じる)。

 つまり、カスタムOK/キャンセルボタンが機能するのは最初だけで、ダイアログボックスを閉じることなくもう一度オープンしたりすると機能しなくなるということになります。これを回避する次善策としては、入力チェックはダイアログフォームを呼び出すスクリプトの中でやるということになります。例:

Sub Click(Source As Button) Dim ws As New NotesUIWorkspace Dim doc As NotesDocument Dim continue As Variant Set doc = ws.CurrentDocument.Document continue = True While continue If ws.DialogBox("sfrmTemp", True, True, True, False, False, False, "Title", doc, True, False) Then If doc.GetItemValue("Name")(0) = "" Then Msgbox "nameフィールドを入力してください.", 16, "フィールドの値が正しくありません" Else continue = False End If Else continue = False End If Wend End Sub

 ユーザーがキャンセルをクリックされるまで(ws.DialogBox メソッドは False を返しますので)、または、name フィールドが入力されるまで、whileループが続きます。name フィールドを入力しないと、メッセージボックスが表示されて、ループ処理が続きます。そして、入力チェックは下のフォームの代わりにスクリプトで実行されます。文書はリセットされないので、ユーザーが入力した文字列が消えてしまうことはありません。これは、ユーザーが Name フィールドが体という理由だけで最初からやり直す必要がなくなるということです。他の項目に入力された値は保護されます。

 もし、複数の入力チェックを行う必要があるなら、Elseif 条件を追加していけば問題ありません。入力チェックすべてにパスしたら、continue に Falseがセットされて、ループ処理から抜けます。

===引用ここまで===

 例示コードは、dim 宣言とかを追加してます。にしても、いまいち、いい使い道が思いつかないTipではありますが。個人的には、大した意味もなく無闇矢鱈にNotesの標準インターフェースから外れるべきではないとも思います。。。ところで、ND6から、input validationって「入力の確認」というヘンな日本語に変わったんですね。その真下にある「入力が有効」って使い道が分からないし、誤訳っぽい?(汗)。

This LotusScript was converted to HTML using the ls2html routine,
provided by Julian Robichaux at nsftools.com.
スポンサーサイト
  1. 2005/05/29(日) 01:40:28|
  2. Designer|
  3. トラックバック:0|
  4. コメント:0
<<Notes の URI で RSS フィードを作成する | ホーム | Lotus Domino R6 と Windows Active Directory のシングルサインオン>>

コメント

コメントの投稿

管理者にだけ表示を許可する

トラックバック

トラックバックURLはこちら
http://nsfl10n.blog9.fc2.com/tb.php/18-2905fa17
09 | 2017/10 | 11
Sun Mon Tue Wed Thu Fri Sat
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 - - - -

Search

Featured Entries

Recent Entries

Recent Comments

Recent Trackbacks

Archives

Category

Links

Ads

上記広告は1ヶ月以上更新のないブログに表示されています。新しい記事を書くことで広告を消せます。