2020年6月24日水曜日

Lotus Notes 9 カレンダーを定期的に .icsファイルでエクスポート、外部カレンダーと同期させる

Lotus Notes 9 と Googleカレンダーを同期させたい。そのようなソフトがいくつか公開されているようだが、試してみると自分の環境では動かない。
あとNotesカレンダーから手動で .ics 形式で予定をエクスポートできるが、エクスポートする期間を指定できないという致命的いまいち仕様がある。そこで自力で同期を試みた。

まだ同期はできていないが、ひとまず以下で、定期的にNotesカレンダーから指定期間分の .icsファイルを自動書き出しできたのでメモする。後日、このファイルをgoogleカレンダーで自動取り込みさせる予定。あとその逆の google->notes もいつかそのうち。

※当然ながらサーバー等の設定によって動かない場合もあります。実行は自己責任で。

  1. カレンダー を開き、作成-エージェント。実行は「スケジュール」「一日一回以上」とする。
  2. 「スケジュール」ボタンを押すと「エージェントのスケジュール」ウィンドウが開く。任意の実行間隔を設定する。
    下の「エージェントの実行場所」では、ローカルでなくメールサーバーを指定する。
  3. 「エージェントのスケジュール」タブを閉じ前の画面に戻る。
    左上の「エージェント ▼」の下の鍵マークをクリック、「実行時セキュリティレベルの設定」で「2. 制限された操作を許可する」を選択。
  4.  オブジェクトタブで Initialize を選択し、以下を入力。
Sub Initialize
    Dim session As New NotesSession
    Dim maildb As New NotesDatabase("", "")
    Dim cal As NotesCalendar
    Dim dt1 As NotesDateTime
    Dim dt2 As notesdatetime
    Dim db As NotesDatabase
    Dim doc As NotesDocument
    Dim body As NotesRichTextItem
    Dim Pre As Integer
    Dim Post As Integer
    REM Get calendar for current user
    Call maildb.Openmail()
    Set cal = session.getCalendar(maildb) ' Not In ref pane
    Set dt1 = session.createdatetime("Today")
    Set dt2 = session.Createdatetime("Today")
    Set db = session.CurrentDatabase
    REM delta 分だけ本日前後の予定を抽出する 先の予定だけでいいかも
    Pre = 1
    Post = 90
    REM Create document to post results
    Call dt1.AdjustDay(-1*Pre)
    Call dt2.AdjustDay(Post)
    filenum = Freefile()
    Open "パスとファイル名.ics" For Output Access Write As filenum   
    Print #filenum,cal.ReadRange(dt1, dt2)
    REM Read range and put in body of document
    REM Call body.Appendtext(cal.ReadRange(dt1, dt2))
    REM Call doc.Save( True, True )
    Close filenum
End Sub