2010年1月15日金曜日

リンク付きメールには署名が邪魔なんです

LotusScript でフロントエンドに文書リンクが付いたメール作成画面を表示する場合、バックエンドで作成した NotesDocument に RichtextItem の "Body" を作り AppendDocLink で文書リンクを付けた後、NotesUIWorkspace.EditDocument でフロントエンドに登場させる、といった手法をとることもできます。

しかし"署名を自動的に追加する"が有効の場合、署名の後に文書リンクが付いてしまいます。

(個人的には署名なんて手動でも使いたくないが...orz)こいつが非常に気になります。

Memoフォームの設計を見るとPostOpenで署名を加えているようですが、まさか設計を変えるわけにもいかない...

どうにか署名の前に文書リンクをつけられないか、フロントエンドの文書へ直接文書リンクを付ける方法がなかろうかと試行錯誤を繰り返した末、実現できたのが次のような仕組みです。


アクションボタンの式(ビュー、またはフォームに設置できます。新規文書の場合もうひと手間かけること)

@Command([EditMakeDocLink]);
@Command([RunAgent]; "(MakeDocument)")


エージェント"MakeDocument"のスクリプト

Sub Initialize
Dim ss As New NotesSession
Dim doc As NotesDocument
Dim strSubject As String, strSendTo As String
Dim varSendTo As Variant
Dim nam As NotesName

'メモリ内文書を取得
Set doc = ss.DocumentContext

'件名を取得
strSubject = doc.GetItemValue("Subject")(0)

'宛先を取得
varSendTo = doc.GetItemValue("Attention")

'階層なしの値に置換 (複数値に対応)
For i = 0 To Ubound(varSendTo)
Set nam = New NotesName(varSendTo( i ))
varSendTo( i ) = nam.Abbreviated
Next

'単一の文字列に変換。値はカンマ区切り
strSendTo = Join(varSendTo, ", ")
Dim db As New NotesDatabase("", "")

'現在のユーザーのメールアプリケーションを開く
Call db.OpenMail
If db Is Nothing Then
Messagebox "メールが開きません。",,"警告"
Exit Sub
End If

Dim ws As New NotesUIWorkspace
Dim uidoc As NotesUIDocument

'フロントエンドでMemoフォームを開く
Set uidoc = ws.ComposeDocument(db.Server, db.FilePath, "Memo")
With uidoc
Call .FieldAppendText("EnterSendTo", strSendTo)
Call .FieldAppendText("Subject", strSubject)
Call .GotoField("Body")
Call .InsertText("下のリンクをクリックして確認してください。")
Call .InsertText(Chr(10))
Call .Paste 'クリップボードの文書リンクを張付
End With
End Sub


でもこれでは本文で文字のスタイルを変更したり整った表を作るといったことがやりづらいのです。やっぱりバックエンドでメール文書を作りたいのですよ...

もう、署名なんてなければいいのに!

ところでメールアプリケーションにはリンク付きメールを作る際に便利な Bookmark フォームがあります。

Bookmark では現在開いている(あるいはビューでフォーカスが当たっている)文書のリンクがついたメールを作成できますが、フロントエンドで使うにはタイトルが勝手に設定されたりとちょっと曲者なのです。

でも署名が付かないところはステキです

2 件のコメント:

  1. こんにちは。
    私も昨日、ちょうどこの自動署名の問題に直面しましたが苦心の末なんとか解決できました。
    差し出がましいかも知れませんが、1つの案としてご紹介します。

    私はリッチテキストだけを配置したフォームを使用して編集済みのバックグラウンド文書を編集モードで開き、リッチテキストのすべての内容をクリップボードへコピーしてすぐに閉じ、メール画面を開いた後、その内容をBodyへペーストすることで署名の前へ挿入することができました。

    一時利用するフォームはSaveOptionsへ"0"を設定しておくことで保存されません。また、文書を保存しないので読者権限ユーザでも使えます。

    返信削除
  2. わろさん、コメントありがとうございます。

    なるほど、新規に開いたメールのBodyへ移動するとカーソルは一番最初の位置にある、だから署名の前にペーストできるというわけですね。

    ひょっとすると画面がフラッシュしたように見えるかもしれませんが、問題ないと思います。

    参考になりました。

    今後ともお気軽にコメントおねがいします。

    返信削除