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

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

2015年2月10日火曜日

フィールドの暗号化(5)・・・LotusScriptを使って文書のフィールドを暗号化する

皆さん、おはようございます。中々、寒さが収まらないですね。私は暑さ寒さに弱い(笑)ので、早く適度な気候になってほしいものです。

さて、今日もこちらのボタンをクリックしてから先に進んでください。
にほんブログ村 IT技術ブログへ


今日もフィールドの暗号化の話です。
これまでの話は、下記を参照ください。
フィールドの暗号化(1)・・・暗号キーを作成する
フィールドの暗号化(2)・・・暗号キーをマージする
フィールドの暗号化(3)・・・文書のフィールドを手動で暗号化する
フィールドの暗号化(4)・・・特殊フィールドを使って文書のフィールドを暗号化する

今日は、昨日宣言したようにLotusScriptを使って文書のフィールドを暗号化してみます。


Domino Designerのヘルプを読むと、文書の暗号化をLotusScriptで行うにはNotesDocumentクラスEncryptメソッドを使うようです。
そこで、下記のようなLotusScriptを書いてみました。
Sub Click(Source As Button)
    On Error Goto ErrProc
   
    Dim uiws  As New NotesUIWorkspace    '現在のUI
    Dim uidoc As     NotesUIDocument    '現在の文書
    Dim udoc  As     NotesDocument    '現在の文書のバックエンド
    Dim item  As     NotesItem
   
    Set uidoc = uiws.CurrentDocument
    Set udoc  = uidoc.Document
   
    'アイテムを暗号化する
    Call udoc.ReplaceItemValue( "AngouData", "hogehoge" )
    Set item = udoc.GetFirstItem( "AngouData" )
    item.IsEncrypted = True
   
    '暗号キーのセット
    udoc.EncryptionKeys = "test"
   
    '文書を暗号化して保存する
    Call udoc.Encrypt()
    Call udoc.Save( True, True, True )
    Exit Sub
   
ErrProc:
    Msgbox _
    "呼び出し元:【" & Getthreadinfo( 10 ) & "】" & Chr$(10) & Chr$(10) & _
    Getthreadinfo( 1 ) & " " & Cstr(Erl) & "行目" & Chr$(10) & _
    "エラー番号:" & Cstr(Err) & Chr$(10) & _
    "エラー内容:" & Error, _
    0 + 16, "実行エラー"
    Exit Sub
End Sub

これをフォームのアクションボタンとして設置して実行してみました。
ところが・・・
Runtime Error

と、こんなエラーが発生してしまい、文書が保存されませんでした。
新規文書でも、既存文書でも同様のエラーが発生してしまいました。

そこで、Encryptメソッドのヘルプをもう一度よく読んでみると・・・
「DocumentContext プロパティで返される Document オブジェクトに対して、encrypt メソッドを使用することはできません。」

とあります。
どうやら、UI経由で取得した文書はEncryptメソッドでは暗号化できないようです。

仕方がないので、次のようなLotusScriptを作成することにしました。
このプログラムはバックエンドで文書を作成するので、ビューにアクションボタンとして設置しました。
Sub DocEncrypt()
    On Error GoTo ErrProc
   
    Dim session As New NotesSession            '現在のセッション
    Dim db      As     NotesDatabase        '自DB
    Dim doc     As     NotesDocument        '新規作成文書
    Dim item    As     NotesItem
   
    Set db   = session.CurrentDatabase
    Set doc  = db.CreateDocument
   
    '文書を作成する
    Call doc.ReplaceItemValue( "Form", "MainTopic" )
    Call doc.ReplaceItemValue( "Subject", "バックエンドで作成した文書" )
    Call doc.ReplaceItemValue( "Category", "Automatic" )
    Call doc.ReplaceItemValue( "CreatedUser", session.Username )
    Call doc.ReplaceItemValue( "CreatedDateTime", Now )
   
    'アイテムを暗号化する
    Call doc.ReplaceItemValue( "AngouData", "hogehoge" )
    Set item = doc.GetFirstItem( "AngouData" )
    item.IsEncrypted = True
   
    '暗号キーのセット
    doc.EncryptionKeys = "test"
   
    '文書を暗号化して保存する
    Call doc.Encrypt()
    Call doc.Save( True, True, True )
    Exit Sub
   
ErrProc:
    MsgBox _
    "呼び出し元:【" & GetThreadInfo( 10 ) & "】" & Chr$(10) & Chr$(10) & _
    GetThreadInfo( 1 ) & " " & CStr(Erl) & "行目" & Chr$(10) & _
    "エラー番号:" & CStr(Err) & Chr$(10) & _
    "エラー内容:" & Error, _
    0 + 16, "実行エラー"
    Exit Sub
End Sub


こちらを実行した結果が下図です。
バックエンドで暗号化した文書を作成したところ

本当に暗号化されているか確認してみるために、文書を開いてみます。
暗号化した文書を開いてみた

ステータスバーに「文書の暗号を解読します...」と表示されているので、復号化していることが分かります。
どうやら、正しく暗号化できたようです。

UIの文書を使用できないので、使いどころは限られてくるかもしれませんが、こういうやり方もあるという事を覚えておくと良いでしょう。


ということで、文書のフィールドを暗号化する方法については、今回でいったん終了とします。
XPagesで暗号化できるようになるのは、ノーツの次期メンテナンスリリースのようですから、正式にリリースされたら、続きとして紹介できれば良いと思っています(それまでに覚えているかどうかが問題・・・)。

では、今日はこの辺で。






【PR】ノーツ/ドミノに関するお問い合わせは下記まで【PR】
単純なDBのカスタマイズから他アプリケーションとの連携までご要望にお応えします!
Lotus Notes/Domino カスタマイズとセキュリティ強化 - 株式会社エフ

0 件のコメント: