当ブログに掲載しているサンプルは、すべて利用者の自己責任という形でお願いします。
ただし、明らかな不具合がある場合、ご連絡いただければ、訂正記事を出します。
また、こちらのサンプルは、別のサイト等への公開、転載は一切禁止しています。
どうしてもと言う場合は、筆者にあらかじめご連絡ください。
記事そのもののリンクについてはご自由に行っていただいてよいです。

テクてく Lotus 技術者 Slack に参加しよう!

2011年12月29日木曜日

おじさんSEが学ぶXPages(15)

みなさん、こんにちは。

昨日、Twitterで予告したとおり、今年最後のブログです。
会社は昨日(12/28)で仕事納めでしたが、筆者自身はこのブログが仕事納めという事になります。

年々、ブログへの投稿数が減っていましたが、後半はXPages関連のブログを書くという事になり、そのおかげで、Lotus Notes/Dominoに関する情報発信を続けていく事が出来ました、

さらには、このブログを続けていったおかげで、2011~2012年度のIBM Championにも選出されました。先に選ばれた日本人Championのお三方の事を考えると、本当に筆者なんかで良いのか?とも考えてしまいますが、選ばれた以上は、それだけの事はしていきます。


さて、今年最後の記事を読む前に、最早、「言われなくても押してやるよ・・・」と思われているボタンを押してください。
にほんブログ村 IT技術ブログへ






それでは、前回の終わりで予告したように、今回は「蔵書の返却期限に意味を持たせる」ということを考えてみましょう。
色々と実現方法は考えられますが、今回はオーソドックスに「督促メールを送信する」という
事にします。
そう言う意味では、今回はあまりXPagesには触れないかもしれませんが・・・

では、仕様を確認しながら、実装方法を考えていきます。
督促メールを送るのは、貸し出されている蔵書の返却期限を過ぎているものに対してです。
従って、「蔵書貸出」ビューに表示されている文書のうち、返却期限が昨日以前のものが対象です。

「蔵書貸出」ビューの文書を全部取得して、1文書ずつ返却期限を確認しても良いのですが、貸出文書が増えてくると、時間がかかってしまいます。

そこで、「返却期限」を過ぎた「蔵書貸出」文書だけを表示するビューを作成します。

新規に「返却期限切れ」(別名:TimeExpire)という名前でビューを作成します。
ビューの選択式は、「SELECT Form ="Lending" & ( Status = "貸出中" & LendingTerm < @Today )」とします(下図参照)。
返却期限切れビューの作成

今回は、このビューの内容はこれ以上、編集する必要がないので、このまま[OK]をクリックします。


次に、督促メールを送るエージェントを作成します。
エージェントの名前は、「ReturnReminder」としてください(下図参照)。
督促メール送信エージェントの作成


コードは以下のように記述してください。
Sub Initialize
    Dim session As New NotesSession
    Dim db      As     NotesDatabase
    Dim view    As     NotesView            '返却期限切れビュー
    Dim doc     As     NotesDocument        '返却期限切れの蔵書貸出文書
    Dim mdoc    As     NotesDocument        '督促メール文書
    Dim mritem  As     NotesRichTextItem    '督促メール文書の本文(リッチテキスト)
   
    Set db   = session.Currentdatabase
    Set view = db.GetView( "TimeExpire" )
    view.Autoupdate = False
   
    Set doc = view.Getfirstdocument()
    Do While Not ( doc Is Nothing )
        'ここで督促メールを作成、送信
        Set mdoc = db.Createdocument()
        mdoc.Form    = "Memo"
        mdoc.SendTo  = doc.Getitemvalue( "LendBy" )(0)
        mdoc.Subject = "【督促メール from 図書管理 for XPages】"
        Set mritem = New NotesRichTextItem( mdoc, "Body" )
        Call mritem.AppendText( "次の図書の返却期限が切れています。早く返却するようにしてください。 " & doc.BookName(0) )
        Call mritem.AddNewline( 2, True )
        Call mritem.AppendDocLink( db, "リンクをクリックしてください", db.Title )
       
        '督促メールの送信
        Call mdoc.Send( False )
       
        '次の文書を取得
        Set doc = view.Getnextdocument( doc )
    Loop
   
    view.Autoupdate = True
End Sub
また、エージェントはスケジュールエージェントとして設定しておきます(下図参照)。

エージェントの内容


これで、返却期限を過ぎても、蔵書が返却されない場合は、利用者に督促のメールが、一日ごとに送信されるようになります。

リンクがDBリンクになっているので、対象となる蔵書貸出文書が直接開かれる事はないですが、今回はサンプルなので、ここまでとしておきます。



その他にもまだまだ問題点はありますが、実装そのものはここで終了とします。

次回は、XPages アプリケーションとしての設定を行います。


あと、1~2回でこの連載は終了となります。
目標としていた年内の完結は無理でしたが、実装自体は完了したので良しとさせてください。

来年は、今までのようにtips記事を増やすようにしていきます。
LotusScript、@関数の他に、XPagesのtipsもお届けできるようにしますので、ご期待ください。


それでは、来年も筆者共々、このブログをよろしくお願いします。


Lotus Notes/Dominoの事なら、何でも!!もちろん、XPagesについても承ります!
Lotus Notes/Domino カスタマイズとセキュリティ強化 - 株式会社エフ

0 件のコメント: