December 13, 2014

uidoc.Refreshの隠しパラメーター?

テーマ:LotusScript

みなさんも、UI DocumentでBackgroundで更新された内容をUI上に反映させるためによく使うのが、uidoc.Refresh Methodです。


Designer 8.5.xまでのDesigner Helpには引数は一つしか書いてありません。


ところが、9.xのMail Templateを確認すると、Source.Refresh(False,False,True)のように書かれていて、引数は3個あるのです。


ちなみに、8.5のMail Templateにも同じLotusScriptのCodeが書かれています。



Refresh Method


8.5.xまでのHelpと異なり、Richtext、Embedded Object、Skip AddressLookupsの指定ができ、Notes 9のMail Templateでは、Skip AddressLookupsがTrue設定されているのです。


これはどういうことかと言うと、Mailでは、cMemoObjectと呼ばれるLotusScript Functionで様々な処理が行われます。


例えば、Memo FormのPostOpen Eventを見ると、以下のように書かれています。


Sub Postopen(Source As Notesuidocument)
If source.InPreviewPane Then Exit Sub
Call cMemoObject.PostOpen(source)
If source.editmode And Not (source.isnewdoc) Then
Call cMemoObject.querymodechange(source)
Call cMemoObject.postmodechange()
End If

'Checks Confidential for forward
Dim cText1,cText2 As String
cText1=source.document.ConfidentialString(0)
cText2 ="*"&cText1
If (source.fieldcontains("Subject",cText2) Or source.fieldcontains("Subject",cText1)) And source.isnewdoc Then
Call source.fieldsettext("Classification",cText1)
Call source.fieldsettext("tmpClassification",cText1)
End If
' End

'need this code so that Show Mail Options button appears properly in Draft memo
If Not source.isnewdoc And source.editmode Then
Call source.refresh(False, False, True)
Call source.gotofield("Body")
'need this code to remove errant space where AlertMessage would display
Elseif source.IsNewDoc Then
Call source.refresh(False, False, True)
End If
End Sub


これはどういう意味かというと、PostOpen Eventなのですが、開いた際に自動的にEdit Modeで開くDraftやStationeryの場合はcMemoObjectのQueryModeChangeやPostModeChangeの処理まで行っていることが分かります。


Mail Templateはこれらの処理で、DraftやStationeryを開いた際にAddressを変更してしまいます。

To/CC/BCCの内容をCheckして、Toに設定されているAddressがCC/BCCに設定されていた場合は、Toに設定されているAddressはCC/BCCから削除するという動きをするのです。


この変更が行われる為、UI Documentはその処理を反映するために、Refreshが必要になります。

古いMail Tempalteの場合は、単にCall Source.Refreshで処理されていて、この際にAddresslookupが行われていました。


このAddresslookupの際に、ServerにAccessできない状態の場合はLocalのAddressbookでAddresslookupが行われるのです。

どういうことが起こるかというと、宛先に設定されたAddressをLocal Addressbookで確認して、登録が無い場合には削除するかどうかを尋ねてきます。

これが、Local Addressbookに登録されていない宛先の数だけ繰り返して行われるのです。

Stationeryとして保存されるMailというのは、定型的に利用するものであり、部門内全員のAddressが宛先に設定されていることもある訳ですが、これらの宛先を全てLocalのAddressbookに登録していることはありません。

となると、登録されていないAddressの確認が行われると、非常に面倒な状態になるのです。


これを抑止するのが、uidoc.Refreshの最後のパラメーターとなっていて、True設定することで、Addresslookupを行わなくなるのです。


Mail Templateで活用できるパラメーターですが、Applicationでも特殊FormでMail送信するような場合もありますので、活用できるのではないでしょうか?


いいね!した人  |  コメント(0)  |  リブログ(0)
最近の画像つき記事
 もっと見る >>

AD

Ameba人気のブログ

Amebaトピックス

      ランキング

      • 総合
      • 新登場
      • 急上昇
      • トレンド

      ブログをはじめる

      たくさんの芸能人・有名人が
      書いているAmebaブログを
      無料で簡単にはじめることができます。

      公式トップブロガーへ応募

      多くの方にご紹介したいブログを
      執筆する方を「公式トップブロガー」
      として認定しております。

      芸能人・有名人ブログを開設

      Amebaブログでは、芸能人・有名人ブログを
      ご希望される著名人の方/事務所様を
      随時募集しております。