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

Translate

2015年4月3日金曜日

XPagesで名前ピッカーを使う場合

こんにちは。
4月に入りました。すなわち、2015年も四分の一が過ぎたという事を意味します。
(毎年、この時期におんなじこと言ってるなぁ というのは気のせいではありません・・・)

さて、今日は見切り発車的な情報です。
この記事を読んだどなたかが補足してくれるのを待つという試みです(笑)


XPagesのアプリケーションでユーザーを選択する場合、
Extension Library(9.0からは標準)の「Name Picker」(9.0では「名前ピッカー」)を使うかと思います。
(癖があって、日本のユーザには使いにくいというのはさておいて・・・)

この「名前ピッカー」の設定方法は次の通りですね。




    
        
        
    


「user1」という編集ボックスを作成して、複数値を許可しています。
「名前ピッカー」はその「user1」に割り当てるようにしています。
ユーザの選択肢はドミノディレクトリにしていて、ユーザーとグループの両方が表示されるようにしました。

実行結果は下図のような形になります。
名前ピッカーの実行結果1

ドミノディレクトリに登録されているユーザー名とグループ(ほとんどグループなのは、諸事情によるものです(笑))が表示されています。
ここで左側のリストからユーザー/グループを選択して[追加]ボタンをクリックすると、右側のリストに移ります。
選択したら、[OK]をクリックすれば、「user1」の編集ボックスに代入されます。
簡単ですね。


ところで・・・
私のNotes/Domino環境ですが、
サーバーのnotes.iniには
NAMES=names.nsf,VistaNames.nsf
という行があります。
そうです。二次アドレス帳が設定されています。

ところが、上の画面にはその二次アドレス帳は表示されていません。
これは困りますね。
そんな時は「名前ピッカー」の設定を少し変えます。

こんな感じです。

    
        
            
                
                
            
        
    


「dataProvider」という項目を「dominoNABNamePicker」から「namePickerAggregator」に変更します。
そして、それの子供という形で配下に「dominoNABNamePicker」を作ります。

この実行結果は下図のとおりです。
名前ピッカーの実行結果2


見事にアドレス帳が選択できるようになりました。
選択肢にはnotes.iniの「names=」の行のものが表示されています。

これで先ほどよりは使いやすくなりましたね。

でも・・・
この場合、二次アドレス帳がDominoサーバ上にあることが前提となります。
しかし、必ずしもそうとは限りません。
Dominoには「ディレクトリアシスタント」という便利な機能があります!

これを利用すると、Dominoサーバ上にないアドレス帳の情報も参照することができるというものです。
ノーツクライアントのメールの「宛先」リンクをクリックするとこんな画面になります。
ディレクトリアシスタントを設定した場合

では、XPagesアプリの「名前ピッカー」でも使えるでしょうか?
「名前ピッカー」の設定は変えずに、再度実行してみました。

下図がその結果です。
名前ピッカーの実行結果3

あれ?表示されません。というか、選択すらできなくなってます。
はい。そうなんです。XPagesでは、ディレクトリアシスタントはこのままでは使えないのです。

じゃぁ、どうすればいいのか?



実は、方法があります。
ドミノディレクトリ(いわゆるnames.nsf)にあるサーバー文書を編集します。
編集するのは、二次アドレス帳がある方のサーバー文書です。
「セキュリティ」タブにある「信頼できるサーバー」という項目にXPagesアプリケーションがあるDominoサーバー名を入力します。
サーバー文書の編集

この後、Dominoサーバーを再起動します。
※ディレクトリアシスタントの設定は済んでいるものとします。


これでXPagesアプリを実行すると・・・
こんな感じになります。
名前ピッカーの実行結果4

無事に別のサーバーにある二次アドレス帳の内容が表示されました。
これでユーザー選択の方法が簡単になりますね!
良かった良かった・・・




ここまで書いておいてなんですが、うまくいく場合といかない場合があります。
二次アドレス帳となるノーツDBを変えるだけで挙動が変わってしまうことがあるのです。
設定としては上で書いたもので正しいと思うのですが、ノーツDBに何らかの条件があるのではないかと思っています。
ご存知の方がいれば、コメントとして残していただけると大変うれしいです。

ちなみに失敗すると、XPagesアプリがあるDominoサーバーのサーバーコンソールに
HTTP JVM: com.ibm.xsp.FacesExceptionEx: データベース dnames.nsf を開けません。
というエラーメッセージが出力されます。
さらに、「名前ピッカー」の実行結果は二次アドレス帳を選択しても、一覧に何も表示されないという哀しい結果になります。
名前ピッカーの実行結果5


と、中途半端な形になってしまいましたが、実現できたのは事実!ということで、
XPagesはすごいぜ!
とごまかして終わります・・・

2015年3月24日火曜日

XPagesで文書内の添付ファイル名を取得しよう!

皆さん、こんにちは。
当ブログも今日(2015年3月24日)で丸7年となりました。明日からは8年目に突入です。
「Notes/Dominoに関する事をテキトーに書いていきます。まぁ、いつまで持つかお楽しみということで。」という副題で始めましたので、ここまで続くのは驚異的でしょう(自分で言うな?)。

ということで、お祝いとしてこのボタンをクリックしましょう。
にほんブログ村 IT技術ブログへ
お祝いなんかしてやるもんか!という方は、このままお帰りください(笑)。


さてさて、では7年目最後の記事に移りましょう。

今日は前回の記事(XPagesのファイルアップロードでファイルの種類を限定する )に関連したものです。
前回は、画像ファイルをアップロードするという話でしたが、
画像の添付ファイルが複数アップロードされている場合、それらのファイル名をどのように取得すれば良いのか、また画面にどうやって表示すれば良いのか?を検証してみます。


なお、添付ファイルを複数アップロードする方法についてはXPagesで文書保存時に添付ファイルの数を限定させるには
また、添付ファイルイメージを画面に表示させる方法についてはXPagesで添付したイメージを画面に表示させるを見てください。


まず、添付ファイルがいくつ存在するのかを確認する必要があります。
これは、NotesRichtextItemクラスのgetEmbeddedObjects()を使います。
(文書全体の場合は、NotesDocumentクラスのgetEmbeddedObjects()を使います)。
これは、java.util.Vectorで返ってきます。
ですので、size()メソッドを使って、添付ファイルの数が取得できます。
ソースコードとして書くとこんな感じでしょうか。
var curdoc = document1.getDocument( true );
var ritem  = curdoc.getFirstItem( "AttachedFile" );
if ( ritem != null ) {
    if ( ritem.getType() == 1 ) {
        if ( curdoc.hasEmbedded() ) {
            var att:java.util.Vector = ritem.getEmbeddedObjects();
            return att.size();
        }
    }
}


添付ファイルは「AttachedFile」というリッチテキストフィールドに格納してあります。

次に、ファイル名はNotesEmbeddedObjectクラスのgetSource()メソッドを利用して取得できます。
NotesEmbeddedObjectオブジェクトはgetEmbeddedObjects()の戻り値であるjava.util.Vectorの一つ一つの要素になります。
ですので、
java.util.Vectorを要素数分だけ繰り返し処理をしながら、ファイル名を取得していくという事をします。
LotusScriptの場合、Forallという関数があり、それを使いますが、JavaScriptでは使えませんので、別の方法を利用します。

java.util.Iteratorクラスを利用します。
ソースはこんな感じになります。
var curdoc = document1.getDocument();
var ritem  = curdoc.getFirstItem( "AttachedFile" );
if ( ritem.getType() == 1 ) {
    if ( curdoc.hasEmbedded() ) {
        var att:java.util.Vector = ritem.getEmbeddedObjects();
        if ( att.isEmpty() ) {
            return null;
        } else {
            var atti:java.util.Iterator = att.iterator();
            while ( atti.hasNext() ) {
                var obj:NotesEmbeddedObject = atti.next();
                print( "ファイル名=[" + obj.getSource() + "]" );
            }
        }
    }
}


java.util.IteratorはVectorオブジェクトの要素を一つずつ取り出すのに利用します。
while文でループする際、hasNext()を使って、次の要素が存在している限り繰り返すようにします。
オブジェクトの取得は、nextを使います。
取得したオブジェクトはNotesEmbeddedObjectなので、getSource()でファイル名が出力されます。



これらを応用することで、添付ファイルの分だけ画面上にイメージを表示させることができます。
「繰り返し」コントロールを配置して、「使用するバインドデータ」はJavaScriptで添付ファイルの数を出力するものを書きます(一つ目のソース)。
繰り返しコントロールの索引名に「repeatIndex」と書いておきます(名前は任意)。

「繰り返し」コントロールの中に「イメージ」コントロールを配置します。
「イメージ」コントロールの「イメージソース」は「値の計算...」でサーバーサイドのJavaScriptを記述します。
ソースは2つ目のものを書きますが、若干変更します。

変更後のソースを載せます。
var curdoc = document1.getDocument();
var ritem  = curdoc.getFirstItem( "TitleLogo" );
var attname = new java.util.Vector();
if ( ritem.getType() == 1 ) {
    if ( curdoc.hasEmbedded() ) {
        var att:java.util.Vector = ritem.getEmbeddedObjects();
        return curdoc.getUniversalID() + "/$FILE/" + att[repeatIndex].getSource();
    }
}


「繰り返し」コントロールの中に配置されているので、繰り返し処理を行う必要はなく、「repeatIndex」の箇所にあるオブジェクトを取得すれば良いです。

サンプルDBとして作り、動かしてみたのがこちらの画面です。
複数のイメージを画面上に表示する

実用性はともかく・・・
XPagesではこのようなことも行えます。
ぜひ、活用してみてください。

では、今日はこの辺で。




Web化するならXPages!








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

2015年3月4日水曜日

XPagesのファイルアップロードでファイルの種類を限定する

皆さん、こんにちは。
先日、誕生日を迎えて、四捨五入すると50歳という、もう「アラフィフ」と言っても良くなってしまいました。
全然めでたくありません!

めでたくないので、このボタンをクリックしてください。
にほんブログ村 IT技術ブログへ


今日は久しぶりにXPagesの話題です。
たまには書かないと、「こいつ、ホントにXPagesできるのか?」と疑われてしまいそうなので(笑)


XPagesでは、ファイルを添付するのに便利な「ファイルアップロード」コントロールがあります。
こちらの説明については、以前にも書いていますので、
XPagesで添付ファイルの処理をする(アップロード)
XPagesで文書保存時に添付ファイルの数を限定させるには
そちらを参照願います。

さて、今日はそんなファイルアップロードコントロールのちょっとした応用についてです。
ファイルを添付する際、ファイルの種類を限定したい場合があります。
私にはそんな理由がありました。

それを実現する方法について説明します。

通常のHTMLでは、


と記述することで、アップロードするファイルの種類を限定させることができます。
input type='file'だけを記述したサンプル

ファイルアップロードコントロールをクリックしてみた

では、XPagesのファイルアップロードコントロールではどのように実装すれば良いのでしょうか?
「ファイルアップロードコントロール」のすべてのプロパティを見ると、「accept」という項目があります。
ここに記述してみました。

ところが・・・
動いてくれません。動くのですが、ファイルの種類が限定されません。

今度は、「ファイルアップロードコントロール」のオプションにある「MIMEタイプ」の値を変更してみました。
ところが・・・
やはり動いてくれません。

何でしょう???
IEでもfirefoxでもchormeでも同様の結果です。


私ができたやり方は
すべてのプロパティにある「attrs」で[+]をクリックして、「attr[0]」にacceptを設定したのでした。
attrの設定

ちなみに、複数のファイルの種類を設定したい場合は、
valueに「@List( "image/gif", "image/jpeg", "image/png" )」と配列になるように書いたら動きました。
この時、ちゃんと「◆値の計算」をクリックして、JavaScript式として書くのを忘れないようにしましょう!

実行結果はこちら。
ファイルの種類を増やしてみた

見事に、pngやjpgが増えています。


ということで、attrに値を設定することで色々とできるようですので、試してみてください。



では、今日はこの辺で。



Web化するならXPages!







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

2015年2月17日火曜日

ループ処理の計測

こんにちは。

まぁ、とりあえずはボタンを押してってよ、話はそれからだ。
にほんブログ村 IT技術ブログへ
新しい記事じゃなくても、ページを開いたら押してってください。じゃないと、テンション下がるわ~。


さて・・・気を取り直して。
今日はちょっとした実験です。


LotusScriptでのループ処理ですが、すでに当ブログでも紹介しているように色々な記述方法があります。
多すぎるがゆえに、「どれを使えばいいんだ?」ということになりがちです。

ここは、実行速度を計って、どれが良いのかを見てみましょう。
計測するのはFor文、Do文、While文の3つ(他にもありますが、それは貴方が自分で計測して!)です。
ループ回数ですが、10回や100回くらいでは違いを見るのは難しそうと判断して、思い切って10,000,000回(1千万回!)にしてみました(笑)。

さらにループするだけだと、あっという間に終わるかもしれないので、ループ処理1回ごとに乱数を発生させるようにしました。

ソースはこちらです。   
Sub Click(Source As Button)
    Const LOOPCNT = 10000000
   
    Dim startDT1 As String
    Dim endDT1   As String
    Dim startDT2 As String
    Dim endDT2   As String
    Dim startDT3 As String
    Dim endDT3   As String
    Dim i        As Long
    Dim j        As Single
   
    startDT1 = Format( Now, "h:nn:ss" )
    For i = 1 To LOOPCNT
        j = Rnd
    Next
    endDT1   = Format( Now, "h:nn:ss" )
   
    i        = 0
    startDT2 = Format( Now, "h:nn:ss" )
    Do While i <= LOOPCNT
        i = i + 1
        j = Rnd
    Loop
    endDT2   = Format( Now, "h:nn:ss" )
   
    i        = 0
    startDT3 = Format( Now, "h:nn:ss" )
    While i <= LOOPCNT
        i = i + 1
        j = Rnd
    Wend
    endDT3   = Format( Now, "h:nn:ss" )
   
    Msgbox _
    "For  :" & startDT1 & " - " & endDT1 & Chr$(10) & _
    "Do   :" & startDT2 & " - " & endDT2 & Chr$(10) & _
    "While:" & startDT3 & " - " & endDT3, _
    0 + 64, "ループ処理の計測"
End Sub


このコードを実行した結果が下図です。
実行結果

何度か実行してみましたが、ほぼ同じ結果となりました。
つまり、LotusScriptにおいてはForループの方が速いということですね。
※すべての言語で同じ結果になるわけではありません。実際にC++やPHPだとWhileの方が速いという事らしいです。


ループ回数が決まっているのであれば、For文を使うと良いでしょう。
ループの数が不定となる場合だけ、Do文もしくはWhile文を使うと良いでしょう。




では、今日はこの辺で・・・





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

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 カスタマイズとセキュリティ強化 - 株式会社エフ

2015年2月9日月曜日

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

皆さん、こんにちは。
今日2月9日は河豚の日だそうですが、私は「肉の日」と思ってます(笑)。
うん、今日の夕飯は肉を食べよう!

そんなことはどうでもいいですので、
にほんブログ村 IT技術ブログへ
をクリックして先に進みましょう。


今日も文書のフィールドを暗号化する方法についての話です。
昨日までの話は、
フィールドの暗号化(1)・・・暗号キーを作成する
フィールドの暗号化(2)・・・暗号キーをマージする
フィールドの暗号化(3)・・・文書のフィールドを手動で暗号化する
を読んでくださいね。

さて、昨日は文書のプロパティを使って、一度保存した文書を暗号化するという事を行いました。
簡単にできて分かり易いのは良いのですが、一度文書を保存しないといけないというのが難点ですね。

今日はノーツDBにちょこっと細工を施すことで、文書の新規作成時から文書のフィールドを暗号化できるようにします。

利用するノーツDBは昨日の記事で作成したものを利用します。

細工を施す場所は、フォームの「MainTopic」です。
Domino Designerでこの「MainTopic」フォームを開きます。

そうしたら、下記のフィールドを任意の場所に追加します。
No.フィールド名フィールドの種類フィールドの種類説明
1SecretEncryptionKeysテキスト編集可能シークレット暗号キーの名前

下図は実際に追加した画面です。
フォームにフィールドを一つ追加

できたら、フォームを保存します。
これで終了です。なんとまぁ簡単ですね。

では、どのように文書を作成すれば良いのかを見ていきましょう。

なにはともあれ、新規に文書を作成します。
「タイトル」「カテゴリ」「本文」には適当にデータを入力します。

「暗号化データ」(AngouData)には、暗号化したいデータを入力します。
まだ、この時点では文書は暗号化されていないので、周りに見ている人がいないか、気にしながら入力してください(笑)


そして、「暗号キー」(SecretEncryptionKeys)フィールドですが、ここは、作成したシークレット暗号キーの名前直接入力します。

直接って・・・
ヘルプを見たのですが、シークレット暗号キーの一覧を取得する方法はどうも用意されていないようです。なんて面倒なんでしょう・・・
と、愚痴はさておき、ここは先日作成したシークレット暗号キーの名前である「test」と入力しましょう。

こんな感じで入力してみました。
新規文書の作成

では、文書を保存してみます。
一瞬ですが、ステータスバーに 「文書を暗号化します...」というメッセージが表示されます(メッセージは履歴として確認することができます(下図))。
文書を保存したときのステータスバー

どうやら文書の暗号化に成功したようです。
では、例によって文書を開きなおしてみましょう。

暗号キーを持っていないユーザが文書を開いた場合の画面です。
文書の復号に失敗

はい。ちゃんと暗号化データが見えないことが確認できました。


これで、「SecretEncryptionKeys」というフィールドにシークレット暗号キーの名前を入力することで、文書のフィールドを暗号化できるという事が分かりました。
これは予約フィールド名になっているので、このような動きをするのです。
文書の暗号化をしたくない場合は、このフィールドに何も入力しなければよいです。

また、存在しない暗号キーを入力して文書を保存しようとすると、下図のようにエラーが表示されますので、変な値を入力してデータが見れなくなってしまう!という心配は不要です。
存在しない暗号キーの名前を入力した場合

ちなみに・・・
昨日の記事で書いた、文書のプロパティで「シークレット暗号キー」を選択するという方法を紹介しましたが、あれも実は同じことをしているのです。
ですので、文書を保存すると、「SecretEncryptionKeys」というフィールドに格納されるんですね。

昨日のブログの最後の画像をよぉく見ると、「SecretEncryptionKeys」というフィールドがあるのが確認できます。


ヘルプを見ると、シークレット暗号キーの名前の管理は自分で行う必要がある感じです。
手動入力させたくないのであれば、フィールドをダイアログリスト等にして選択肢として保存しておくようにと書いてありました。



次回は、このブログらしくLotusScriptで文書の暗号化を行う方法を紹介します。
では、今日はこの辺で・・・







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

2015年2月6日金曜日

フィールドの暗号化(3)・・・文書のフィールドを手動で暗号化する

こんにちは。IBM ConnectED 2015が開催されていたアメリカから帰国して一週間。ようやく体調も日本風に慣れてきた感じがします。

今日も昨日の続きで、文書のフィールドの暗号化についてです。

記事を読み始める前に
にほんブログ村 IT技術ブログへ
をクリックしてくださいね。別ウィンドウで開くように設定してありますから、[戻る]をクリックするとかいう手間はありませんので、ぜひ気軽に押してください。


では、今日の話です。
昨日までの
フィールドの暗号化(1)・・・暗号キーを作成する
フィールドの暗号化(2)・・・暗号キーをマージする
で、暗号キーを作成することはできました。

そこで今日はサンプルDBを作成して、文書のフィールドを暗号化するという事を行ってみます。

まずは、サンプル用にノーツDBを作成しました。
フォーム名は「MainTopic」。
フィールドは下表のとおり。  
No.フィールド名フィールドの種類フィールドの種類説明
1Subjectテキスト編集可能タイトル
2Categoryダイアログリスト編集可能カテゴリ
3AngouDataテキスト編集可能暗号化するデータ
4CreatedUser作成者作成時の計算結果文書を作成したユーザ名
5CreatedDateTime日付/時刻作成時の計算結果文書の作成日時
6Bodyリッチテキスト編集可能本文
配置はこんな感じにしてみました。シンプルですね。



フォームのデザイン


暗号化したデータを格納するのは、「AngouData」というフィールドです。このフィールドは境界線が赤くなるので分かり易いでしょう。


ビューは・・・適当で良いので、勝手に作ってください。


暗号キーを使って文書のフィールドを暗号化するにはいくつかの方法があります。
今日はそのうち、プログラミングでもなんでもない、手動での方法を紹介します。


まずは普通に文書を作成します。
ここで、「AngouData」にはまだデータを入力しないでください。
※今回紹介する方法では、新規作成時には文書の暗号化を行うことができないようなのです。

その他のフィールドは適当に入力してください。
そうしたら、文書を保存します。

保存できたら、開きなおして編集モードにします。
この状態で文書のプロパティを開きます。
右から2番目のタブ(セキュリティ)を開きます。
文書のプロパティ

シークレット暗号キーという箇所があるので、そこの"レ"をクリックして、既に作成した「test」というキーを選択します。
シークレット暗号の選択

そうしたら、文書のプロパティを閉じて、「AngouData」フィールドに適当な値を入力して、文書を保存します。
これで文書のフィールドが暗号化されました。

実際に文書を開きなおしてみましょう。
まずは、文書を作成したユーザー本人が開いた時の画面です。
文書の復号化

暗号キーを持っていますので、当然暗号化されたデータを読むことができています。
ステータスバーにも「文書の暗号を解読します...」と表示されていて、暗号化データを復号化しているのが分かります。

次に、暗号キーを持っていないユーザーがこの文書を表示した場合です。
文書の復号化に失敗

暗号化フィールドが空白になっていて、データが表示されていません。
また、ステータスバーにも「キーがないために暗号化した文書の一部にアクセスできません」と表示されていて、暗号化データの復号に失敗したことが分かります。

ちなみに、この暗号化データは非表示になっているのではなく、きちんと暗号化されています。
ビュー上で文書のプロパティを見るとそれが分かります。
ビュー上で文書のプロパティを開いた

文書のプロパティの中に「AngouData」というアイテムがありません。代わりに「$Seal」や「$SealData」といったアイテムが作成されています。これらが暗号データを表しています。


どうでしょうか?
割と簡単ですよね。これを使いこなすと、重要なデータもノーツDBに安心して格納できるようになります。
クレジットカードの番号を入力しないといけないような場合などに良いでしょう。
(暗号キーはあらかじめ関係者に配布しておく)。


明日(というか月曜日??)は、違った方法で文書のフィールドを暗号化する方法をご紹介します。

では、今日はこの辺で・・・







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