当ブログに掲載しているサンプルは、すべて利用者の自己責任とします。
ただし、明らかな不具合がある場合、ご連絡いただければ、訂正記事を出します。
また、こちらのサンプルは、別のサイト等への公開、転載は一切禁止しています。
どうしてもと言う場合は、筆者にあらかじめご連絡ください。
記事そのもののリンクについてはご自由に行っていただいてよいです。
xxのようなサンプルを作って欲しいとかxxxの作り方を教えて欲しいというお問い合わせには応じていません。
このようなお問い合わせは、株式会社エフまでご一報ください。

2020年3月19日木曜日

HCL NomadでのID切り替えを実装してみた

*** This article translated Implemented the ID switching application for HCL Nomad into Japanese.

*** この記事は、Implemented the ID switching application for HCL Nomad"を日本語に翻訳したものです。

皆さん、こんにちは。HCL Nomad使ってますか?
私はAndroidユーザーなので、ようやくHCL Nomadを利用できるようになりました。
そんなNomadを利用していて、一つ気になったのが「IDの切り替え」ができないということです。
モバイル端末は1台しかないので、IDの切り替えができないと検証が不便です。
そこで、なんとかIDの切り替えができないか?ということを考えました。

今回はその調査結果を書いていきます。


1.IDファイルの上書きを試してみた

前回の記事で、Nomadで利用されているユーザーIDのファイル名は「user.id」であることがわかりました。(notes.iniのKeyFileNameを取得して確認)
また、データディレクトリの場所も検索できることがわかっています。
なので、そこに別のユーザーのIDファイルを上書き保存してみたらどうだろう?ということを考えてみました。
IDファイルはNotes DBを用意してそこに文書を作成して添付しました。
その文書から添付したIDファイルをダウンロードするということを実際にやってみたところ…
HCL Nomadが起動できなくなりました!?一度終わらせての再起動もできません。

ロケーションの選択って…

どうやらIDファイルは違うユーザーのもので上書きしてはダメのようです。
※この後、HCL Nomadはアンインストールする羽目になってしまいました(T T)
では、IDファイルを複数持たせることはどうなのか?
仮に複数のファイルを保存できれば、ロケーションの切り替えができるかもしれません。


2.IDファイルを保存してみた

そこで、ファイルが保存できるかどうかを試してみました。
以下のサンプルコードを作成して、Nomadのデータディレクトリに保存してみました。

Sub Click(Source As Button)
    On Error GoTo ErrProc
    
    Dim session        As New NotesSession
    Dim strDirectory   As     String
    Dim strIDFilePath  As     String
    Dim db             As     NotesDatabase
    Dim docs           As     NotesDocumentCollection
    Dim doc            As     NotesDocument
    Dim ritem          As     NotesRichTextItem
    
    strDirectory   = session.GetEnvironmentString( "Directory", True )
    
    Set db   = session.CurrentDatabase
    Set docs = db.UnProcessedDocuments
    If docs.Count <> 1 Then
        Error 1000, "Please select only one document."
    End If
    Set doc   = docs.GetFirstDocument
    Set ritem = doc.GetFirstItem( "IDFile" )
    
    If doc.HasEmbedded Then
        ForAll x In ritem.EmbeddedObjects
            If x.Type = EMBED_ATTACHMENT Then
                strIDFilePath = strDirectory & "/" & x.Name
                Call x.ExtractFile( strIDFilePath )
            End If
        End ForAll
    Else
        Error 1001, "There is no ID file."
    End If
    
    Msgbox " The ID file was saved successfully.", 0 + 64, "Download ID"
    Exit Sub
    
ErrProc:
    MsgBox _
    "Error line:"    & CStr(Erl) & Chr$(10) & _
    "Error number:"  & CStr(Err) & Chr$(10) & _
    "Error content:" & Error, _
    0 + 16, "Download ID"
    
    Exit Sub
End Sub


実行してみた結果はこの通り。どうやら保存できたようです。

添付ファイルの保存はできるのね

3.ロケーションの切り替えを試してみた

Notesクライアントの場合、ロケーションの切り替えは画面右下にあるロケーション名をクリック、もしくは[ファイル][ロケーション][ロケーションの変更]メニューの実行で行えます。
HCL Nomadの場合はどうすればよいのでしょうか?
調べたところ、@コマンドやLotusScriptで実現できそうです。
問題はこれらの関数がHCL Nomadで動作するかどうかです。
早速試してみました。

@Command([SetCurrentLocation])
Sub Click(Source As Button)
    Dim uiws As New NotesUIWorkspace
    
    Call uiws.SetCurrentLocation( "" )
End Sub

ともに正常に動作して同じ結果になりました。

ロケーションの一覧が表示されたよ!

確かにロケーションの変更ができます。
これができるということは、NotesクライアントのようにIDファイルさえ用意しておけば、ロケーションの変更によるIDファイルの切り替えができるのではないかと考えました。

つまり、
1.IDファイルをNomadのDataディレクトリに保存(notes.iniのDirecotryから取得)
2.ロケーション文書をローカルのnames.nsfに作成(オンラインのロケーション文書をコピーして作成)
3.ロケーション文書の「IDの切り替え」フィールドに1.で保存したIDファイルのパスをセット
4.NotesUIWorkspaceのSetCurrentLocationメソッドを実行
5.手動でロケーションを切り替える(4.でロケーションの一覧が表示されます)

システム構成図

という手順でできるのではないかということです。
これを踏まえてサンプルプログラムを作成してみました。


4.サンプルプログラム

最初にNotesクライアントでアプリを起動します。

Notes DBをクライアントで開いたところ

ID File文書を作成するために、[Create]をクリックします。

IDファイル登録画面
ユーザー名を選択して、その人のIDファイルを添付します。この時、添付ファイルのファイル名はNotes DB内でユニークとなっている必要があります。
必要なユーザー数分を作成したら、準備は完了です。
これは、DB管理者ユーザーが操作するものです。
※ゆくゆくはID VaultからIDをダウンロードできるようになるといいなぁと思っています。

続いて、スマホもしくはタブレットでHCL Nomadを起動します。
NomadでNotes DBを開きます。

AndroidのNomadで開いた
※余談ですが、レスポンシブ対応できてますね。一応意識はしましたけど、特別なことはしていません。

最初に、[Ready]をタップします。これで、「オンライン」のロケーション文書に「user.id」のパスがセットされます。
これは1度だけ実行します。
成功すると、下図のようなダイアログが表示されます。

「オンライン」のロケーション文書を編集できた

次に[DL]をタップします。すると、ユーザー一覧のビューが表示されます。

ユーザー一覧ビューを表示
IDファイルをダウンロードしたいユーザーを選択して、[Download ID File]をタップします。
成功すると、下図のようなダイアログが表示されます。

IDファイルをダウンロードして、ロケーション文書を作成してます

[Go back menu]をタップしてトップ画面に戻ったら、[Switch]をタップしてロケーションの切り替えを実行します。
IDファイルをダウンロードしたユーザー名でロケーションができているので、それを選択して[OK]をタップします。

ロケーションに「Masahiko Miyo」が追加された!

すると、パスワードの入力画面になります。
スマホの言語を英語にするとメッセージも英語になるよ

これで、IDファイルの切り替えができました。
確認したい場合は、
@UserName関数を実行してみればわかります(面倒なので画面は省略…)



いかがでしょうか?
また、別のユーザーにしたければ、[Switch]をタップすればよいです。
ID Vault対応ができれば、ユーザーIDのパスワードがわかっていないとダウンロードすらできなくなるので、よりセキュリティの強化が望めるでしょう。
※今回の画面はNomad for Androidでしたが、iPadでも動作することを確認済みです!(iPhoneは持ってないので・・・)




HCL Nomadは@関数/@コマンド、LotusScriptがほぼきちんと動作しますので、このようなプログラムを作成することができます。
アイデア次第でもっと便利になるでしょう。




今回紹介したNotesアプリケーションの詳細を知りたいという方は、弊社までお問い合わせください。





それでは今日はこの辺で・・・



Notes/Dominoで困ったことがあれば、弊社にお問い合わせください。
HCL Masterの私が承ります!
お問い合わせはこちらから→Lotus Notes/Domino カスタマイズとセキュリティ強化 - 株式会社エフ

Implemented the ID switching application for HCL Nomad

I am an Android user, so I can use HCL Nomad at last.
I usually use HCL Nomad, I noticed that I can NOT switch ID.
Since I have only one smartphone, I inconvenience verification test.
So, I thought about 'how to switch ID'.

This time, I will write the research results.

1.I tried to overwrite ID File.

In the previous article, I found that HCL Nomad's user ID file name is 'user.id'.
I can get and check 'KeyFileName' in notes.ini.
I also know that the location of the data directory can be searched.
So, I thought about whether I can save another user's ID file there.

I created the Notes Application, I created the document and attached ID File.
I actually tried to download the attached ID file from the document...
HCL Nomad can no longer be ran! It cannot be restarted too.

launch error...

Apparently, it seems bad to overwrite another user's ID file.
* After this, I will be uninstalled HCL Nomad.
So, what about that having multiple ID files?
If I can store multiple ID files, that can be switching the location.

2.I tried to stored ID file.

So, I tried to save the file.
I created sample code below and saved ID file to HCL Nomad's data directory.

Sub Click(Source As Button)
    On Error GoTo ErrProc
    
    Dim session        As New NotesSession
    Dim strDirectory   As     String
    Dim strIDFilePath  As     String
    Dim db             As     NotesDatabase
    Dim docs           As     NotesDocumentCollection
    Dim doc            As     NotesDocument
    Dim ritem          As     NotesRichTextItem
    
    strDirectory   = session.GetEnvironmentString( "Directory", True )
    
    Set db   = session.CurrentDatabase
    Set docs = db.UnProcessedDocuments
    If docs.Count <> 1 Then
        Error 1000, "Please select only one document."
    End If
    Set doc   = docs.GetFirstDocument
    Set ritem = doc.GetFirstItem( "IDFile" )
    
    If doc.HasEmbedded Then
        ForAll x In ritem.EmbeddedObjects
            If x.Type = EMBED_ATTACHMENT Then
                strIDFilePath = strDirectory & "/" & x.Name
                Call x.ExtractFile( strIDFilePath )
            End If
        End ForAll
    Else
        Error 1001, "There is no ID file."
    End If
    
    Msgbox " The ID file was saved successfully.", 0 + 64, "Download ID"
    Exit Sub
    
ErrProc:
    MsgBox _
    "Error line:"    & CStr(Erl) & Chr$(10) & _
    "Error number:"  & CStr(Err) & Chr$(10) & _
    "Error content:" & Error, _
    0 + 16, "Download ID"
    
    Exit Sub
End Sub


The result of execution is below. Apparently, it seems to succeed to save it.

successful ID file saved



3.I tried to switch the location.

In the case of Notes client, switching the location can execute by [file] - [location] - [change location] menu or click the location name at the bottom right of the screen.
In the case of HCL Nomad, what do I should be how to do it?
After investigating, it seems that it can be executed by @ command or LotusScipt.
The question is whether these functions can execute on HCL Nomad?
I tried immediately.

@Command([SetCurrentLocation])
Sub Click(Source As Button)
    Dim uiws As New NotesUIWorkspace
    
    Call uiws.SetCurrentLocation( "" )
End Sub


Both was normally execution and same result.

Select location
It can certainly change the location.
I thought about that if the ID file was prepared, I can switch ID file by changing the location.

That is, it can be done by the following procedure.
1.    Create ID file document.
2.    Save the ID file to HCL Nomad's data directory.
3.    Create location document to names.nsf.
4.    Set the saved ID file path to "UserID" filed.
5.    Execute @Command ([SetCurrentLocation])
6.    A dialog is displayed, select a location

System configuration diagram

Based on this, I created a sample program.


4.Sample program


At first, it launches Notes application on HCL Nomad.

Notes application in Notes client

Click [Create] for create ID file document.

Create ID file document

Select user and attach the person's ID file. At this time, attached file's name must be unique in Notes application.
If it creates the required number of documents, it is ready.

Next, it launches HCL Nomad on smartphone or tablet.
Open the Notes application on HCL Nomad.

Notes application in HCL Nomad
First, tap [Ready]. This sets the 'user.id' path in the 'online' location document.
This operation must be do only once.
If it succeeds, it will be displayed dialog below.

Edit base location document
Next tap [DL]. It is displayed user list view.

User list view
Select the user for download ID file and tap [Download ID File].
If it succeeds, it will be displayed dialog below.

successful download ID
Tap [Go back menu] to return to the top screen, then tap [Switch] to switch locations.
It is created location by the user name that download ID file, select it and tap [OK].

Select user location
It displays input password dialog.

Input password

It has now switched the ID file.

If you want to know more about the Notes application introduced here, please contact us.





That’s all. Thank you for reading.







Notes/Dominoで困ったことがあれば、弊社にお問い合わせください。
HCL Masterの私が承ります!
お問い合わせはこちらから→Lotus Notes/Domino カスタマイズとセキュリティ強化 - 株式会社エフ

2020年3月17日火曜日

I tried "Let's change the password programmatically" with HCL Nomad.

This blog is translation of "https://guylocke.blogspot.com/2020/03/nomad.html".

I blogged "Let's change the password programmatically".
Ono-san of HCL Master, he challenged it, unfortunately he didn't seem to success it.

But I don't never give up!
So, I tried "change the password" with HCL Nomad.

It was struggling to select ID file.
because, smartphone or tablet is difficult to operate folders.

So, I thought about where "ID file folder" would be.

Usually, Notes data directory or user id information is stored in notes.ini.

It is stored up user ID information is "KeyFileName", data directory information is "Direcotry".

To get the value of an environment variable, see:
Dim session         As New NotesSession
Dim strDataDirecoty As     String
Dim strKeyFileName  As     String

strDataDirecoty = session.GetEnvironmentValue( "Direcoty", True )
strKeyFileName  = session.GetEnvironmentValue( "KeyFileName", True )



The execution results is below.
Execution result on Android

Great! I was able to get the value.

The value of 'KeyFileName' was 'user.id'.
After that, it connects these two with "/", it is the full path of the ID file.

I introduced by https://guylocke.blogspot.com/2020/03/nomad.html sample code.
It replaces the part of getting the ID file path, and it is done.
It is so easy.

The execution result is below.

Input password on HCL Nomad

Enter the old and new password and tap [OK] ...


Success!

It looks like to successfully changed your password!
By the way, let's checks that It created the document on the Notes DB.

View in the Notes Application


It was created the document that stored password.



That’s all. Thank you for reading.









Notes/Dominoで困ったことがあれば、弊社にお問い合わせください。
HCL Masterの私が承ります!
お問い合わせはこちらから→Lotus Notes/Domino カスタマイズとセキュリティ強化 - 株式会社エフ