2020年7月2日木曜日

Sametime 関連 nsf ファイル

Sametime のインストールを経験して3ヶ月が経過した頃、管理クライアントを操作していてある事に気づきました。

「タイトルがやたら長いデータベースがある...」

それは Sametime のインストールによって追加された vpuserinfo.nsf というファイルなのですが、そのタイトルがこちらです。

Extended access controls are enabled on this database. You must modify the database on a version 6 or later Domino server.

私は検証環境として Sametime サーバーを2台構築しているのですが、他方のサーバーも同じファイル名になっていました。

ここで Sametime インストールで追加されたファイルのタイトルを見てみると「エラーメッセージか?」と感じるような明らかに変なタイトルが幾つもあることがわかりました。※下図赤枠部分のファイルです
タイトルが明らかに不正なnsfファイル

ファイル名不正なタイトル
 vpuserinfo.nsf Extended access controls are enabled on this database. You must modify the database on a version 6 or later Domino server.
 stauths.nsf You cannot do a remote queue put to a pre-R5 server
 stautht.nsf You cannot administer Enterprise Directories on a pre-R5 server
stconf.nsf  Network protocol error: message from server is too large
 stconfig.nsf Accelerated replica creation cannot be used with an encrypted database
 stcs.nsf Invalid profile 
 stdomino.nsf Cannot close a database within an NSFSearchStart - NSFSearchStop loop that was opened outside of the loop
 stlog.nsf LookupExtended on server %a
 stnamechange.nsf Invalid VJournal property found


こういった事象は Sametime のフォーラム技術情報にも似たような報告がありました。



ところが、これらが私の環境と違う点は、CentOS8 でなく CentOS7 である事と、11.0 から 11.0FP1へのアップグレードではなく 11.0FP1 を新規にインストールしている事です。

そこでサポートへ問い合わせてみたところ、次の事がわかりました。

  • Linux 版 Sametime のインストールで Sametime 用のデータベースを作成する際データベースタイトル設定時にインストーラー側の問題で不正な文字列が入りタイトルにエラーメッセージのような文字列が入り不正になる
  • 技術情報では Sametime 11.0 から 11.0FP1 へのアップグレード時と記載があるがバージョンアップに限定されず、Sametime 11 や Sametime 11.0 FP1 の Linux 版 Sametime サーバー新規インストールの場合にも発生することを確認している
  • Windows 版では発生しない
  • ファイル名が正しいならば Sametime の機能上の問題はない
  • 正しいタイトルをテンプレートが保持しているため、テンプレートがあるファイルについては不正なタイトルは Design タスクが稼働すれば正しい名前に置換される。ただ、データベースの設計の引継ぎが無効にされている vpuserinfo.nsf は管理者が手動で「Sametime User Information」と変更しないと変わらない
つまりは、Design タスクを実行すればほぼ解決、という事なのですが、今回は検証環境という事で、普段は検証後にOSをシャットダウンしてしまうことから夜間に Design タスクが動いていなかったのです。

おそらく本番環境では定期的に Design タスクを実行しているでしょうから、なかなか気付く事は無いかもしれません。


ところで Sametime インストール時に追加されるファイルにはどのようなものがあるのでしょうか。こちらもサポートに聞いてみました。

 ファイル名  概要
 stofflinemessage.nsf オフラインメッセージ(チャット相手がオフラインの時に相手に送ったメッセージ)を格納するデータベース
 stlog.nsf Sametime のログデータベース
 stconfig.nsf Sametime の設定情報を格納するデータベース
 stauths.nsf Sametime SecretKeys を格納するデータベース
 stautht.nsf Sametime のサーバーのホスト名やポート番号を格納しているデータベース
 stdomino.nsf どのユーザーがオンラインであるかを格納する為のデータベース
 stnamechange.nsf Sametime で STNameChange タスクを使用し名前変更機能を使用する際使われるデータベース
 vpuserinfo.nsf ユーザーのコンタクトリストを格納するデータベース
 stcenter.nsf Sametime 8.5.2 まで提供されていた機能のひとつで、Sametime に Web ブラウザからアクセスする場合のホームページ(起点のページ)を表示していたデータベース
 stsrc.nsf Sametime 8.5.2 まで提供されていた Sametime Classic Meeting 機能を利用するための Notes データベース。Sametime 9.0 以降では Classic Meeting 機能が提供されていないので、アクセスが製品側で意図的に禁止されています。
 stconf.nsf Sametime 8.5.2 まで提供されていた機能のひとつで、Sametime Classic Meeting 機能を利用するための Notes データベース
 stcs.nsf Sametime 8.5.2 まで提供されていた機能のひとつで、Sametime Classic Meeting 機能を利用するための Notes データベース
これらのうち次のデータベースは Sametime 8.5.2 までのリリースで使用されていたデータベースで Sametime 9.x 以降、製品としてアクセスが禁止されているとの事。
stcenter.nsf
stsrc.nsf
stconf.nsf
stcs.nsf

上の4つのデータベースは、そのまま運用するか、OS レベルでリネームし NSF ファイルとして認識されない状態にして運用してほしいとの事でした。

また、stcenter.nsf と stsrc.nsf は、Sametime Community Server のインストールでは除外するよう機能改善要望が提出されているそうです。

2020年6月20日土曜日

HCL Nomad 向け「GPS Tools」データベースについて

HCl Nomad は、緯度経度などの位置情報をスマートフォンの GPS センサーから取りこむことができます。

これまで、このブログでも GPS に関連するエントリをいくつか投稿してきました。

昨日(2020年6月19日)の「テクてくLotus技術者夜会」では、HCL Nomad で GPS から位置情報を取得する方法や、Notesデータベースに保存されている位置情報をどのように活用できるかといった観点でお話させていただきました。

夜会の資料(後日リンクを貼ります)にはコードのサンプルを記載しているのですが、資料の文字は小さすぎて見づらいし、GPSは机上で動かしても全く面白みがないということもあり、夜会の資料で紹介している全てのサンプルコードを1つの nsf ファイルにまとめて公開することにしました。

こちらから NSFTools.nsf をダウンロードできます。

GPS Tools

上のリンクから NSFTools.nsf をダウンロードしましたら、HCL Nomad でアクセスできる Domino サーバーのデータディレクトリへ配置して、都合の良いアカウントで署名してください。
HCL Nomad から Domino に配置した NSFTools.nsf へアクセスして開くことができたら、画面左上のバーガーアイコンから「オフラインで利用できるようにする」を選び、ローカルに複製(レプリカ)を作ることをお勧めします。端末側へ複製した NSF Tools を使用することで、端末側で WiFi や 4G などの電波が届かないオフラインの(Domino サーバーへアクセスできない)状態でも、取得した位置情報を安定的にデータベースへ保存することができます。

このサンプルデータベースには、「2地点間の距離を求める」といったような HCL Nomad が無くても(Notesクライアントでも)試せる機能もあるのでデータのサンプルを入れておけばよかったと少し後悔していますが、ぜひご自身の HCL Nomad を屋外へ持ち出して位置情報を収集してみてください。

2020年5月10日日曜日

Notes で QR コードを表示しよう

今回は LotusScript の NotesHTTPRequest クラスを使って Node.js のアプリと連携する Notes アプリを作ってみましたので、ご紹介します。
※ NotesHTTPRequest クラスは 10.0 の新機能です。

作ったアプリは「テキストを QR コードに変換する」ものです。

(念のため)QRコードとは次のようなものです。


過去のノーツコンソーシアムのイベントでは "notes://" で始まる Notes URL が埋め込まれた QR コードを iPad のカメラで撮影し HCL Nomad ( iOS や Android における Notes クライアントとも言える公式アプリ)で Notes アプリを開くといったデモがありましたね。

iOS 端末には QR コードを読み込む機能がありますが、HCL Nomad からその機能を呼び出して撮影したQRコードに埋め込まれたテキストをフィールドへセットしたり QR コードを生成して表示する機能は、残念ながらまだ Notes 標準の機能にはありません。現状では Notes 以外のものに頼るしかありません。

「ノーツ qr」などとググってみれば、Java や XPages で作ったアプリの例がいくつかヒットします。

けれども現状の Nomad は Java は動かないのです…
XPages ならばブラウザがあれば使えますが... 今後は Domino Volt で!という声も聞こえてきそうですが...

今回は、Notes または Nomad からアクセスできる Web サービスに頼ることにします。

では、Nomad (上の LotusScript )から送信されたテキストから QR コードを生成し、QR コードの画像を返す Web サービスを用意します。

まずは Web サービスを node.js 上に構築します。

私は Windows 10 Pro に node.js をインストールしていますので、コマンドプロンプトから次のコマンドで準備しました。
> mkdir qrapp
> cd qrapp
> npm init
> npm install express
> npm install body-parser
> npm install qrcode

上のコマンドでは、適当な場所(デスクトップなど)に qrapp というディレクトリを作成し、そのディレクトリへ npm init で package.json を作ったら、express, body-parser, qrcode をインストールしています。

QRコードの生成には node-qrcode を利用しています。漢字にも対応しているところが素晴らしい!
https://github.com/soldair/node-qrcode


qrapp ディレクトリに app.js という名前でファイルを作成します。テキストエディタ等で次のコード(たったの14行!)をコピペして保存します。これが Web サービスのメインとなるものです。
const express = require( 'express' );
const bodyParser = require( 'body-parser');
const app = express();
const port = 3000;
const QRCode = require( 'qrcode' );
app.use( bodyParser.urlencoded( { extended: true } ) );
app.use( bodyParser.json() );
app.post( '/qr',( req, res ) => {
    console.log( req.body.qr_text );
    QRCode.toDataURL( req.body.qr_text, function ( err, qrcode ) {
        res.send( qrcode );
    });
});
app.listen( port, () => console.log( 'QR-Code app listening on port 3000.' ) );

この Web サービスは、 http://<host>:3000/qr でユーザーからのリクエストを待ちます。

次の JSON 文字列を http://<host>:3000/qr へ POST すると、QR コード画像をbase64エンコードした値を含む文字列「data:image/png;base64,<base64エンコードされた画像>」を返します。

{
    "qr_text" : "Notes/Dominoと焚き火をこよなく愛する中野です。どうぞよろしくお願いします!"
}

この Web サービスが返す文字列を後述する html へ埋め込むと QRコードが現れるという仕掛けです。


Web サービスを起動するには、コマンドプロンプトから qrapp ディレクトリへ移動して、次のコマンドを投入します。
> node app.js

Ctrl + C(Ctrl キーを押しながら C をタイプ)するとWeb サービスは終了します。



次に Notes アプリを作ります。


データベース内に2つのフォームを作ります。
  • テキストを入力する "Main" フォーム
  • QR コードを表示する "qrcode" フォーム
"Main" フォームには、一つの入力可能なフィールド "qr_text" と、ホットスポットボタンがあります。

以下(Sub Click と Function getQrCode)はホットスポットボタン「QRコード表示」のコードです。
Sub Click(Source As Button)
 Dim ws As New NotesUIWorkspace
 Dim ss As New NotesSession
 Dim req As NotesHTTPRequest
 Dim doc As NotesDocument
 Dim qr_text As String
 Const url = "http://<host>:3000/qr"

 qr_text = ws.CurrentDocument.FieldGetText( "qr_text" )

 Set req = ss.CreateHTTPRequest
 Call req.SetHeaderField( "Content-Type", "application/json; charset=utf-8" )
 req.PreferStrings = True

 Set doc = New NotesDocument( ws.CurrentDocument.Document.ParentDatabase )
 doc.Form = "qrcode"
 doc.qrcode = req.Post( url, |{ "qr_text": "| & qr_text & |"}| )

 Call ws.EditDocument( False, doc, True )
End Sub

7行目の "Const url ="には、Web サービスの URL である http://<host>:3000/qr を指定します。<host>の部分は IPアドレスやホスト名に書き換えます。


もうひとつのフォーム "qrcode" には、ひとつの計算結果テキスト(次の下線部)と、その前後に html タグを書きます。
</form><img src="<計算結果の値>"><form>
</form>から<form>までの文字全体をパススルーHTMLとしています。

計算結果テキストには qrcode フィールドの値を代入しています。なおここではフォーム上に qrcode フィールドを作る必要はありません



以上で完成です。

このサンプルデータベースでは、フォーム”Main”を表示するフレームセットを作りました。データベースのプロパティから、データベースを開いた時に表示するフレームセットとして指定しています。

Web サービスを起動したら、"Main" フォームを開いてテストしてみましょう。
iPad の Nomad でテストする場合、Node.js のアプリが使用するポート 3000 へアクセスできることを確認しましょう。

QR Code アプリをタップすると…

フォーム “Main” が開きます。QR コードにしたい言葉をタイプして「QRコード表示」ボタンをタップすると…

フォーム ”qrcode” 上に QR コードを表示します!




商品コードや URL などの Notes デーベースにある様々な文字列を QR コード化する事ができそうです。

2020年5月4日月曜日

Sameime 11 インストール

私は Notes/Domino のインストール経験はありますが、OSは Windows ばかりで、Linux へは誰の手も借りずにインストールしたことがありませんでした。


そんな私が Linux で稼働する Domino へ Sametime Community Server をインストールする機会がありました。

また Sametime Meetings Preview がもうすぐ始まりそうです。=>登録ページ


Sametime のインストールについて、前バージョンの経験者からは「非常に面倒」と聞いていました。V11 では、インストーラのサイズが小さくかつ簡単になった、といったようなことが公式ブログの記事(下のURL)にも書かれています。

『HCL Sametime 11 Chat 導入ガイドを公開しました』
https://hcljapan.co.jp/software/blog/hcl-sametime-11-chat-%E5%B0%8E%E5%85%A5%E3%82%AC%E3%82%A4%E3%83%89%E3%82%92%E5%85%AC%E9%96%8B%E3%81%97%E3%81%BE%E3%81%97%E3%81%9F



私はそんな記事を鵜吞みにしていたこともあり、完全に舐めてました。

Linux の操作も Sametime のインストールも経験の無い私が、インストールガイド(以降「ガイド」と呼びます)を読みつつ、わからないことをちまちまと調べたりサポートに問い合わせしたりした結果、Domino が既に導入済みの環境にもかからわず、完了までに約 2 人日もかかってしまったのです...



このエントリーでは、その顛末を記載します。ここでは、インストールの方法ではなく主に「はまったポイント」を取り上げます。ガイドの補足としてお読みください。



まずは Sametime V11 について知りたい方には、次の資料をご覧になることをおすすめします。

『製品情報: HCL Sametime V11 の製品紹介資料』
https://support.hcltechsw.com/csm?id=kb_article&sysparm_article=KB0078419



公開されているガイドは2種類あります。

ひとつが Windows と Linux の両方に触れている英語のものです。

『HCL Sametime 11 Installation and Administration Guide』
https://support.hcltechsw.com/csm?id=kb_article&sysparm_article=KB0074599



もうひとつは、Windows版のみ解説されている日本語のもの、

『HCL Sametime 11 Chat のインストール手順』
https://support.hcltechsw.com/csm?id=kb_article&sysparm_article=KB0074706



今回私は不慣れな Linux (CentOS7) 上へ Domino 11.0.1 、 Sametime 11.0 FP1 Community Server、Sametime 11.0 FP1 Proxy Server をインストールしてみようと思い立ち、前者のガイドを使用しています。




ガイドを読み進めてみたのですが、私にはわからないことがありました。

Standard と Limited Use の違い、Mux server、GSKit、Proxy Server、などなど...

これらは環境構築の前提として選択することが必要ですが、何を選択すればいいのかわからないので困りました。


現時点では、こういった用語について説明された V11 の文書が分散しているようで、V10 のようにまとまったヘルプがまだ存在していません。とは言え次の文書になんとなくまとまっています。

『HCL Sametime 11.0 Administrator Documentation』
https://help.hcltechsw.com/sametime/11.0.0/administrator_doc.html


公式のオンラインヘルプにある V10 の文書を参考にすることはできると思います。

『Sametime 10.0 Installation and Administration』
https://help.hcltechsw.com/sametime/10.0/index.html



V11 固有の機能について知りたい場合、カスタマーサポートのトップページから「Sametime 11 <知りたい事>」といった感じで検索してみて、さらに絞り込んでいくのも良いと思います。

https://support.hcltechsw.com/csm?id=csm_index




では、インストールしていきます。


ガイド中で Domino をインストールする項の冒頭に「Linux OS が "en_US" ロケールにインストールされていることを確認してください」(意訳)とボールド体で強調されている部分があります。ロケールを "ja_JP.UTF-8" で進めてしまった私は、のちのちドはまりすることになりました。少なくとも Sametime のインストール前には、次のコマンドでロケールを "en_US" に変えましょう。

> localectl set-locale LANG=en_US

ロケールを変えた後は念のためログインし直しましょう。
ロケールを変えずに進めるとどうなったかについては、後述します。

なお Domino のインストールについてガイドには手順が書かれていますが、インストールとセットとなるOS側の設定(ユーザーとグループを追加するなど)には触れられていません。「domino 11 centos install」でググるとヒットする海外の HCL Master のブログがありました。

ちなみに、Domino 11.0.1 のインストーラは、まっさらの環境に新規にインストールすることできます。


Sametime Community Server (以降「Sametime」と呼びます)では、Persistent Chat (永続的なチャット)が有効の状態でインストールされます。Persistent Chat は MongoDB (に格納された chat logging 情報)を利用します。そのため Sametime インストールの前に MongoDB のインストールを済ませておくことが必要です。ただし、Sametime インストール後はガイドの記載に従って Persistent Chat と MongoDB の要件を無効にすることができます。


という訳で先に MongoDB をインストールします。


MongoDB は yum(=パッケージ管理ツール)でインストールするのですが、MongoDB の最新バージョンではなく、サポートされている 3.6 というバージョンをインストールするために、ファイル mongodb-org-3.6.repo を作成しておきます。ここが私にとって一つ目のハマりポイントでした。

作成したファイルの内容はガイドに記載されていますので、それをコピペすることができます。内容の一部に、ページ幅で収まらず途中で改行されている長い1行があります。その行の右端にあるハイフンが、ペーストしたときに欠落する場合がありました。ハイフンが欠落したままだと yum によるインストールが失敗します。ご注意ください。

yum では MongoDB と依存関係にある他のパッケージを自動でインストールしてくれ、非常に便利です。



ガイドでは、インストールの後 MongoDB を起動します。私は Linux に慣れてないこともあり大文字小文字をガイドのとおりにタイプするよう注意しています。ガイドには次のコマンドの 1 文字目は大文字の S で記載されていますが、これでは MongoDB は起動しません。

Service mongod start

小文字の s に読み替えましょう。



次、めちゃくちゃ重要です。



ガイドに従い MongoDB の設定を進めていくと「db.createUser({」で始まるコマンドを実行する手順の前に、次の記述があります。

Exit the mongo shell (type ‘exit’) and restart the MongoDB server with ‘service mongod restart’ and then continue with the commands below -

【日本語訳】

mongo シェルを終了して('exit' と入力)、'service mongod restart' で MongoDB サーバーを再起動してから、以下のコマンドを実行します。

ここでは、MongoDB サーバーを再起動した後、「db.createUser({」で始まるコマンドを投入するのですが、コマンド投入の前には、

> mongo

の実行後、

> use admin

忘れずに実行しておきます。

ここで use admin を実行しない場合、作成されるユーザーが admin.sametimeUser ではなく test.sametimeUser となります。

「db.createUser({」で始まるコマンドを投入したあとに、admin.sametimeUser で作成されていることを確認するには、次のコマンドを投入します。

> mongo

> use admin

> db.system.users.find()


もし test.sametimeUser で作成されていた場合、次のコマンドで削除した後、admin に切り替えて作成しなおしましょう。

> mongo

> use test

> db.dropUser("sametimeUser")


ここで test.sametimeUser のまま進めてしまった私の環境では、MongoDB のログ(/var/log/mongodb/mongod.log)に認証関連のエラーが大量に記録されてしまい、たった8日間でファイルサイズが 24GB まで膨れ上がりました。ディスク容量が圧迫され、Domino の夜間タスク等で「空きが無い」ことに由来するエラーを頻発する事態となりました。



さらに導入を進めて MongoDB の設定が完了したら、いよいよ Sametime Community 11.0 FP1 のインストールです。
※Sametime Community 11.0 FP1 のインストーラは Sametime 11.0 がインストールされていない環境へのインストールが可能です。



インストーラパッケージを解凍すると「Server」サブディレクトリが作成され、その中にファイル install.bin が追加されています。このファイルでインストールを実行しますが、その前に install.bin があるディレクトリへ移動して、パーミッション(実行権限)を変更します。次のコマンドでパーミッションを変更できます。

> chmod 777 install.bin


この install.bin をオプションなしで実行すると、インストーラの GUI が起動します。

GUIのインストールを進めていくと、私の環境では、テキストが無く縦に3つのラジオボタンだけが表示される画面がありました。日本語のガイドには説明がありますが、上から Standard, Limited Use, Dynamic の三択です。



日本語のガイドには「HCL Sametime サーバーは LDAP を使用します」とありますが、次のブログにも書かれているとおり V11 は Domino ディレクトリだけで構成することも可能です。今回私は LDAP を使いませんでした。

https://hcljapan.co.jp/software/blog/why-you-need-to-upgrade-to-sametime-v11-right-now



インストールが成功すると、データディレクトリ直下にあるファイル  stsetup_exit_status.txt に 0 が入ります。

ロケールを "en_US" に変更してインストールすると書きましたが、私のように "ja_JP.UTF-8" のまま進めると、ファイル stsetup_exit_status.txt に 0 がセットされていても実はインストールに失敗している、といったことがありました。この問題は次の技術情報で公開されています。

『Installing Sametime Community Server in Linux fails with no error』
https://support.hcltechsw.com/csm?id=kb_article&sysparm_article=KB0078564


もし stsetup.log 内のエラーが合致する場合、上の技術情報に従い対応した後、Sametime を上書きインストールしましょう。



さて、Sametime のインストールまで終われば、クライアントから接続できそうです。



私は 接続を確認するクライアントとして、Notesクライアントに内臓の Sametime アドイン(右のサイドバーに「Sametime 連絡先」として表示されるやつ)を使いました。

このクライアントのデフォルトは Sametime サーバーへのアクセスにポート 1533/tcp を使います。そのためポート 1533/tcp を Linux(CentOS7) 側で開ける必要があります。
※この時点では、80/tcp, 443/tcp, 1352/tcp, 1533/tcp 等のポートを開けていました


Sametime のクライアントは Notesに内臓のアドイン以外にも、Webブラウザや iPhone/Android のアプリ、Windows/Mac へインストールするタイプのものがあります。使用するクライアントや機能によって使用するポートがいろいろあります。次のURLはV10の情報ですが参考になると思います。

『Ports to open in firewalls』
https://help.hcltechsw.com/sametime/10.0/plan/plan_portstoopeninfirewalls.html?hl=firewall



Sametime を起動するには、Dominoデータディレクトリにある ststart スクリプトを実行します。

> su notes

> ./ststart

実際は Domino が起動した時に、Domino のタスクのひとつ(notes.ini の servertasks= に追加されている staddin)として Sametime が起動します。

ststart スクリプトでは、Sametime の実行に必要な環境変数などを設定します。 Sametime の設定を変更して再起動しなければならない場合、Domino コンソールから quit を実行する、またはシェルから

> ./ststart stop

として停止させてから再度起動します。

Domino まで停止しなくて良い場合は、Domino コンソールから次のコマンドで終了と起動を行うほうが手間がありません。

tell staddin q

load staddin



Limited use ライセンスの場合は、機能制限を反映させるためにポリシーファイルを手動で変更します、との記載が次の技術情報にあります。

『Manual settings required for HCL Sametime 11 Limited Use after installation』
https://support.hcltechsw.com/csm?id=kb_article&sysparm_article=KB0075403


この他、ガイドにも、永続的なチャット(persistent chat)を許可する「ポリシー」を設定する方法が記載されてもいます。

これらポリシーの変更は、Domino データディレクトリ直下にあるファイル "policies.user.xml" を編集します。ガイドに記載のファイル名(...users.xml)は誤りですので検索にヒットしません。それから、Domino データディレクトリ下の policy ディレクトリにも同名のファイルがありますが、こちらは変更しないように。


policies.user.xml 内をポリシーの id で検索すると "im.v10sample.policy", "im.default.policy", "im.anonymous.policy" の3か所でヒットします。

"im.v10sample.policy" はコメントアウトされており無効です。

Webブラウザからの匿名アクセスを許可している場合に "im.anonymous.policy" が使用されます。ログインを前提とする場合は使用しません。

ちなみに、Domino ディレクトリに登録したグループ(のメンバー)へ適用するポリシーを設定することが可能との事。



MongoDB のログはデフォルトでは /var/log/mongodb/mongod.log に作成されます。前述のとおり私の環境では設定ミスにより肥大化する現象が発生しましたが、正しく設定された状態でもログファイルは mongod.log に追記される設定です。

MongoDBでは、ログをローテーションする設定が可能です。次の文書が参考になります。

https://docs.mongodb.com/manual/reference/command/logRotate/


ローテーションを設定すれば、コマンド発行によりログファイルを切り替え可能です。Sametime 稼働中にも切替できます。定期的にコマンド発行を実施することで、過去ログを圧縮したり古すぎるログを削除する、といった運用も可能と思います。



私は今回、GUIインストールとサイレントインストールのどちらも試しました。そのどちらにも Sametime のアンインストーラ uninstall.bin が存在しないのは私だけでしょうか...

【2020/5/11 追記】次の技術情報が公開されました。Linux 版の 11.0, 11.0FP1 ともにアンインストーラは無いようです...
How one can uninstalls Sametime v11/v11FP1 community server & then reinstalls it?
https://hclpnpsupport.hcltech.com/csm?id=kb_article&sysparm_article=KB0079104&sys_kb_id=31bbc8841bfcdc54c48197d58d4bcb14



Domino の起動直後、Domino コンソールに「重大: Failed to read from file」が表示されることがありますが、これは無視できるエラーらしいのですが、消すことができないようです。※SAME-32778 として問題が報告されています



Sametime Mux Server は、コネクションを管理できるものらしいのですが、ここでは不要なためインストールしませんでした。



Sametime 11.0 FP1 Proxy Server (以降「Proxy」と呼びます)のインストーラは、Sametime Communinty Server のとは別です。インストーラを解凍すると sametimeproxy サブディレクトリ内にファイル install.sh があります。これもパーミッションを変更しておきます。

> chmod 777 install.sh


Proxy のインストール時に "Sametime Server Host" や "Mongo Host" などを聞かれます。"Sametime Server Host" に FQDN を指定し、同一ホストにある "Mongo Host" にも同じ FQDN を指定したところインストールは失敗しました。その後、私の環境では setenv.sh に保存されていた "MONGO_HOST" の値を "127.0.0.1" と書き直し、再度インストールすることで成功しました。


Proxy Server までインストールが完了すると Web ブラウザやモバイルアプリから接続できます。※接続に必要なポートは firewall-cmd で追加しましょう



以上です。



検証環境の Sametime サーバーは、Windows 10 PC上の VMware Workstation 15 Player に作成した仮想マシンへ Linux(CentOS) を起動したものです。

iPad 上の Web ブラウザから PC 内のゲスト OS 上の Sametimeへアクセス

最終的には iPad にインストールした Sametime アプリから Windows 10 PC へ接続すると、仮想マシンへポートフォワーディングされ Sametime サーバーへアクセスできるようになりました。


iPad の Sametime アプリからPC内のゲストOS上の Sametime へアクセス


2020年3月30日月曜日

グループの入れ子レベル

ドミノディレクトリにグループを作成して、そのグループのメンバーとして別のグループ名を追加することがあります。

このように別のグループをメンバーに追加している状態をここでは「入れ子」と呼びますが、例えば次のように入れ子(ネストとも言う)のレベル(階層とも言う)が深くなった場合、どのレベルまでサポートされるかご存知でしょうか。

11.0 の Administrator ヘルプにある「Domino 命名規則」には(つい最近まで)次のように記載されていました。

メール配信では、グループを5つのレベルまで入れ子にできます。メール配信以外の目的では、6つのレベルまで入れ子にできます。

この制限がどのバージョンからあったかは不明ですが、ずいぶん前からあったように思います。

ところが、アクセス制御リストの画面にある「有効なアクセス権」ボタンを押して、あるユーザーのアクセス権を調べていた時「6つよりレベルが多いこと」に気付きました。

そこで、ドミノディレクトリへグループ文書を 20 作成して次のように設定しました。

グループ "Group1" のメンバー欄へ Group2 を追加
グループ "Group2" のメンバー欄へ Group3 を追加
グループ "Group19" のメンバー欄へ Group20 を追加
グループ "Group20" のメンバー欄へ Test User/v10 を追加

Group20 に追加したユーザー「Test User/v10」は入れ子のレベルが 20 です。

データベースの ACL へグループ "Group1" だけ追加して、「有効なアクセス権」ボタンから調べてみたところ、なんと「Test User/v10」はアクセスできそうでした。

実際に Test User/v10 がこのデータベースへアクセスすると、拒否されることなく開くことができました。


この結果をサポートへ報告してみたところ、次のことがわかりました。

  • メール配信時の入れ子の制限は、グループを Domino 側で展開する場合は制限が無く、クライアントから送信する場合は20レベル以上の階層はエラーになる
  • メール配信以外の入れ子の制限はなくなった
  • 入れ子の制限は変わっているが、ヘルプの更新がされないまま現在に至っている

制限が緩和されていたことを知りませんでした...

これを受けて、Notesクライアントでメールを作成して、宛先へ "Group1" を指定して送信してみたところ、20 レベルのユーザーのためエラーが表示され送信できません。


グループをクライアント側で展開しているためにエラーとなったようです。

次に、グループを Domino 側で展開させるために宛先を「Group1@v10」に変えて送信してみると、今度はエラーなしに送信できました。


さて、メール配信時の入れ子の制限はグループを展開する場所によって違うことを確認できましたが、Domino のメールへアクセスする方法はいくつかあります。どのアクセス方法が制限を受けるのでしょうか。

これまたサポートに聞いてみたところ、次の回答がありました。

【入れ子の制限なし:グループをDomino側で展開】
  • iNotes
  • Verse
  • Traveler
※CAA ではメールをブラウザ iNotes で開きますので入れ子の制限はありません

【入れ子の制限あり:グループをクライアントで展開、「グループ名@ドメイン名」の場合はDomino側で展開】
  • Standard版
  • Basic版
  • Nomad

入れ子と言えば、私が過去に書いた「グループの入れ子を洗い出す」というエントリがあるのですが、これも書き換えないと...

Nomad (iPad) は新元号に対応していました

iPad 版を皮切りに iPhone 版, Android 版もリリースされています「スマートデバイス対応Notes クライアント」とも言うべき HCL Nomad (以下 Nomad )について、新たに分かったことがありますので共有したいと思います。

Notes と Domino にも元号を表示する機能があるということで、昨年の改元に先立ち、新元号「令和」を表示するための対応を実施されたかたもいらっしゃると思います。 

改元のタイミング(2019年5月1日)で Nomad (当時は IBM Domino Mobile Apps 1.0.1 でした)が対応していたかどうかは、私は確認したという記憶が定かではありません。が、おそらく対応していなかったように思います。
※追記:サポートによるとiOS版 HCL Nomad は「1.0.5 から対応」とのこと

新たに分かったことというのは、Nomad でも「新元号が表示される」という事実です。

新元号に対応していない状態では、改元した日付を「平成 31年05月01日」と表示します。
対応している場合「令和 1年05月01日」と表示します。

今回 Nomad でも新元号を表示できることを確認しました。
下図は iPad の Nomad でのスクリーンショットです。

このビューの最初の列の値として「日付/時刻」タイプのフィールド「date1」を指定しています。その列では「年」の表示形式として "ggge" を指定しています。

上の図で「令和 1年05月01日」と表示されている文書を、Notesクライアントから文書のプロパティで見てみると、フィールド「data1」の値が 2019/05/01 であることがわかります。



ところで、私の iPad は、言語設定が「日本語」ですが、これを「英語」に変えると元号はどのように表示されるのでしょうか。

下図をご覧ください。最初のタブが「ホーム」ではなく「Home」と表示されているだけでなく、元号表示も変わりました。

元号は 「Reiwa」「Heisei」と表示されています!

年月日が漢字のままなのはご愛敬ですね。まあ Notes Standard でも「インターフェースの言語」を"英語"にすると同じ結果になるので...


もうひとつどうでもいい情報です。
元号表示は3桁表示まで対応しているようです。
西暦3017年は令和1000年に該当しますが、ggge での表示は「令和 *年」とアスタリスクに変換されてしまいました。

上の図は iPad の Nomad でのスクリーンショットですが、Notes クライアントでも同じ表示になりました。

2020年3月4日水曜日

セクションの境界線のスタイルを指定するには

LotusScript を使ってリッチテキストフィールドへセクションを追加したい場合があります。

次のコードのように NotesRichtextItem クラスの BeginSection メソッドを使うと、リッチテキストフィールドの最後に追加できます。
Dim ss As NotesSession
Dim dc As NotesDocumentCollection
Dim doc As NotesDocument
Dim body As NotesRichTextItem
Dim style As NotesRichTextStyle
Dim col As NotesColorObject

Sub Initialize
    Set ss = New NotesSession
    Set dc = ss.Currentdatabase.Unprocesseddocuments
    Set doc = dc.Getfirstdocument()
    Set body = doc.GetFirstItem( "Body" )
    
    Set col = ss.Createcolorobject()
    Call col.Setrgb( 0, 0, 255 )
    Set style = ss.Createrichtextstyle()
    style.Fontsize = 12
    style.Notescolor = COLOR_DARK_YELLOW
    
    Call body.Beginsection( "this is section title", style, col, True )
    Call body.Appendtext( "this is the string in the section" )
    Call body.Endsection()
    Call doc.Save( True, False )
End Sub

上のコードで追加したセクションは、下のように表示されます。

文書を編集モードに切り替え、セクションを選択した状態から「セクション」のプロパティを表示すると、「セクションタイトルと境界線」タブの中に「境界線」の「スタイル」という設定項目があります。※英語のプロパティ画面(下図)では Border の Style を指します


境界線の「スタイル」の選択肢は、現行バージョン(11.0)で11種類あります。

上のコードで追加したセクションの境界線の「スタイル」は、何も指定しない場合の(デフォルトの)スタイルになりました。

では、この境界線の「スタイル」は、どうやって指定できるのでしょうか。

BeginSection メソッドの第2パラメータでは NotesRichtextStyle のオブジェクトを指定できます。
Call NotesRichTextItem.BeginSection( title, titleStyle, barColor, expand )

けれども、このオブジェクトには境界線の「スタイル」に該当するものが見当たりません。境界線の「色」は、第3パラメータで指定が可能です

ちなみにセクションを扱う NotesRichTextSection クラスには、境界線の「スタイル」を設定したり取得できそうなメソッド/プロパティはありません。

どうやら標準のクラスでは、新たに作成するセクションの境界線の「スタイル」をデフォルトから変更したり、既存の境界線のスタイルを変更することができないようです。

それでは、このエントリで紹介した XML (Domino DTD = Domino文書型定義)を使う方法で新規に作成する場合はどうでしょうか。

まずは境界線のスタイルを変えて11種類のセクションを追加した文書を作成し、その文書を XML へ出力したものから、境界線のスタイル(borderstyle)の名前を調べてみました。

プロパティの表示
borderstyle
shadow
none
single
double
triple
twoline
windowcaption
gradient
tab
tabdiag


※表にあるスタイルの名前はこのヘルプ文書にも記載があります
※表の最下行の境界線は バージョン 8 で新たに追加されたスタイルらしいのですが、これはヘルプ文書に記載がありません。また XML へ出力しても borderstyle は設定されませんが、これは KKOOBM8D5V で報告されています。

出力した XML を参考に、borderstyle として tab を指定(21行目)したセクションを、ビューで選択している最初の文書へ追加してみます。

Dim ss As NotesSession
Dim db As NotesDatabase
Dim dc As NotesDocumentCollection
Dim doc As NotesDocument, tmpdoc As NotesDocument
Dim rtitem As NotesRichTextItem
Dim stream As NotesStream
Dim importer As NotesDXLImporter
Dim xml$, nid$

Sub Initialize
 Set ss = New NotesSession
 Set db = ss.CurrentDatabase
 
 xml = |





this is title string inner text
| '文書作成用のxmlをストリームへ書き込み、文書へ変換する Set stream = ss.CreateStream Call stream.WriteText( xml ) Set importer = ss.CreateDXLImporter( stream, db ) importer.DocumentImportOption = 2 'DXLIMPORTOPTION_CREATE Call importer.Process '変換した文書のリッチテキストフィールドの内容を選択文書へ追加する nid = importer.GetFirstImportedNoteId Set tmpdoc = db.GetDocumentByID( nid ) '変換した文書 Set dc = db.UnprocessedDocuments Set doc = dc.GetFirstDocument '選択文書 Set rtitem = doc.GetFirstItem( "Body" ) 'セクションを追加するリッチテキストフィールド Call rtitem.AppendRTItem( tmpdoc.GetFirstItem( "Body" ) ) Call doc.Save( True, True ) '変換した文書を削除する Call tmpdoc.Remove( False ) End Sub

実行後にビューで選択していた文書を開くと、下図のとおり tab スタイルのセクションを追加できていました。

既存のセクションの境界線のスタイルを参照したり変更できるプロパティとメソッドが欲しいので、アイデアとして投稿しました。ご賛同いただけるのであれば投票(Vote)してくださると嬉しいです。

2020年2月20日木曜日

表内での文字列置換の不具合を回避したこと

※以下のコードは Notes 9.0.1 FP8 と Notes 11.0.0 で確認したものです

リッチテキストフィールドに次のような 3 行 x 3 列の表だけあります。セル内にはテキストだけあり、テキストに文字の装飾は無い(ひとつのセルにひとつのテキストランがある)ものとします。

test (1)test (2)test (3)
test (4)test (5)test (6)
test (7)test (8)test (9)

この表には 9 つのセルがありますが、この表の特定のセルにある文字列を対象に、文字を置換します。

特定のセルは1つとは限らず、複数のセルに跨る場合もあります。複数のセルの場合、それらは連続しているものとします。

といった、非常に特殊な件に対応するため、ヘルプにある SetPositionAtEnd メソッドと SetEnd メソッドのサンプルコードを参考にしながら次のコードを書きました。

Dim ss As NotesSession
Dim doc As NotesDocument
Dim body As NotesRichTextItem
Dim nav As NotesRichTextNavigator
Dim range As NotesRichTextRange
Const elm = RTELEM_TYPE_TEXTRUN
Const firstRun = 3
Const lastRun = 6
Const findString = "test"
Const replString = "prod"
Sub Initialize
 Set ss = New NotesSession
 Set doc = ss.Currentdatabase.Unprocesseddocuments.Getfirstdocument()
 Set body = doc.Getfirstitem( "Body" )
 Set nav = body.Createnavigator
 
 If nav.Findnthelement( elm , firstRun ) Then
  Set range = body.Createrange()
  Call range.Setbegin( nav )
  If nav.Findnthelement( elm, lastRun ) Then
   Call nav.SetPositionAtEnd( nav )
   Call range.Setend( nav )
  End If
  Call range.FindAndReplace( findString, replString, RT_REPL_ALL + RT_FIND_CASEINSENSITIVE)
  Call body.Update
 End If
 Call doc.save( True, False )
End Sub

ビューでフォーカスしている文書に対してこのコードを実行してみたところ、テキストランの範囲(今回の条件下では、テキストランの位置はセルの位置と等しいため、3 ~ 6 番目のセルを指すことと同じです)にある 3 ~ 5 番目のセルにある値が FindAndReplace メソッドによって正しく置換されるのですが、最後の(6 番目の)セルの値が削除されてしまうことに気付きました。

test (1)test (2)prod (3)
prod (4)prod (5)
test (7)test (8)test (9)

この問題をサポートへ問い合わせたところ、不具合であると報告がありました。※TSAOBLXCQL で追跡できます

またこのコードの 21 行目にある Call nav.SetPositionAtEnd( nav ) の行を削除することで、範囲の最後にあるセルの値が削除される問題がなくなることを、併せて教えていただきました。

ところが、21行目を削除してみたのですが、指定する範囲を 3 ~ 6 とした場合、FindAndReplace で置換される範囲は 3 ~5 番目が対象となり、範囲の最後にあるセルの値が置換されずにそのまま残ります。範囲がセル 1 つ分少なくなったようです。

SetPositionAtEnd を削除したからでしょうか。理由はともかく範囲の最後に 1 を加えてみることにしました。

次のようにコードを書き替えました。※Initialize 以外の部分は同じなので省略

Sub Initialize
 Set ss = New NotesSession
 Set doc = ss.Currentdatabase.Unprocesseddocuments.Getfirstdocument()
 Set body = doc.Getfirstitem( "Body" )
 Set nav = body.Createnavigator
 
 If nav.Findnthelement( elm , firstRun ) Then
  Set range = body.Createrange()
  Call range.Setbegin( nav )
  If nav.Findnthelement( elm, lastRun + 1 ) Then
   Call range.Setend( nav )
  End If
  Call range.FindAndReplace( findString, replString, RT_REPL_ALL + RT_FIND_CASEINSENSITIVE)
  Call body.Update
 End If
 Call doc.save( True, False )
End Sub

こうして指定したセルの範囲にある文字をすべて置換できるようになりました。

test (1)test (2)prod (3)
prod (4)prod (5)prod (6)
test (7)test (8)test (9)

ちなみに、今回の条件の下では定数 elm の値を RTELEM_TYPE_TEXTPARAGRAPH (テキスト段落)に変えても同様の結果が得られました。

2020年2月19日水曜日

サマリーフィールドの制限を緩和するには

サマリーフィールドの制限をご存知でしょうか。

ややこしいのですが、サマリーフィールドの制限は2種類あります。

文書にあるサマリーフィールドのサイズの合計

バージョン 9.0.1 FP8 で、文書内にあるサマリーフィールドのサイズの合計が、これまでの 64K から 16M に拡張されました。
こちらは御代様のブログに詳細に書かれていますので、ここでは省略します。


サマリーフィールドひとつあたりのサイズ

バージョン 10 で、ひとつのサマリーフィールドのサイズの制限が、これまでの 32K から 64K へ拡張されました。※この資料の34ページで紹介されています



以下、後者の制限が拡張されたことについて書きます。
なお、今回私が試した環境は バージョン11のベータ2です。製品版ではありません。


ひとつのサマリーフィールドのサイズを 64K へ拡張する場合、対象のデータベースに対して -LargeSummary on オプションを付けて圧縮タスクを実行します。
この -LargeSummary on オプションは、9.0.1 FP8 以降でサマリーフィールドの合計サイズを拡張したい場合に指定するものでしたが、単一のサマリーフィールドのサイズを拡張したい場合にも使用します。

もし、データベースの ODS バージョンが 53 でない場合、 notes.ini に CREATE_R10_DATABASES=1 を追加してコピー圧縮も実行します。
※実は ODS 52 でも -LargeSummary オプションを有効にすると 64K まで使えるっぽいのですが...サポートしてくれるのかしら...

そして圧縮タスクを実行したデータベースで、フォームにあるテキストフィールドで半角英数字をタイプしていくと 32762 文字目をタイプしたところで次のメッセージが表示されました。
Field is too large (32K) or View's column & selection formulas are too large

上のメッセージを閉じた後、Ctrl + S で文書を保存しようとすると、次のメッセージが表示されました。
Field 'xxx' contains too many characters (nn over 32767 maximum). Field will be saved but will not be displayed in views.

また、タイプした文字列が制限を超えている状態で保存した文書を、再びフォームで開くと、制限を超えた部分?の内容が崩れたような表示になりました。試してみると、正しく表示されるのは 32000 文字までで、32001文字目をタイプして保存した文書を開きなおすと崩れていました。
表示が崩れた部分で文字数が増加。それらもカウントされて32001文字ではなくなった...

他にも、テキストエディタで編集した、32K 以上 64K 未満の文字列をクリップボード経由で貼り付けようとすると、こんなメッセージが表示されました。
Text on clipboard must be less than 64K bytes in order to be pasted

どうやらフォームを使って編集する場合、まだ 32K の制限が有効のままのようです。※しつこいようですがこの環境は製品版ではありません

それでは LotusScript のエージェントでバックグラウンド系のクラスを使えば、文書が作成できるのか見ていきます。

NotesDocument.AppendItemValue メソッドで 32K を超える 62000 文字をセットしたところ、文字が崩れることもなく保存できていました。保存した文書のプロパティから、アイテムに SUMMARY フラグがあることと、 Data Length が 62000 であることが確認できます。
フィールドフラグに SUMMARY、Data Length に 32K を超える値がある

これだけ見れば、確かに 32K の制限は緩和され 64K まで拡張されているようです。


最後に、先のエージェントを修正して AppendItemValue で 64K 以上の文字列をセットしてみます。

エージェントを実行したところ AppendItemValue の行で次のようなメッセージが表示されました。

Memory allocation request exceeded 65,000 bytes
64K の制限が機能していることを確認できました。


今回 LargeSummary オプションについて分かったことは、御代さんもブログの中でご指摘されてるとおり LargeSummary オプションが有効かどうかを簡単に確認する方法は現状ありませんが、この問題は SPR SWASBLWJ39 として報告されているとのこと。

実は LargeSummary オプションを有効にしたデータベースの icon note には、$LargeSummary アイテムの値に "1" がセットされるようですので、LotusScript 等を使えば確認できないわけではなさそうです。
※icon note の取得方法はこちらが参考になるかと。

なお、LargeSummary を有効にしたデータベースに対して、再度 -LargeSummary on を指定して Compact を実行すると「LargeSummary is already enabled in database xxx.nsf.」と表示されます。

それならば、いったん有効にするコマンドを投入してみて、already enabled と表示されなかったら有効ってことで、そうでなければ無効に戻せばいいよね?と安易に考えて、有効にしたデータベースに対して Compact のオプションに -LargeSummary off と指定してみたところ「Invalid command line argument」と叱られてしまいました。off というオプションは存在しないようです。仮に無効にできたとしても 64K 超えの値を含む文書が失われたりして...やらないけど。

あ、-i とともに -R または -r を付けて Compact タスクを実行して ODS バージョンを戻せば無効にできるかも...やらないけど。

2020年2月14日金曜日

読者/作成者とフィールド

昨日は会社帰りに「のの会」に参加しました。

毎月恒例のアベさんの@関数講座は、@DbColumn と @DbLookup の最終回でした。値を取得する列の番号の数値についての考察が大変興味深かったです。

今回私はある方から「読者/作成者と、関連するフィールド」というお題をいただきまして、下のスライドを使ってお話させていただきました。

資料の前半は、マニュアル的な退屈な内容です.。後半は読者/作成者フィールドにまつわる「よくある話」をまとめました。



Notesアプリの開発者には「文書を作成した本人が文書を編集できない...なんで?」といったようなつまづきがあります。私はときどきこのような特性を忘れてしまい、その都度簡単なデータベースを作成して確認することがありますが、この資料を今後は備忘録として活用することになりそうです。

Notes アプリ開発で、読者フィールドや作成者フィールドに初めて触れる方や学び直したい方にご一読いただけると幸いです。

2020年2月7日金曜日

HCL Nomad の GPS についてまとめました

昨夜は「テクてくLotus技術者夜会」に参加しました。

今回の夜会のテーマは、開発者ではないユーザー向けの Domino アプリ開発ツール「Domino Volt」と、HCL Master によるライトニングトークということで、私も発表の機会をいただきました。

既に本ブログでも2つのエントリでご紹介しましたが、発表のテーマを「HCL Nomad と GPS」として、ブログの内容はなるべく省略しつつ、実際に使ってみてわかったことや、サポートへ問い合わせて得たことを加えました。

発表で使用したスライドを SlideShare に共有しました。※下のスライドです

ヘルプに記載が無いことも紹介していますので、これから GPS を使った Notes (Nomad) アプリを開発したいと考えているユーザーの参考になれば嬉しいです。




2020年1月16日木曜日

ビューで選択中の文書を別のビューですばやく見つける方法

ショートカットキーといえば、効率よく操作するために欠かせません。最近は RPA を活用してショートカットキーが使える Notes クライアントを操作するようなことも行われているようです。

今回はビューやフォルダを移動する時に私が活用している方法をご紹介します。

実はバージョン 8.5 のヘルプには記載されていたのですが、バージョン 9 では探せていません。とは言え Notes V11 ベータでも使えることを確認していますので、まだ現役と思います。

さてここに、過去に実施したプロジェクトに関する話題を登録しているデータベースがあります。話題(=文書)を登録する際、プロジェクトの名称と実施された国名を保存しています。

「プロジェクト別」ビューは、プロジェクト名をカテゴリ表示します。プロジェクト名の左にある▼をクリックすると、プロジェクトに共通する文書のタイトルと国名を表示します。

同様に「国別」ビューもあり、こちらは国名の左にある▼をクリックすると、国に共通する文書のタイトルとプロジェクト名を表示します。

あなたは「プロジェクト別」ビューを見て、「AA橋再構築」が "A国" で実施されたプロジェクトであることを知ります。そしてあなたは「A国に関する話題をもっと知りたい」と思いました。

この時、

  1. ナビゲーションから「国別」をクリックする(国別のビューが開く)
  2. カテゴリのリストから "A国" を探す
  3. その文字の左側にある▼をクリックする

といったプロセスを踏むユーザーが多いのではないでしょうか。

これらの作業では「探す」ことが最もわずらわしいと思いますが、Notes クライアントには、この 2 と 3 を省略できるステキな方法があります。

では、プロジェクト別ビューで「AA橋再構築」プロジェクトの文書をシングルクリックして、文書にフォーカスが当たった状態(ハイライト表示)にしましょう。

ここから [Ctrl] キーを押しながら 1 の操作(ナビゲーションの「国別」をクリック)を行います。

するとどうでしょう!
フォーカスを当てていた文書が、開いた「国別」ビューの中で選択されているではありませんか!

当然のことながら、選択されている文書の付近には、同じ国に関連する文書が表示されています。

カテゴリの数が増えてくると、カテゴリのリストから特定の値(ここでは"A国")探すことは非常につらい作業になる場合がありますが、その手間が無くなったわけです。探す作業をショートカットできるのです。

このワザを、ビューを切り替えた後に目的のカテゴリや文書を「もう一度探す」ことをわずらわしいと感じているユーザーに紹介したところ、すぐさま部内に共有してくださり部内でも評判が良かったとのことでした。意外と知られていなかったようです。

このワザは、たとえばメールの「受信ボックス」の中でフォーカスしている文書を、「すべての文書」ビューに切り替えて表示する、といったように、フォルダとビューの間でも使えます。

私はパソコンの音をミュートしているので知りませんでしたが、選択している文書が切替先のビューに無い場合は警告音がなるとのこと。

ビューを選択するためにマウス操作する時点でショートカットキーじゃないだろうって?
では [Alt] + V → G → 矢印キーでビューを選択 → [Tab] → [Ctrl] + [Enter] なんていかがでしょうか。

2020年1月8日水曜日

Notes データベースを開くショートカットを iPad のホーム画面へ追加する

HCL Nomad が登場して、iPhone や iPad から Web/XPages 対応せずとも Notes データベースへアクセスできるようになり、とても便利になりました。

頻繁に使うデータベースのアイコンはいつも同じ位置にあってほしいものですが、現状の HCL Nomad には、Notesクライアントのようなワークスペースは無く、そのかわりに「最近使用したアプリケーション」の画面に(iPadでは)12個のアイコンが並びますが、アイコンの位置は固定ではありません。

「ワークスペースが無い」とは言え、実は HCL Nomad のローカルにも bookmark.nsf が存在し、一度開いたデータベースのアイコンはほぼほぼそちらに追加されているようなのですが、残念ながら現状ではワークスペースをサポートしていません

仮にワークスペースがあったとしても、まずは HCL Nomad を起動するところから始めなければならないのですが、例えば Windows で Notes クライアントを使っている方なら、Notes:// で始まる Notes URL を使ってショートカット等が作れることをご存知の方もおられると思います。

これを iOS 上の HCL Nomad でも応用できないものでしょうか。

まずは Safari を起動して、そのアドレス欄へ notes:///0000000000000E01 (13個のゼロ・イー・ゼロ・ワン)をタイプしてリターンキーをタップしてみましょう。
すると HCL Nomad が起動してローカルのアドレス帳が開くはずです。

Safari では、 http や https で始まる URL の場合、URL へアクセスしている状態で共有ボタンをタップして「ホーム画面に追加」をタップすれば、ホーム画面にアイコンを追加できます。

しかしながら notes:// で始まる URL ではその方法が使えません。

では、iOS 12 より実装されてた「ショートカット」アプリを使ってみます。

ショートカットアプリを起動して「ショートカットを作成」をタップします。
画面左側のアクションから「Web」をタップします。

画面左側の Safari のカテゴリにある「URLを開く」をタップします。すると、画面右側に「URL を開く」が追加されます。「URL を開く」の “URL”の文字をタップして Notes URL を入力します。

ここでは先ほどの notes:///0000000000000E01 をタイプします。
画面右上の「次へ」をタップします。

ショートカット名を「Nomadでアドレス帳を開く」として「完了」をタップすると、マイショートカットに追加したショートカットが表示されます。

次にショートカットをホーム画面に追加してみます。
マイショートカットに追加したショートカットを長押しして「詳細」をタップします。
「ホーム画面に追加」をタップして「追加」をタップします。するとホーム画面上にショートカットが作成できます。

ちなみに「ホーム画面に追加」をタップして表示される画面で、名前の左にあるアイコンをタップすると、アイコンのイメージを変えることができます。

アイコンのイメージをNotesデータベースのアイコンと同じにすると見た目にもわかりやすいですね。

ホーム画面上のショートカットを自分にとってわかりやすい場所へ移動しておけば、探す手間がなくなり、すばやくアクセスできるようになりそうです。


ところで、ショートカットで開きたい対象の Notes URL を取得するにはどうすればよいのでしょうか。(ここで言う Notes URL とは、URLの最初が notes:// で始まるアドレスを指します)

Notes URL を取得したいとき、私が最も手っ取り早いと考えるのは、Notes クライアントから対象のデータベースに保存されている文書のプロパティを表示し、ヘッダー情報(<+>) のタブにある「識別子」の文字列をコピーする方法です。

ちなみにコピーした文字列を iPad へ渡す手段として、私は iPad からもアクセスできる Domino にテンポラリのデータベースを用意しており、コピーした文字列を Notesクライアントからそのデータベースを経由して iPad へ渡しています。多少面倒ですが...

Notes URL の構造はこのあたりが参考になると思います。文書のプロパティからコピーした場合、URLの最後は文書の UNID で終わっているはずです。ショートカットで開く対象が文書ではなくデータベースそのものだったり特定のビューだったりする場合、取得した Notes URL から文書の UNID 等の余計な文字列を削除したりしておきます。
もし文書を編集モードで開きたい場合、Notes URL にある文書の UNID の右側に "?EditDocument" を追加します。

出来上がった Notes URL が正しく動作するかどうかを簡単に確認したい場合、前出のとおり Safari を使えます。Notes URL をアドレス欄へタイプ(またはペースト)してみましょう。HCL Nomad がインストールされていれば「このページを "HCL Nomad" で開きますか?」と聞かれ、「開く」をタップすれば HCL Nomad 上で開きます。

今回ご紹介した Notes URL のように、アプリに直接アクセスすることができるURLは「URLスキーム」とか「ディープリンク」などと呼ばれていました。検索する際の参考まで。